新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Alientek SMT32開發板 跑馬燈實驗

        Alientek SMT32開發板 跑馬燈實驗

        作者: 時間:2016-11-25 來源:網絡 收藏
        通過本節的學習,你將了解到STM32的IO口作為輸出使用的方法。本節分為如下幾個小節:

        3.1.1 STM32 IO口簡介

        本文引用地址:http://www.104case.com/article/201611/321133.htm

        3.1.2硬件設計

        3.1.3軟件設計

        3.1.4仿真與下載

        3.1.1STM32 IO簡介

        作為所有開發板的經典入門實驗,莫過于跑馬燈了。ALIENTEKMiniSTM32開發板板載了2個LED,DS0和DS1,本實驗將通過教你如何控制這兩個燈實現交替閃爍的類跑馬燈效果。

        該實驗的關鍵在于如何控制STM32的IO口輸出。了解了STM32的IO口如何輸出的,就可以實現跑馬燈了。通過這一節的學習,你將初步掌握STM32基本IO口的使用,而這是邁向STM32的第一步。

        STM32的IO口可以由軟件配置成8種模式:

        1、輸入浮空

        2、輸入上拉

        3、輸入下拉

        4、模擬輸入

        5、開漏輸出

        6、推挽輸出

        7、推挽式復用功能

        8、開漏復用功能

        每個IO口可以自由編程,單IO口寄存器必須要按32位字被訪問。STM32的很多IO口都是5V兼容的,這些IO口在與5V電平的外設連接的時候很有優勢,具體哪些IO口是5V兼容的,可以從該芯片的數據手冊管腳描述章節查到(I/OLevel標FT的就是5V電平兼容的)。

        STM32的每個IO端口都有7個寄存器來控制。他們分別是:配置模式的2個32位的端口配置寄存器CRL和CRH;2個32位的數據寄存器IDR和ODR;1個32位的置位/復位寄存器BSRR;一個16位的復位寄存器BRR;1個32位的鎖存寄存器LCKR;這里我們僅介紹常用的幾個寄存器,我們常用的IO端口寄存器只有4個:CRL、CRH、IDR、ODR。

        CRL和CRH控制著每個IO口的模式及輸出速率。

        STM32的IO口位配置表如表3.1.1.1所示:


        表3.1.1.1STM32的IO口位配置表

        STM32輸出模式配置如表3.1.1.2所示:

        表3.1.1.2STM32輸出模式配置表

        接下來我們看看端口低配置寄存器CRL的描述,如下圖所示:


        圖3.1.1.1端口低配置寄存器CRL各位描述

        該寄存器的復位值為0X4444 4444,從上圖可以看到,復位值其實就是配置端口為浮空輸入模式。從上圖還可以得出:STM32的CRL控制著每個IO端口(A~G)的低8位的模式。每個IO端口的位占用CRL的4個位,高兩位為CNF,低兩位為MODE。這里我們可以記住幾個常用的配置,比如0X4表示模擬輸入模式(ADC用)、0X3表示推挽輸出模式(做輸出口用,50M速率)、0X8表示上/下拉輸入模式(做輸入口用)、0XB表示復用輸出(使用IO口的第二功能,50M速率)。

        CRH的作用和CRL完全一樣,只是CRL控制的是低8位輸出口,而CRH控制的是高8位輸出口。這里我們對CRH就不做詳細介紹了。

        給個實例,比如我們要設置PORTC的11位為上拉輸入,12位為推挽輸出。代碼如下:

        GPIOC->CRH&=0XFFF00FFF;//清掉這2個位原來的設置,同時也不影響其他位的設置

        GPIOC->CRH|=0X00038000;//PC11輸入,PC12輸出

        GPIOC->ODR=1<<11;//PC11上拉

        通過這3句話的配置,我們就設置了PC11為上拉輸入,PC12為推挽輸出。

        IDR是一個端口輸入數據寄存器,只用了低16位。該寄存器為只讀寄存器,并且只能以16位的形式讀出。該寄存器各位的描述如下圖所示:


        圖3.1.1.2端口輸入數據寄存器IDR各位描述

        要想知道某個IO口的狀態,你只要讀這個寄存器,再看某個位的狀態就可以了。使用起來是比較簡單的。

        ODR是一個端口輸出數據寄存器,也只用了低16位。該寄存器雖然為可讀寫,但是從該寄存器讀出來的數據都是0。只有寫是有效的。其作用就是控制端口的輸出。該寄存器的各位描述如下圖所示:


        圖3.1.1.3端口輸出數據寄存器ODR各位描述

        了解了這幾個寄存器,我們就可以開始跑馬燈實驗的真正設計了。關于IO口更詳細的介紹,請參考《STM32參考手冊》第69頁7.1節。

        在此,我們可以總結一下,對于學過AVR的人來說,我們都知道AVR的IO口由3個寄存器控制:DDR、PORT、PIN。這里我們可以拿STM32的IO控制寄存器和AVR的來個類比:

        1,STM32的CRL和CRH就相當于AVR的DDR寄存器,用來控制IO口的方向,只不過STM32的CRL和CRH功能更強大一點罷了。

        2,STM32的ODR就相當于AVR的PORT,都是用來控制IO口的輸出電平或者上下拉電阻的。

        3,STM32的IDR就相當于AVR的PIN,都是用來存儲IO口當前的輸入狀態(高低電平)的。

        除此之外,STM32還有BSRR、BRR、LCKR等幾個寄存器用于控制IO口,這點是AVR所沒有的。

        3.1.2硬件設計

        該實驗的硬件電路在ALIENTEM Mini STM32開發板上已經連接好了。DS0接PA8,DS1接PD2。所以在硬件上不需要動任何東西。其連接原理圖如下:


        圖3.1.2.1LED與STM32連接原理圖

        3.1.3軟件設計

        首先,找到之前新建的TEST工程,在該文件夾下面新建一個HARDWARE的文件夾,用來存儲以后與硬件相關的代碼。然后在HARDWARE文件夾下新建一個LED文件夾,用來存放與LED相關的代碼。


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 莒南县| 莎车县| 墨脱县| 收藏| 长宁县| 桦川县| 塔城市| 鸡东县| 吉木萨尔县| 安仁县| 南川市| 遵义县| 曲靖市| 乃东县| 息烽县| 大悟县| 静安区| 平泉县| 林西县| 黔西| 青铜峡市| 安龙县| 连城县| 滦南县| 曲水县| 祁门县| 新营市| 宜都市| 崇文区| 桃源县| 连南| 驻马店市| 内丘县| 嘉善县| 大邑县| 鹤庆县| 泸水县| 玉门市| 磐石市| 余江县| 光泽县|