0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32单片机看门狗的配置方法

科技绿洲 来源:硬件攻城狮 作者:硬件攻城狮 2023-06-22 09:07 次阅读

SATM32单片机看门狗有独立看门狗和窗口看门狗之分,这两者的工作原理却完全不同,今天来看一下他们的具体区别和配置方法。

STM32独立看门狗

由专门的低速时钟(LSI)驱动,即便是主时钟发生故障它仍能够有效,所以此狗狗可以工作在与主时钟无关的要求下,或者待机模块下等,所以它叫独立看门狗,注意一旦开启此看门狗则只能由MCU复位后才清除,让它不再工作。

它的时钟是一个内部RC时钟,它会在30KHZ到60KHZ之间变化,并非是精确的40KHZ,而只是一般计算时取40KHZ。

独立看门狗需设置四个寄存器如下:

poYBAGSNfPWABHYuAAFvcIAqf_k616.png

其中,预分频寄存器(IWDG_PR),最低三位PR[2:0](Prescaler divider)有效,可设置有8种不同的计数器时钟预分频因子。

重装载寄存器(IWDG_RLR)低12位RL[11:0]: 看门狗计数器重装载值 (Watchdog counter reload value) 有效,用来设置计数器的重装载值。

注意要设置以上两个寄存器的值需满足两个条件,详见如下:

键寄存器(IWDG_KR),用来控制去除IWDG_PR和IWDG_RLR写保护功能以便正常写值,向此寄存器写入0x5555则暂时去除IWDG_PR和IWDG_RLR的写保护功能才可向两个寄存器中写值。

当向此寄存器写入0xAAAA则IWDG_RLR的值会重装载,防止MCU复位,向入0xCCCC是开启狗立看门狗动作。

状态寄存器(IWDG_SR)最低两位有效RVU: 看门狗计数器重装载值更新 (Watchdog counter reload value update) 标识位和PVU: 看门狗预分频值更新(Watchdog prescaler value update) 标识位,分别用来指示此时是否可向IWDG_RLR 和 IWDG_PR写值,此寄存器由硬件置1与清0,只有当为0时才可向上面两个寄存器写值。

它的初始化过程大致如下 :

//时间计算(大概):Tout=((4*2^prer)*rlr)/40(ms)voidIWDG_Init(u8prer,u16rlr){IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);IWDG_SetPrescaler(prer);IWDG_SetReload(rlr);IWDG_ReloadCounter();IWDG_Enable();}

喂狗可通过调用如下函数进行:

IWDG_ReloadCounter();//reload

另外要注意不要使用硬件时钟中断喂狗,因为硬件时钟中断一般都有较高优先级且独立于主控程序,这样有时会出现主控程序虽然跑飞了,但仍能够正常喂狗的现象。

独立看门狗能够在一定程度上监控着程序正常运行,然而我认为更加强大,应用更灵活及更能保证程序稳定运行的还属窗口看门狗,虽然它开始时不太好理解。

▍STM32窗口看门狗

共三个寄存器,如下图:

poYBAGSNfVKATbxvAAEyX5P8zgI969.png

看似简单,但设置及应用起来有不少玄机。

控制寄存器(WWDG_CR)中的值必须在0xFF与0xC0之间, 因为它的第0至第6位为递减计数器CNT,在它的第6位变为0时将产生复位,所以在初始化时需要为1,第7位WDGA是用来设置启动或禁止窗口看门狗的,当为1进才会启动窗口看门狗,所以第6和第7位都需为1,即WWDG_CR 的值需要大于等于0xC0 。

配置寄存器(WWDG_CFR) 第0至第6位 是设置窗口边界值用的,只有当递减计数器CNT的值小于边界值时才可以喂狗,过早不行,狗还不饿,撑死了。

并且7位递减计数器CNT减少到0x3F时即T6位变为0,此时MCU也会复位,过晚了,狗饿死了。

所以必须在指定的时间范围喂狗,过早或过晚都将产生复位,而这样设计可以减少软件跑飞了却仍能够歪打正着地喂狗的发生概率。

