GPIO時鐘使能和串列埠時鐘使能的關係

2022-09-24 06:03:09 字數 2470 閱讀 3837

由於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 struct

gpio_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的時候,我們需要先開啟它的時鐘,具體用到的是函式庫裡...