GPIO输出HAL库函数,设定或改变当前引脚电平值:
- 电平输出HAL函数,返回空
HAL_GPIO_WritePin(GPIO_TypeDef* GPIOX,Uint16_t GPIO_Pin,GPIO_PinState pinstate);
其中:
GPIOX代表目标引脚的端口号,例如GPIOB。
GPIO_Pin代表目标引脚的引脚号,例如GPIO_Pin_5。
pinstate代表当前引脚的高低电平,高电平(GPIO_PIN_SET)、低电平(GPIO_PIN_RESET)。
- 电平翻转HAL函数,返回空
HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOX,Uint16_t GPIO_Pin);
GPIO输入HAL库函数,检测当前引脚电平:返回值是0或1,即高电平(GPIO_PIN_SET)、低电平(GPIO_PIN_RESET)。
HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOX,Uint16_t GPIO_Pin);
可用if(xxx==1){}语句来执行按键按下后跳转的功能。
按键扫描的原理:
按键的两个引脚的一端通过下拉电阻拉倒低电平,另一端接着电源。当按下开关时,输入引脚为高电平。通过反复读取按键状态是否为高电平判断按键是否被触发。(霸道zet6)
按键消抖:
因霸道ZETX系列,带上拉电容物理消抖,所以不用软件消抖。
按键检测到高电平不一定是按键被按下,可能是干扰信号。通过先检测到按键按下的信号,然后隔一定时延再次检测,若还是按键被按下状态则认为是按键被按下,否则认为是干扰信号。
宏定义:
使用自定义关键词(满足驼峰命名法)替代具体函数使得主函数更加简洁,宏定义可在.h文件中也可在.c文件中。例如:使用KeyState代替端口状态监测。
语法:
#define 驼峰变量名 功能函数
#define KeyState1 HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)
#define KeyState2 HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13)