STM32的IO口可以由軟件配置成8種模式:
1,輸入浮空
2,輸入上拉
3,輸入下拉
4,模擬輸入
5,開漏輸出
6,推挽輸出
7,推挽復用功能
8,開漏復用功能
每個IO口可以自由編程,單IO口寄存器必須要按32位字被訪問。
這里就是寄存器不能位操作咯
STM32的每個IO端口都有7個寄存器來控制。他們分別是:配置模式的2個32位的端口配置寄存器CRL和CRH;2個32位的數(shù)據(jù)寄存器IDR和ODR;1個32位的置位/復位寄存器BSRR;一個16位的復位寄存器BRR;1個32位的鎖存寄存器LCKR;這里我們僅介紹常用 的幾個寄存器,我們常用的IO端口寄存器只有4個:CRL、CRH、IDR、ODR。
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位輸出口。
IDR是一個端口輸入數(shù)據(jù)寄存器,只用了低16位。該寄存器為只讀寄存器,并且只能以16位的形式讀出。讀出的值為對應IO口的狀態(tài)。
ODR是一個端口輸出數(shù)據(jù)寄存器,也只用了低16位。該寄存器雖然為可讀寫,但是從該寄存器讀出來的數(shù)據(jù)都是0。只有寫是有效的。其作用就是控制端口的輸出。
在配置STM32外設的時候,任何時候都要先使能該外設的時鐘!APB2ENR是APB2總線上的外設時鐘使能寄存器