状态寄存器(WWDG_CFR) 只用到了第0位,EWIF(Early wakeup interrupt flag )是提前唤醒中断标识,当递减计数器CNT的值到达0X40(若再减少一次则T6位变为0,产生复位)时此位由硬件置1,且需用软件清0,注意无论中断是否使能此位都会被硬件置1。

而提前唤醒中断使能设置是在配置寄存器(WWDG_CFR)第9位EWI(Early wakeup interrupt),此位需由软件置1,则会在当递减计数器CNT的值到达0X40时产生中断,并且与EWIF不同,此位是由硬件清0。

另外控制寄存器(WWDG_CR)中第7位WDGA(Activation bit)激活位,需用软件来置1,以启动窗口看门狗,并且一旦启动后,只能在复位或重启后由硬件来清0。

配置寄存器(WWDG_CFR)的第8位和第7位WDGTB[1:0]用来设置时基(Timer base)预分频数。

以上描述可参考下图以更清晰的理解:

pYYBAGSNfVyAQw3JAADnH3s5Z3Q100.png

窗口看门狗应用时还要注意算准最小与最大喂狗时间,以便正确地喂狗,如下:

poYBAGSNfWSABIgCAAGP_ZTRdZE007.png

在PCLK1频率为36MHz 时,则

上窗口时间:T_min = 4096 * (2^WDGTB)*(WWDG_CR[6:0] - WWDG_CFR[6:0])/36 (us)下窗口时间:T_max = 4096 * (2^WDGTB)*(WWDG_CR[6:0] - 0x40)/36 (us) 。

喂狗动作需在这段时间之间进行,而喂狗动作为向控制寄存器(WWDG_CR)中写值。

窗口看门狗中断函数void WWDG_IRQHandler(void);是用来做什么的呢。

窗口看门狗中断函数是在递减计数器减少到0x40是被调用,因为它本身计数就比较慢,所以离数到0x3F复位还有一段时间,我认为这样设计是为MCU复位之前留下一点时间,能够使工程设计人员根据需要在中断函数保存一些重要的数据,这样在复位后MCU可知道系统因异常复位的某此状态,以使系统有更高稳定性。

并且我觉得在窗口看门狗中断函数中喂狗没有什么意义,程序本来已经不按正常运行了,还在中断函数中喂狗防止复位只会错上加错,不好好利用它干点正事, 更是浪费资源。

这点上我个人认为不要被点原子示例代码误导哦,但其还是有部分借鉴意义的,以下为初始化相关代码:

//窗口看门狗中断服务设置程序voidWWDG_NVIC_Init(){NVIC_InitTypeDefNVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitStructure.NVIC_IRQChannel=WWDG_IRQn;//WWDG中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占2子优先级3组2NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;//抢占2,子优先级3,组2NVIC_Init(&NVIC_InitStructure);//NVIC初始化}
//保存WWDG计数器的设置值,默认为最大.u8WWDG_CNT=0x7f;
//初始化窗口看门狗//tr:T[6:0],计数器值//wr:W[6:0],窗口值//fprer:分频系数(WDGTB),仅最低2位有效//Fwwdg=PCLK1/(4096*2^fprer).voidWWDG_Init(u8tr,u8wr,u32fprer){RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);//WWDG时钟使能WWDG_CNT=tr&WWDG_CNT;//初始化WWDG_CNT.WWDG_SetPrescaler(fprer);//设置IWDG预分频值WWDG_SetWindowValue(wr);//设置窗口值WWDG_Enable(WWDG_CNT);//使能看门狗,设置counter WWDG_ClearFlag();//清除提前唤醒中断标志位(注:若没有此句则会在初始化后先进入中断一次)WWDG_NVIC_Init();//初始化窗口看门狗NVICWWDG_EnableIT();//开启窗口看门狗中断}

以上代码朋友们也可以跳到库函数代码中自己研究下,另外要说明下的是WWDG_EnableIT(); 函数相关代码

#defineCFR_EWI_BB(PERIPH_BB_BASE+(CFR_OFFSET*32)+(EWI_BitNumber*4))

责任编辑:彭菁

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620841
  • 看门狗
    +关注

    关注

    10

    文章

    541

    浏览量

    70256
  • STM32
    +关注

    关注

    2239

    文章

    10671

    浏览量

    348746
  • 时钟
    +关注

    关注

    10

    文章

    1479

    浏览量

    130306
