这一篇主要对GPIO模块使用到的寄存器进行详细的分析介绍,适当了解GPIO寄存器的相关知识,可以对GPIO最底层的一些配置和工作原理有更好的认识,有助于加深对GPIO基本结构及工作模式的理解,同时对后续介绍到的GPIO在应用设计中有较好的帮助。
二、寄存器概述
图1 GPIO寄存器概述
三、寄存器详述
(1)端口模式寄存器GPIOx_MODER
图2 GPIOx_MODER寄存器定义
(2)端口输出类型寄存器GPIOx_OTYPER
(3)端口输出速度寄存器GPIOx_OSPEEDR
这个速度是指输出驱动电路的响应速度:(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路,通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。可理解为输出驱动电路的带宽:即一个驱动电路可以不失真地通过信号的最大频率。
比如:
②I2C接口,若使用400k波特率,若想把余量留大些,可以选用10M的GPIO引脚速度。
当为该端口下寄存器值的pin配置为11时,输出速度和电容C有关,这是指对于CMOS工艺的集成电路而言,输入阻抗是非常高的,主要功耗来自于绝缘栅等效的电容充放电效应。既然是电容的充放电,考虑信号源的内阻(基于标准CMOS电路的输出),根据RC充电常数和逻辑门限电平就能得出一个最小周期,其对应一个最高IO频率。
(4)端口上拉/下拉寄存器GPIOx_PUPDR
STM32芯片GPIO的上拉电阻和下拉电阻最小值,典型值和最大值如下:
(5)端口输入数据寄存器 GPIOx_IDR
(6)GPIO 端口输出数据寄存器 GPIOx_ODR
(7)GPIO 端口置位/复位寄存器GPIOx_BSRR
原因是GPIOx_BSRR去改变管脚状态的时候是原子操作置位/复位,没有被中断打断的风险。也就不需要关闭中断,关闭中断明显会延迟或丢失一事件的捕获,所以控制GPIO的状态最好可以用GPIOx_BSRR。
(8)GPIO 端口配置锁定寄存器GPIOx_LCKR
LCK0到LCK15为对应的pin0到pin15的锁定配置,当需要锁定对应的管脚pin时,在执行LCKK写序列操作时,将对应的LCK位写1。
(9)GPIO 复用功能低位寄存器GPIOx_AFRL
(10)GPIO 复用功能高位寄存器GPIOx_AFRH
四、总结
更多技术内容和书籍资料获取,入群技术交流敬请关注公众号“明解嵌入式”