写在前面:最近产品开始在功耗攻关环节,中间出现了很多问题搞得焦头烂额的,通过查阅手册和向大牛们请教才刚刚好理顺了思路,大家有问题可随时交流,QQ:993650814
正文:
1、问题一:由于前期方便调试,让产品一直处在持续广播模式,一直未发现问题。设置广播超时之后,理论上如果没有外设连接的话,超时时间timeout之后会切换进入低功耗模式,但是一进去就会重启,原先代码配置如下:
结果产品进入睡眠之后,就会很快重启,百思不得其解,解决问题的本质还是得回归技术手册,看下面:
进入睡眠之前一定要将使用EasyDMA的外设停掉,一开始以为只要各外设的时钟关掉就不会存在进睡眠失败的问题,但是手册这么说了就得这么干,把外设停掉之后,问题解决了,产品成功进睡眠。
2、问题二:进睡眠之后,定时器就不跑了,这样每次从睡眠中唤醒的时候(我是用外部中断唤醒的)时间不就不准了,我使用RTC定时器为时间基准来实现日历功能的,当然肯定还有别的更好的方式。
为了解决这个问题,也只能放弃进入睡眠模式,而是进入另一种低功耗模式,在此模式下,必须使用外部32.768,这样定时器才可以正常跑,调用sd_app_evt_wait();这个接口可让产品进入这个模式。晶振必须选择32.768:配置如下:
3、 system off mode 和sd_app_evt_wait()区别: 前者不光core停掉,peripheral也停掉了,等同于关机。
而d_app_evt_wait();等同于WFE__,core停掉了,但是peripheral可以单独运行。
如果有帮助到你,是否考虑给我一点鼓励呢,我会写出更有质量的文章。多谢。