STM32待机唤醒操作
扫描二维码
随时随地手机看文章
1.关于待机模式与断电模式的区别:
下图参考手册P37电源控制章节:
stm32关于待机模式下,该模式是在Cortex-M3深睡眠模式时关闭电压调节器。整个1.8V供电区域被断电。PLL、HSI和HSE振荡器也被断电。SRAM和寄存器内容丢失。只有备份的寄存器和待机电路维持供电。也就是说,待机模式下,STM32的除了备份区以外,待机电路中的比如唤醒电路和看门狗仍然是工作的,而普通IO口由于PLL、HSI、HSE的断电均高阻态无法工作。比如我们设置了WKUP唤醒,那么即使待机模式下,PA0仍具有检测上升沿实现唤醒功能(注意,待机状态下这种唤醒并不是外部中断,中断控制器都停止工作了!)
而断电模式则是只有后备区域供电,这与待机模式还是有区别的!!stm32的待机模式就相当于我们的手机处于关机状态,因此这个待机和我们手机平时说开机时的“待机”还是有差别的。
2.我们可以通过待机通过WKUP唤醒实现类似手机按开机关机键的操作
如何进入待机模式:手册写的详细调用库函数PWR_EnterSTANDBYMode()即可,注意PWR_CR寄存器待机模式下也会清空,不属于后备区,因此上电后如果想使能WKUP唤醒需重新再写一次。
void Sys_Standby(void)
{
//注意操作PWR电源寄存器先使能PWR时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//使能PWR外设时钟
PWR_WakeUpPinCmd(ENABLE);//使能唤醒管脚功能
PWR_EnterSTANDBYMode();//进入待命(STANDBY)模式
}
3.关于原子唤醒实验主要就是要理解这个的外部中断与待机唤醒不是同一回事,外部中断PA0是在正常模式下才起作用的,而待机唤醒是待机模式下,此时中断已经停止工作了,而唤醒是另一种方式而已!
手册这么说的:当一个外部复位(NRST引脚)、IWDG复位、WKUP引脚上的上升沿(注意不是中断)或RTC闹钟事件发生时,微控制器从待机模式退出。从待机唤醒后,除了电源控制/状态寄存器(PWR_CSR),所有寄存器被复位。
4.关于原子程序的解释:
如3所说WAKE_UP其实只是在待机模式下只需检测一个上升沿即可,也就是说其实待机模式下只要按下WAKE_UP实际上就已经唤醒了,为何3秒后才亮是因为在执行初始化中的函数Check_WKUP()又等待了三秒,而正常模式下却是在中断中等待了3秒。比如讲初始化下面这句注释掉,你就会看到上电唤醒只要一个上升沿!(这样好处也就给我们感觉开关机时间是一样的)
也就是这个实验注意1、在待机状态下,按下按键,程序执行是从初始化开始的。2、在开机状态下,按下按键是从中断执行的(检测到上升沿)
扩展:手机关机定时启动这种就类似32的闹钟唤醒