代码如下,用的STM32CUBEMX做按键控制灯闪烁实验,功能可以实现,有一个地方发出来和大家分享一下。一个是把while判断放在led翻转的前面,一个是把while放在led翻转的后面,结果就是一个现象是我按下的那一刻,led翻转,松开手没反应;一个现象是按下的那一刻没反应,松手才翻转。
if(KEY2 == GPIO_PIN_RESET)
{
HAL_Delay(5);
if(KEY2 == GPIO_PIN_RESET)
{
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);
while(KEY2 == GPIO_PIN_RESET);
}
}
if(KEY3 == RESET)
{
HAL_Delay(5);
if(KEY3 == RESET)
{
while(KEY3 == RESET);
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);
}
}
有两点要注意
1.while(KEY3 == RESET);后面的分号不能去掉。加上分号就说明是阻塞,在while里面空跑。如果去掉分号的话,就变成了在while里面执行翻转了,可能出现的现象就是led非常快的闪烁,快到眼睛都跟不上的那种
2.之所以会出现一个是按下去灯就改变状态,一个是松开才改变状态。原因在于while的位置,while的作用即为“阻塞”,正是因为这个原因才造成了两个不一样的现象。
PS:吐槽下21ic的插入代码,竟然不能用Tab缩进,难受~
|