【STM32HAL库开发】学习笔记(1)——GPIO
1.引脚通用功能与复用功能
通过直接控制单片机引脚输出高/低电平或者读取引脚高/低电平状态的方式叫做引脚的通用功能。除此之外的功能称为引脚的复用功能,这些复用功能可以给其他模块进行使用,如UART串口、TIM定时器等。
2.引脚复用重映射
在实际使用过程中,IO引脚可能会出现一些功能定义重合,即一个引脚可能既是TIM定时器的某个通道的引脚,也是串口的TX/RX引脚,但好在这些功能往往在单片机提供了一组或者多组备用引脚,那么只需要将冲突引脚重映射到其他IO引脚,那么IO定义冲突就可以解决了。
上图PA9要定义为定时器1通道2使用,那么USAERT1_TX就不能再使用这个引脚,那么就需要重映射到另一组备用引脚上,即PB6,作为一对功能引脚,那么相应的PB7就是USART1_RX
3.GPIO输出与输入
3.1 GPIO4种输出模式
GPIO有四种输出模式,通用推挽输出、通用开漏输出、复用推挽输出、复用开漏输出。
通用:一般设置,直接控制引脚的状态;
复用:通过一些模块或者功能(如串口)间接控制引脚的状态;
推挽输出:输出引脚的两个MOS管总有一个导通,引脚输出状态为低电平或者高电平;
开漏输出:输出引脚的漏极的那个P-MOS管一直处于断开状态,引脚输出状态为低电平或者高阻由N-MOS的通断控制;
3.2 IO最大输出速度
高低电平的转换不是瞬间完成的,从低电平到高电平需要一个上升时间、从高电平到低电平也需要一个下降时间,这两个时间限制了IO引脚的最大输出速度。在STM32中,有3种输出速度,分别是低速、中速和高速。速率越高功耗越大,甚至更高速可能对其他元器件产生电磁干扰,可以根据实际需要进行选择。
低速:2MHz 中速:10MHz 高速:50MHz
3.3GPIO4种输入模式
输入上拉:GPIO引脚接上拉电阻到VDD(正电源3.3V),使IO引脚默认处于高电平状态;
输入下拉:GPIO引脚接下拉电阻到VSS(电源地 0V),使IO引脚默认处于低电平状态;
输入浮空:GPIO引脚既不接上拉电阻到VDD(正电源3.3V),也不接上拉电阻到VDD(正电源3.3V),IO引脚处于浮空状态;
模拟模式:常用于ADC(模数转换)采集外部模拟信号。数字输入电路(如肖特基触发器)被关闭,避免将连续变化的模拟信号量化为 0/1,内部上拉/下拉电阻关闭,即使配置了上拉或下拉也不会生效,从而保证信号不被干扰,引脚处于高阻状态,仅将外部电压直接送入 ADC 模块。
上图为GPIO引脚的电路示意图
4种输入模式同样根据需要进行选择。此外在选择上拉输入时,要考虑电流大小,单片机上拉引脚输出电流有限,过大可能对单片机造成一些不好的影响。
3.4代码
HAL_GPIO_ReadPin()、HAL_GPIO_WritePin()函数是GPIO输入输出的函数。
HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0); // 读取PA0的引脚状态 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); // 设置PA0的状态为高电平