由於stm32有很多外設,為降低功耗,每個外設都對應著乙個時鐘。在晶元剛剛上電時,這些時鐘都是被關閉的。如果想要外設工作,必須把相應的時鐘開啟。
即當gpio口復用usart進行通訊時,必須要先使能gpio的時鐘,然後再使能具體外設的時鐘(usart的時鐘)!!!
1. stm32微控制器的i/o埠配置步驟:
(1)gpiox埠定義
(2)gpio_pin_x管腳定義
(3)gpio_inittypedef初始化埠引數定義
(4)gpio_init初始化埠定義
每個gpiox埠:共有7個設定暫存器
(1)兩個32位的配置暫存器(gpiox_crl, gpiox_crh)
(gpiox_crl)(x=a....g): gpiox configuration register low, gpiox埠低配置暫存器,用於配置gpiox埠的第0位~第7位。
(gpiox_crh)(x=a....g): gpiox configuration register high, gpiox埠高配置暫存器,用於配置 gpiox埠的第8位~第16位。
(2)兩個32位的資料暫存器(gpiox_idr, gpiox_odr)
(gpiox_idr)(x=a....g): gpiox input data register, gpiox輸入資料暫存器,讀出對應i/o口輸入的狀態值。
(gpiox_odr)(x=a....g): gpiox output data register, gpiox輸出資料暫存器,讀出對應i/o口輸出的狀態值。
(3)乙個32位的置位/復位暫存器(gpiox_bsrr)
(gpiox_bsrr)(x=a...g): gpiox bit set/reset register 用於設定埠的電平
(4)乙個16位的復位暫存器(gpiox_brr):清除埠x的某位值
(5)乙個32位的鎖定暫存器(gpiox_lckr): (gpiox_lckr)(x=a...g): gpiox configuration lock register, 用於暫存器鎖定埠位的配置。
3. 在韌體庫函式檔案中,用結構體gpio_typedef定義gpiox埠:
typedef structgpio_typedef; //用結構體gpio_typedef定義gpiox埠,(即定義gpiox埠的7個設定暫存器)
4. 程式設計時,gpiox埠的具體配置是從gpioa/gpiob/gpioc/gpiod/gpioe暫存器開始。
首先,在韌體庫中用結構體gpio_typedef定義gpiox埠,(即定義gpiox埠的7個設定暫存器):
5. gpio_init初始化埠定義
功能:根據gpio_inittypedef中指定的引數,初始化外設gpiox埠
函式名gpio_init
函式原型
void gpio_init(gpio_typedef* gpiox, gpio_inittypedef* gpio_initstruct)
功能根據gpio_initstruct中指定的引數初始化外設gpiox暫存器
輸入引數1
gpiox: x可以是a,b,c,d,e,來選擇gpio外設
輸入引數2
gpio_initstruct: 指向結構體gpio_inittypedef的指標,包含外設gpio的配置資訊
輸出引數
無返回值
無先決條件
無被呼叫函式
無例如,gpio_inittypedef gpio_initstructure; //定義結構體變數gpio_initstructure用於初始化gpiox埠引數;gpio_init(gpiox, &gpio_initstructure); //初始化gpiox埠。
6. nrz碼
nrz碼是單極性不歸零碼,是最基本的數字基帶編碼。
編碼規則:用高電平表示基帶中的「1」, 低電平表示基帶中的「0」;
7. stm32串列埠復用功能使用
(1)配置時鐘,由於使用串列埠是在復用io口,需要開啟串列埠時鐘和相應的io口時鐘。
(2)配置io口,串列埠相應的io口需要配置,輸出口配置成復用推挽輸出,輸出口速度根據需要配置,輸入口配 置為浮空輸入。
(3)配置串列埠,主要是包括波特率、資料長度、停止位、奇偶校驗、硬體流控制、接收傳送模式。
(4)開啟串列埠
串列埠配置程式配置pa9, pa10為usart1的傳送和接收口
void config_usart1(void)
8. gpio口作為一般輸入輸出口使用時
使用韌體庫點亮led燈
int main(void)}
門控時鐘和時鐘使能
在fpga設計中,我們經常會使用分頻的方法來得到乙個我們需要的時鐘頻率,而在很多開發板廠家配套的教程裡,他們常常會使用計數器分頻得到的高低電平時鐘來當做驅動時鐘,這種方法簡單易懂,但是,在工程設計中,這種方法是不被允許的。門控時鐘就是使用計數器和邏輯門翻轉來產生的時鐘,下面是典型的門控時鐘 生成i2...
門控時鐘 使能時鐘的實現
在編寫fpga的時候我們常常會遇到這樣的問題 全域性時鐘的頻率太高了,某些模組需要頻率更低的時鐘來驅動,總是呼叫pll太浪費資源了。現在說說這種時候該怎麼辦 1.門控時鐘分頻 門控時鐘就是通過計數的方式來實現對全域性時鐘的分頻,滿足你對低頻時鐘的需求。基於計數器的分頻器不說了太基礎了,現在說說非整數...
mdk學習 為何外設需要時鐘使能
rcc apb2periphclockcmd 函式是設定外設時鐘。arm與c51微控制器不同的是,不用外設的時候,如io口 adc 定時器等等,都是禁止時鐘的,以達到節能的目的,只有要用到的外設,才開啟它的時鐘。因此在需要用到gpiob和gpiod的時候,我們需要先開啟它的時鐘,具體用到的是函式庫裡...