1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > STM32在休眠模式(Stop/Standby)模式下的关闭看门狗问题的解决

STM32在休眠模式(Stop/Standby)模式下的关闭看门狗问题的解决

时间:2020-02-02 22:53:07

相关推荐

STM32在休眠模式(Stop/Standby)模式下的关闭看门狗问题的解决

长期以来一直都认为Stm32启用了IWDG看门狗以后,就不能再使用休眠进入低功耗模式。由于看门狗启动后就不能停止,给很多人带来了困扰。还有很多人放弃了使用看门狗,从而给产品带来一定的不确定性。

其实有一个简单的方法可以实现在有看门狗的情况下可靠休眠。我起名字为“两步法”。顾名思义:

第一步:在flash或任何可以保存的位置上,写入一个标识,比如1;然后执行单片机重启,比如NVIC_SystemReset()

第二步:重启后的main入口中,在启用看门狗之前,先检测上述标识,如果是1,先清掉这个1,改为0,保存,然后进入真正的休眠过程比如Sys_Standby(){。。。};如果不是1,那么显然,这个是唤醒的过程了。直接进入后面的程序就好。

//standby 为flash中某个地址//执行休眠前的标识设置和重启void Pre_Standby(void){standby=1;WriteParam2Flash();NVIC_SystemReset();}//执行真正的休眠void Sys_StandbyReal(void){RCC_APB2PeriphResetCmd(0x01fc, DISABLE);//关闭所有管脚RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//使能PWR外设时钟PWR_WakeUpPinCmd(ENABLE); //使能唤醒管脚功能PWR_EnterSTANDBYMode(); //进入待命(STANDBY)模式 }//入口void main(void){//各种初始化。。。ReadParamFlash();//读取flash部分if(standby==1){//真正进入休眠 否则就是真开机standby=0;WriteParam2Flash();//再次保存Sys_StandbyReal();}IWDG_Config();//设置看门狗 要放在标识检测后面//以下是主程序...while(1){...IWDG_FEED();}}//调用休眠时,执行Pre_Standby();

虽然要读写2次flash,但比起产品本身的寿命和程序的可靠性来还是划算多了,当然也可以保存在外部的eprom中,这样寿命就大大增加了。另外我想也可以保存在休眠后依然能保存的寄存器中,我还没去研究,知道的可以回复我。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。