一、STM32的IO状态
STM32 的每个 IO 端口都有 7 个寄存器来控制。他们分别是:配置模式的 2 个 32 位的端口
配置寄存器 CRL 和 CRH; 2 个 32 位的数据寄存器 IDR 和 ODR; 1 个 32 位的置位/复位寄存器
BSRR;一个 16 位的复位寄存器 BRR; 1 个 32 位的锁存寄存器 LCKR。
相比51IO口,只有0,1,状态,32的IO口有8中模式,分别是
IO状态模式 | 特点和使用场景 | |
1 | 输入浮空 | 即输入端口既不上拉(Pull up)也不下拉(Pull down),电平由外部输入决定;这种模式较少,一般模拟量输入、按键扫描输入使用该模式。 |
2 | 输入上拉 | 即输入端口配置一个电阻接到电源(Power)端,该电阻可以使用芯片内置,也可以是外部电阻。 |
3 | 输入下拉 | 即输入端口配置一个电阻到地(Ground),该电阻可以使用芯片内置,也可以是外部电阻。 |
4 | 模拟输入 | 模拟量信号输入,需要芯片内部支持AD转换功能才可以。 |
5 | 开漏输出 | 漏极开路输出(OD) 和集电极开路输出(OC)十分相似,都是无法输出高电平,只能输出低电平,需要高电平时需要外接上拉电阻。 |
6 | 推挽输出 | 推挽输出既可以输出高电平也可以输出低电平,无需外配置电阻。 |
7 | 推挽式复用功能 | 即推挽式输出和输入功能,使用时需要配置具体使用哪一种(雙方向端口,需要首先配置方向)。 |
8 | 开漏复用功能 | 即开漏输出和输入功能,使用时需要配置具体使用哪一种。 |
二、基本的HAL库函数封装
1.1 IO读取状态
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
读取IO口的状态
函数的原型
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
{
GPIO_PinState bitstatus;
/* Check the parameters */
assert_param(IS_GPIO_PIN(GPIO_Pin));
if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)GPIO_PIN_RES