本文章立足于浅层应用的方法而非深入原理的理解,这两者满足的是不同的需求,但是之后可能会补足原理的学习。
GPIO (General Purpose Input/Output)是通用输入输出端口的简称,GPIO 端口(元器件上的一个引脚)可以输出高低电平或者读取外部输入电平,以此实现与外部的通讯。
(实际上,操作 GPIO 端口的函数修改了 GPIO 的硬件寄存器数据,硬件的状态根据硬件寄存器数据的改变而改变)
通常来说,GPIO 有三种状态:高电平、低电平、高阻态。在 STM32 中,首先需要对特定的引脚设置为输入/输出模式,还可以在 GPIO Pull-up/Pull-down 中预先设置特定的状态。(Pull-up: 将不确定的信号通过一个电阻设置成高电平,Pull-down: 将不确定的信号通过一个电阻设置成低电平)
函数操作(HAL库):
/*
#define GPIO_PIN_RESET 0 // 低电平
#define GPIO_PIN_SET 1 // 高电平
*/
typedef enum
{
GPIO_PIN_RESET = 0, // 低电平
GPIO_PIN_SET = 1 // 高电平
}GPIO_PinState; // 使用枚举类
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx,
uint16_t GPIO_Pin, GPIO_PinState PinState); // 写入电平
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx,
uint16_t GPIO_Pin) // 读取电平
void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx,
uint16_t GPIO_Pin); // 对电平取反
/*
GPIOx 为 GPIOA/B/C/G 等之一,是 STM32 中对于 GPIO 端口的分组
GPIO_Pin 为 GPIO 的端口,具体见下文
GPIO_PinState 为枚举类的高电平/低电平之一
*/
一些细节:
一个 GPIO_Pin 对应着一个位(0或1),将其他部分补全以后就得到一个uint16_t(无符号 16 位,占用两字节,范围 0-65535 ,相当于short),在定义中