今天在编写公司的MCU的低功耗代码,发现MCU在进入睡眠之后立刻就被唤醒,被这个问题纠结了很久。在反复查看数据手册和代码之后才发现问题。
可以看到在休眠模式和深度休眠模式中,唤醒MCU的方法可以是中断,事件,RTC等方法。
最初的程序已经把外设的中断全部关闭,只保留一个按键的中断用作唤醒,但是MCU进入休眠模式之后就立刻被唤醒。后来花了些时间查找问题,终于发现了问题所在。原来我忽略systick时钟的中断。
众所周知,在cortex-M系列的MCU中,都会有一个systick的内置时钟,该时钟在裸机中可以提供一个精确的延时,在RTOS中可以提供一个系统的心跳。问题点就出现在systick上,systick按照设定的周期循环计数,当计数溢出的时候就会进入中断函数。所以MCU进入睡眠模式就立刻被唤醒的原因就是systick中断唤醒了MCU。
解决方法就是在进入睡眠模式前先关闭systick的中断,当MCU退出睡眠模式后再打开systick的中断。
STM32不能进入睡眠模式
最新推荐文章于 2023-10-18 18:21:09 发布