[STM32F1]

STM32CUBEMX关于按键和LED的实验分享

[复制链接]
250|2
手机看帖
扫描二维码
随时随地手机跟帖
王小琪|  楼主 | 2020-10-22 14:36 | 显示全部楼层 |阅读模式
代码如下,用的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缩进,难受~






使用特权

评论回复
isageko| | 2020-10-22 17:16 | 显示全部楼层
谢谢分享 之前就试过没加分号出现的问题 以后还是要多注意一些

使用特权

评论回复
王小琪|  楼主 | 2020-10-22 17:24 | 显示全部楼层
isageko 发表于 2020-10-22 17:16
谢谢分享 之前就试过没加分号出现的问题 以后还是要多注意一些

这是一些小细节,稍不注意就会被坑

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

227

主题

578

帖子

6

粉丝