打印

关于STM32待机唤醒实验的bug

[复制链接]
315|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
白鹭hu|  楼主 | 2018-7-9 16:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
不知道大家是否遇到过这种情况,在待机唤醒实验的时候,在待机情况下,有时候按了3S按键,唤醒不了,但是有的时候可以。也就是存在干扰,使得唤醒不稳定。

通过分析代码,我找到了bug所在:当MCU处于待机状态时候,只要给WAKU一个上升沿,MCU立刻唤醒并且从main()函数开始执行,当执行到 if(Check_WKUP()==0)Sys_Standby();时候,是要判断按键是否达到了3S,如果没有就又进入了待机状态,如果达到了3S就跳过这条语句,正常执行。 那么bug就在这里,因为在执行这个函数Check_WKUP(),程序正常运行,是会响应中断的,所以在判断你按下按键时间内,如果你手抖动下,可能在WAKU又产生一个上升沿,导致进入中断服务函数,这样你一直按着到3S,就会执行Sys_Enter_Standby(),导致再次进入待机,也就是没唤醒到。

处理办法是:在Check_WKUP()里面加条EXTI->IMR&=~(1<<0); 把中断屏蔽,然后跳出去时候恢复中断。
附加代码:

u8 Check_WKUP(void)
{
u8 t=0;
u8 tx=0;
LED0=0;
EXTI->IMR&=~(1<<0);                        //disable interrupt
while(1)
{
if(WKUP_KD)
{
t++;
tx=0;
}else
{
tx++;
if(tx>10)
{
LED0=1;
EXTI->IMR|=1<<0;        //enable interrupt
return 0;
}
}
delay_ms(30);
if(t>=100)
{
LED0=0;   
EXTI->IMR|=1<<0;        //enable interrupt
return 1;
}
}
}

使用特权

评论回复

相关帖子

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

本版积分规则

396

主题

396

帖子

0

粉丝