收藏 人收藏

    评论

    相关推荐

    STM32单片机两种看门狗的区别和配置方法

    SATM32单片机看门狗有独立看门狗和窗口看门狗之分,这两者的工作原理却完全不同,今天来看一下他们的具体区别和配置
    的头像 发表于 10-10 11:27 7190次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>单片机</b>两种<b class='flag-5'>看门狗</b>的区别和<b class='flag-5'>配置</b><b class='flag-5'>方法</b>

    52单片机看门狗

    AT89C52芯片里面有自带的看门狗功能,那在设计单片机系统时,可以不用设计看门狗电路吗?
    发表于 04-27 08:41

    单片机STM32F107独立看门狗单片机不断复位

    目前有一问题,一直受困,请大家帮帮忙!使用单片机STM32F107,目前使用功能独立看门狗,串口,问题如下1. 有独立看门狗时,正常运行下,串口可以发送数据,但是
    发表于 03-18 08:03

    stm32看门狗的定义是什么

    stm32看门狗一、定义由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态
    发表于 07-30 06:08

    独立看门狗概述

    记录一下,方便以后翻阅~主要内容:1)独立看门狗概述;2)常用寄存器和库函数配置;3)独立看门狗实验代码解读。官方资料:《STM32中文参考手册V10》第17章——独立
    发表于 07-30 08:25

    STM32的内置看门狗WWDG-窗口看门狗CubeMX操作步骤

    WWDG中断)5) 编写中断服务函数6) 重写窗口看门狗唤醒中断处理回调函数 HAL_WWDG_WakeupCallback结果看门狗在由单片机构成的微型计算机系统中单片机的工作常常
    发表于 07-30 07:33

    看门狗是什么 看门狗的功能

    STM32的独立看门狗概述看门狗是什么看门狗的功能独立看门狗所需的环境独立看门狗工作原理
    发表于 07-30 08:07

    stm32——独立看门狗 精选资料分享

    出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗”(watchdog) 。STM32内置两个
    发表于 08-02 08:00

    STM32看门狗配置 精选资料分享

    STM32看门狗配置 (2011-09-14 10:03:01)转载▼标签: stm32 看门狗 配置
    发表于 08-02 10:42

    看门狗解决的问题是什么

    单片机运行状态进行实时监测的考虑,便产生了一种专门的用于检测单片机程序运行状态的模块或者芯片,俗称“看门狗(watchdog)”。看门狗解决的问题是什么在启动正常运行的时候,系统不能
    发表于 08-02 07:10

    如何为STM32单片机配备独立看门狗

    如何为STM32单片机配备独立看门狗?如何为STM8单片机配备独立看门狗
    发表于 09-18 06:50

    STM8及STM32的独立看门狗使用案例

    如何去使用STM32单片机的独立看门狗?如何去使用STM8单片机的独立看门狗
    发表于 09-23 06:51

    看门狗(watchdog)的作用?STM32包含哪几个看门狗

    1. 看门狗(watchdog)的作用:实时检测单片机的程序运行状态,防止程序跑飞造成无法预料的结果。2. STM32包含哪几个看门狗(独立看门狗
    发表于 01-10 06:54

    STM32L4单片机配置STOP模式下停止看门狗计数

    STM32L4系列的单片机,在stop模式或是standby模式下可以停止看门狗计数器,唤醒后,看门狗继续计数。这样,在单片机休眠期间,就可
    发表于 11-19 10:51 45次下载
    <b class='flag-5'>STM32</b>L4<b class='flag-5'>单片机</b><b class='flag-5'>配置</b>STOP模式下停止<b class='flag-5'>看门狗</b>计数

    STM32:独立看门狗、窗口看门狗配置

    STM32单片机看门狗有独立看门狗和窗口看门狗之分,这两者的工作原理却完全不同。
    发表于 02-08 16:15 18次下载
    <b class='flag-5'>STM32</b>:独立<b class='flag-5'>看门狗</b>、窗口<b class='flag-5'>看门狗</b>的<b class='flag-5'>配置</b>