5.2.2 GPIO接口的内部结构
STM32F1系列MCU的GPIO接口的内部结构如图5.2所示,其由输入电路和输出电路组成。其中,输入电路由上拉电阻、下拉电阻、输入数据寄存器、模拟输入通道和复用功能输入通道构成;输出电路由位设置/清除寄存器、输出数据寄存器、输出控制电路、MOS推挽电路和复用功能输出通道构成。

图5.2 STM32F1系列MCU的GPIO接口的内部结构
每组GPIO接口由7组寄存器构成,其有两个32位功能配置寄存器(GPIOx_CRL和GPIOx_CRH)、两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR)、一个32位置位/复位寄存器(GPIOx_BSRR)、一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。
复位期间和刚复位后,复用功能未开启,I/O接口被配置成浮空输入模式。复位后,JTAG引脚被置于输入上拉或下拉模式。PA15的JTDI引脚置于上拉模式,PA14的JTCK引脚置于下拉模式,PA13的JTMS引脚置于上拉模式,PB4的JNTRST引脚置于上拉模式。
(1)输出配置。写到输出数据寄存器上的值输出到相应的I/O引脚。可以以推挽模式或开漏模式(当输出0时,只有N-MOS被打开)使用输出驱动器。(https://www.daowen.com)
(2)输入配置。输入数据寄存器在每个APB2时钟周期捕捉I/O引脚上的数据。所有GPIO引脚有一个内部弱上拉和弱下拉,当配置为输入时,它们可以被激活,也可以被断开。
(3)引脚单独置位或复位。通过对置位/复位寄存器中想要更改的位置1来实现引脚单独置位或复位,没被选择的位将不被更改。
(4)GPIO锁定机制。锁定机制允许冻结GPIO配置。当在一个接口位上执行了锁定(Lock)程序时,在下一次复位之前,将不能再更改接口位的配置。
(5)软件重新映射I/O复用功能。为了使不同器件封装的外设I/O功能的数量达到最优,可以把一些复用功能重新映射到其他一些引脚上,可以通过软件配置相应的寄存器来完成。这时,复用功能就不再映射到它们的原始引脚上了。
输出模式下,需要设置GPIO引脚的输出速度,该速度反映逻辑电平的响应速度,而非输出信号的速度。输出速度有3种:2 MHz、10 MHz和50 MHz。一般情况下,应根据具体应用项目的信号频率进行设置。