GPIO
GPIO:General Purpose Input & Output 是通用输入输出端口的简称,简单来说就是软件可控制的引脚, STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能
GPIO功能描述
STM32芯片最拥有GPIOA、GPIOB..GPIOG等7组端口,每组端口最多拥有Pin0、Pin1...Pin15共16个引脚。 STM32的每个I/O端口都可以自由编程,但I/O端口寄存器必须按32位字被访问。 STM32的每个I/O端口都由7个寄存器来控制 STM32的I/O端口可以由软件配置成8种模式:
- 推挽输出
- 模拟输入(AD转换的模拟信号)
- 开漏输出
- 浮空输入
- 推挽式复用功能
- 下拉输入
- 开漏式复用功能
- 上拉输入
上/下拉电阻
- 开启上拉时,引脚默认电压为高电平
- 开启下拉时,引脚默认电压为低电平
- 上拉和下拉不开启时,这种状态我们称为浮空模式
开启上拉电阻或下拉电阻的作用
STM32内部的上拉其实是一个弱上拉,也就是说通过此上拉电阻输出的电流很小,如果想要输出一个大电流。那么就需要外接上拉电阻了,其实就是增加导线的输出电流。
下拉电阻情况相反,让STM32的CPU引脚输出低电平,结果由于后续电路影响输出的低电平达不到GND。所以接个下拉电阻,其实就是为了降低导线的输出电流。
另外当上下拉电阻都不开启,此时是浮空模式,引脚的电压是不确定的,此模式下的管脚电压会时不时改变。
所以为了防止引脚悬空,产生积累电荷、静电荷,造成电路不稳定。一般情况下,我们都会给引脚设置成上拉或者下拉模式,使它有一个确定的默认电平状态。
以上拉电阻举例,在STM32刚上电的时候,芯片引脚电平是不确定的。特别引脚是接按键的时候,必须给他个确定的电平。下拉电阻的作用就是,强制让电平保持在低电平。
推挽输出
GPIO引脚线路经过两个保护二极管后,向上流向“输入模式”结构,向下流向“输出模式”结构。先看输出模式部分,线路经过一个由P-MOS和N-MOS管组成的单元电路。
所谓的推挽输出模式,是根据这两个MOS管的工作方式来命名的。在该结构中输入高电平时,经过反向后,上方的P-MOS导通,下方的N-MOS关闭,对外输出高电平;而在该结构中输入低电平时,经过反向后,N-MOS管导通,P-MOS关闭,对外输出低电平。当引脚高低电平切换时,两个管子轮流导通,P管负责灌电流,N管负责拉电流,使其负载能力和开关速度都比普通的方式有很大的提高。推挽输出的低电平为0伏,高电平为3.3伏。
2个GPIO输出的HAL库函数
GPIO电平输出HAL库函数
void HAL _GPIO_ WritePin(GPIO_ _TypeDef* GPIOx, uint16_ t GPIO_ Pin, GPIO_ _PinState PinState);
三个参数:
- 1- GPIOx: 目标引脚的端口号
- 2- GPIO_ Pin:目标引脚的引脚号
- 3- PinState:高电平---GPIO_PIN SET;低电平----GPIO_ PIN_ RESET
例:向PB8引脚输出高电平
HAL_ GPIO WritePin(GPIOB, GPIO_ PIN 8, GPIO_ PIN SET);
GPIO电平翻转HAL库函数
void HAL_ _GPIO_ _TogglePin(GPIO_ TypeDef* GPIOx, uint16_ _t GPIO_ _Pin);
例:将PA3引脚输出电平翻转。
HAL_ GPIO_ TogglePin(GPIOA, GPIO_ PIN 3);
GPIO的重要数据结构和HAL库函数
重要数据结构: HAL库函数:
GPIO初始化函数的源码结构
基于STM32CubeMX的跑马灯
利用STM32CubeMX对STM32芯片的LED控制引脚进行配置 并快速生产项目,在Keil5中进行代码编写,实现跑马灯
具体步骤见:STM32学习笔记1的后半部分
若将逻辑代码改为:
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);
HAL_Delay(500);
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
HAL_Delay(500);
即实现了跑马灯的效果:
标签:输出,HAL,引脚,低电平,STM32,GPIO From: https://blog.51cto.com/u_15623229/5785774