任何一個單片機,最簡單的外設莫過于 IO 口的高低電平控制了。所以今天為大家講解通過寄存器操作控制高低電平,對寄存器操作有一個簡單認識。
STM32 的 IO 口可以由軟件配置成如下 8 種模式:
1、輸入浮空
2、輸入上拉
3、輸入下拉
4、模擬輸入
5、開漏輸出
6、推挽輸出
7、推挽式復用功能
8、開漏復用功能
每個 IO 口可以自由編程,但 IO 口寄存器必須要按 32 位字被訪問。每個 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 口位配置表
STM32 輸出模式配置表
接下來我們看看端口低配置寄存器 CRL 的描述。
端口低配置寄存器 CRL
CRH 的作用和 CRL 完全一樣,只是 CRL 控制的是低 8 位輸出口,而 CRH 控制的是高 8位輸出口。
端口高配置寄存器 CRH
IDR 是一個端口輸入數據寄存器io端口編址方式有哪幾種,只用了低 16 位。該寄存器為只讀寄存器,并且只能以16 位的形式讀出。要想知道某個 IO 口的狀態io端口編址方式有哪幾種,你只要讀這個寄存器,再看某個位的狀態就可以了。
端口輸入數據寄存器 IDR
ODR 是一個端口輸出數據寄存器,也只用了低 16 位。該寄存器為可讀寫,從該寄存器讀來的數據可以用于判斷當前 IO 口的輸出狀態。而向該寄存器寫數據,則可以控制某個 IO 口的輸出電平。
端口輸出數據寄存器 ODR
比如我們要設置 PORTB 的PB.5為推挽輸出的LED初始化配置。
void (void)
{
RCC->|=1CRL&=;//清掉PB.5原來的設置,同時也不影響其他位的設置
GPIOB->CRL|=;//PB.5 推挽輸出
GPIOB->ODR|=1