STM32 GPIO开发中标准库的使用心得与体验
STM32的GPIO是通用的输入输出端口,功能非常强大,STM32上的ADC、TIM定时器、SPI、I2C、USART等各类外设在使用时,需要同时配置与外部进行交互的IO口。
STM32标准库GPIO结构体介绍
STM32标准库为各个外设创建了一个结构体,通过各个宏定义去配置外设的寄存器,对应GPIO的初始化结构体如下:
GPIO_Pin端口引脚
STM32芯片有多个端口GPIOA、GPIOB、GPIOC等。
每个端口有对应的引脚,标准库对端口和引脚的宏定义如下:
GPIO_Speed端口输出速度
当GPIO口配置为输出功能时,才需要赋值,标准库对输出速度有三种模式可选。
GPIO_Mode端口模式简单介绍
GPIO_Mode时GPIO端口的输出模式,共有8种可选。
下面是GPIO的硬件框图,引脚输入部分有上下两个二极管防止外部过高过低的电平。
上部是输入驱动器,下部是输出驱动器。
上图是STM32参考手册中对GPIO口结构的介绍,I/O引脚连接2个保护二极管,防止外部过高或过低的电平,后面分别进入输出和输入模式:
输出模式
1.推免式输出(GPIO_Mode_Out_PP)
输出驱动器中的P-MOS、N-MOS管都参与工作,IO口对外输出电平可高可低。
2.开漏输出(GPIO_Mode_Out_OD)
输出驱动器中只有N-MOS管参与工作,IO口外部输出在低电平与高阻态之间切换,可以实现线与功能(当多个开漏模式的引脚连接到一起,只有当所有引脚都为高阻态时,才由上拉电阻提供高电平)。
输入模式
1.模拟输入(GPIO_Mode_AIN)
用于ADC采集,输入信号不经过肖特基触发器。
2.浮空输入 (GPIO_Mode_IN_FLOATING)
引脚电平完全由外部决定,VDD与VSS开关关闭,信号通过肖特基触发器进入
3.上拉输入(GPIO_Mode_IPU)
输入部分的VDD开关打开,VSS开关关闭,输入引脚默认电平由上拉电阻决定。
4.下拉输入 (GPIO_Mode_IPD)
输入部分的VSS开关打开,VDD开关关闭,输入引脚默认电平由下拉电阻决定。
复用功能
1.推免式复用功能(GPIO_Mode_AF_PP)
外部PN-MOS管工作状态与推免式相同,内部连线到复用端口。
2.开漏式复用功能(GPIO_Mode_AF_OD)
外部PN-MOS管工作状态与开漏式相同,内部连线到复用端口。
GPIO模式的选择方法
GPIO模式虽然很多,但STM32中文参考手册中8.1.11对外设的GPIO配置模式有较为详细的介绍,使用时可以参照8.1.11章节结合标准库的宏定义进行配置。
标准库GPIO配置流程
用标准库配置GPIO引脚,先创建GPIO的初始化结构体,然后开启时钟。
(这里有一个细节需要注意,STM32为了降低功耗,在配置GPIO寄存器前,一定要先打开对应的时钟,否则配置是无效的)
通过标准库文件中所定义的宏,来配置结构体参数,最后通过标准库提供的GPIO_Init函数来配置相应的寄存器,具体代码如下:
作者:OH籽君