5.1 STM32單片機GPIO概述
STM32中每個IO口都有很多個作用,比如這次我們使用的STM32F103ZET6的PA0口,既可以作為IO口使用,還可以作為待機喚醒(WAKEUP),模擬輸入(ADC功能)等。根據數據手冊中列出的每個I/O端口的特定硬件特征,GPIO端口的每個位可以由軟件分別配置成多種模式。
(1)輸入浮空
(2)輸入上拉
(3)輸入下拉
(4)模擬輸入
(5)開漏輸出
(6)推挽式輸出
(7)推挽式復用功能
(8)開漏復用功能
每個I/O端口位可以自由編程,然而I/O端口寄存器必須按32位字被訪問(不允許半字或字節訪問)。GPIOx_BSRR和GPIOx_BRR寄存器允許對任何GPIO寄存器的讀/更改的獨立訪問;這樣,在讀和更改訪問之間產生IRQ時不會產生異常錯誤。
STM32F103系列的基本IO口結構如下圖所示
從結構圖可以看出來,STM32的GPIO口可以配置好幾個選項,內部上拉下拉電阻的選擇,推挽輸出或者開漏輸出,對于復用功能,有專門的復用輸入支路和輸出支路。STM32F103的端口由10個寄存器控制,但是常用的并不多,時鐘控制寄存器APB2ENR,模式控制寄存器CRH和CRL,輸入寄存器IDR,輸出寄存器ODR。
5.2 相關寄存器
5.2.1 APB2 外設時鐘使能寄存器:RCC_APB2ENR
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
- | |||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
- | USART1EN | - | SPI1EN | TIM1EN | ADC2EN | ADC1EN | - | IOPEEN | IOPDEN | IOPCEN | IOPBEN | IOPAEN | - | AFIOEN |
Bit 14:串口1時鐘使能(寫1開啟,寫0關閉)
Bit 12:SPI1時鐘使能(寫1開啟,寫0關閉)
Bit 11:定時器1時鐘使能(寫1開啟,寫0關閉)
Bit 10:ADC2時鐘使能(寫1開啟,寫0關閉)
Bit 9:ADC1時鐘使能(寫1開啟,寫0關閉)
Bit 6:GPIOE時鐘使能(寫1開啟,寫0關閉)
Bit 5:GPIOD時鐘使能(寫1開啟,寫0關閉)
Bit 4:GPIOC時鐘使能(寫1開啟,寫0關閉)
Bit 3:GPIOB時鐘使能(寫1開啟,寫0關閉)
Bit 2:GPIOA時鐘使能(寫1開啟,寫0關閉)
Bit 0:輔助時鐘IO時鐘使能(寫1開啟,寫0關閉)
5.2.2 端口配置低寄存器:GPIOx_CRL(x=A..E)
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CNF7 | MODE7 | CNF6 | MODE6 | CNF5 | MODE5 | CNF4 | MODE4 | ||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
CNF3 | MODE3 | CNF2 | MODE2 | CNF1 | MODE1 | CNF0 | MODE0 |
端口配置表:
bit 31 |
CNFy[1:0]:端口y的配置位(y=0……7)輸入模式下:00:模擬輸入模式01:浮空輸入模式(復位后的狀態)10:上拉/下拉輸入模式11:保留輸出模式下:00:通用推挽輸出模式01:通用開漏輸出模式10:復用功能推挽輸出模式11:復用功能開漏輸出模式 |
---|---|
bit 29 |
MODEy[1:0]:端口y的模式位(y=0……7)00:輸入模式(復位后的狀態)01:輸出模式,最大速度10MHz10:輸出模式,最大速度2MHz11:輸出模式,最大速度50MHz |
5.2.3 端口配置高寄存器:GPIOx_CRH(x=A..E)
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CNF15 | MODE15 | CNF14 | MODE14 | CNF13 | MODE13 | CNF12 | MODE12 | ||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
CNF11 | MODE11 | CNF10 | MODE10 | CNF9 | MODE9 | CNF8 | MODE8 |
配置方式和端口配置低寄存器一致。
5.2.4 端口輸入數據寄存器:GPIOx_IDR(x=A..E)
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
- | |||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
D15 | D14 | D13 | D12 | D11 | D10 | D9 | D8 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
Bit 15~Bit 0:端口輸入數據(這些位屬于只讀并只能以字的形式讀出)
-
IO
+關注
關注
0文章
435瀏覽量
39080 -
adc
+關注
關注
98文章
6438瀏覽量
544112 -
STM32
+關注
關注
2266文章
10873瀏覽量
354838
發布評論請先 登錄
相關推薦
評論