1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
长期以来一直都认为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中,这样寿命就大大增加了。另外我想也可以保存在休眠后依然能保存的寄存器中,我还没去研究,知道的可以回复我。 |
|
|
|
只有小组成员才能发言,加入小组>>
3319 浏览 9 评论
2997 浏览 16 评论
3495 浏览 1 评论
9065 浏览 16 评论
4088 浏览 18 评论
1185浏览 3评论
611浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
601浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2337浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1898浏览 2评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 22:06 , Processed in 1.771737 second(s), Total 47, Slave 38 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号