我想要用HAL库实现两个按键同时按下时,输出端的GPIO口置低电平。
使用的中断回调,但功能实现只能在一个按键按下时实现,两个不行。
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if (GPIO_PIN_6==GPIO_PIN_RESET && GPIO_PIN_7==GPIO_PIN_RESET) //主要想知道怎么实现这条语句,
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1,GPIO_PIN_RESET) ;
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET) ;
}
结果是当我同时按下两个IO口对应的按键时,无现象发生。
可以通过使用标志位(flags)来实现。 当一个按钮按下时,设置一个标志位;当另一个按钮按下时,检测是否前一个按钮的标志位被设置,如果已经被设置,那么将输出口置低电平;否则,不做任何改变。
进入低功耗模式时,所有引脚信号必须连接到VDD或接地。
如果GPIO连接到外部接收器(外部元件输入),则必须使用PP或PU/PD强制GPIO信号值。
当GPIO连接到驱动器(外部元件输出或总线)时,驱动器必须提供有效电平(VDD 或接地)。如果未定义驱动器电平,则必须使用PU/PD强制GPIO上的信号。出于实际原因,当GPIO是运行模式下的输入(模拟或数字)时,在低功耗模式下使用输入
PU/PD可能更容易;当GPIO是运行模式下的输出时,则使用输出PP。这可以避免在进入或退出停止模式时管理更改。
将不常用的GPIO配置为高电平,例程如下所示(LL库):
LL_GPIO_SetOutputPin(GPIOA,LL_GPIO_PIN_ALL);
LL_GPIO_SetOutputPin(GPIOB,LL_GPIO_PIN_ALL);
拓展学习:嵌入式系统降低功耗的设计技术