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 |
- |
USART1 EN |
- |
SPI1 EN |
TIM1 EN |
ADC2 EN |
ADC1 EN |
- |
IOPE EN |
IOPD EN |
IOPC EN |
IOPB EN |
IOPA EN |
- |
AFIO EN |
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时钟