从零实现 独立看门狗IWDG STM32的待机与唤醒,在待机过程中如何喂狗

如果对你有帮助,请点赞收藏,谢谢~这是我更新的动力~
如果有任何问题欢迎在评论区交流~我们一同成长~

前言:

最近在学习原子的阿波罗,进行到待机实验,实验目的是摁下KEY_UP的时候就可以让MCU从待机模式唤醒了。而KEY1在按下的时候进入休眠。(验证过程比较繁琐,只看结论的小伙伴请找往下找STM32休眠时关闭看门狗的方案

STM32F429提供了三种低功耗模式,以达到不同层次的降低功耗的目的:

(1)睡眠模式(CM4内核停止工作,外设仍在运行)

(2)停止模式(所有时钟都停止)

(3)待机模式(所有时钟都停止,啥都不干了,就等唤醒了)

待机模式的目的主要是节省功耗,在此模式下最低只需要2.2uA电流(最低功耗模式)。期间MCU所有功能全部关闭。可以由WKUP引脚上升沿、RTC闹钟、RTC唤醒、RTC入侵事件、RTC时间戳、NRST引脚外部复位、IWDG复位,唤醒。从待机模式唤醒后的代码执行等同于复位后的执行。

目的:用自己的办法实现待机、唤醒实验。

设计:用KEY_1触发进入待机模式,用KEY_UP唤醒。

cubemx配置:

将KEY_UP配置为系统唤醒、KEY1为中断模式,上拉,下降沿触发。开启中断,配置优先级

                      

注意:IWDG的时钟不是systick而是LSI

所以,计算看门狗复位周期的时候要用  40K/分频算出频率 ,再被重装载值相除就是周期,单位S。例如:

40K/64 = 625hz    //1s计数625次

2500/625 = 4s      //4s需要计数2500次,也就是重装载值设为2500看门狗4s复位一次。

摁下KEY_UP的时候就可以让MCU从待机模式唤醒了。而KEY1在按下的时候进入休眠。


代码实现:

原子给出的进入休眠模式步骤:

(1)禁止所有RTC中断

(2)清零对应中断标志位

(3)清除PWR唤醒(WUF)标志

(4)重新使能RTC对应中断

(5)进入低功耗模式

原子代码如下:

//系统进入待机模式
void Sys_Enter_Standby(void)
{
    __HAL_RCC_AHB1_FORCE_RESET();       //复位所有IO口 
	
    while(WKUP_KD);                     //等待WK_UP按键松开(在有RTC中断时,必须等WK_UP松开再进入待机)
    __HAL_RCC_PWR_CLK_ENABLE();         //使能PWR时钟
    __HAL_RCC_BACKUPRESET_FORCE();      //复位备份区域
    HAL_PWR_Enabl
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值