MCU看门狗

1、看门狗概念

看门狗--定时器(不属于基本定时器、通用定时器、高级定时器)

定义:

看门狗,又叫wachdog timer,是一个定时器电路,一般有一个输入,叫喂狗(kicking the dog/service the dog),一个输出到MCU的RST端,MCU正常工作的时候,每隔一段时间就输出一个信号区喂狗端,给WDT清零,如果超过规定时间不喂狗(一般在程序跑飞时),WDT定时超过,就会给一个复位信号到MCU,使MCU复位。防止MCU死机看门狗的作用就是防止程序发生死循环,或者说程序跑飞。

在单片机构成的微型计算机系统中,由于单片机的工作常常会受到外界电磁场的干扰造成各种寄存器和内部的数据混乱,会导致程序指针错误,不在程序区,取出错误的程序指令等,都有可能会陷入死循环,不在程序区,取出错误的程序指令等,都有可能会陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续正常工作,导致整个系统陷入停滞状态,发生不可预料的后果。

看门狗,又叫由叫watchdog,本质上来说就是一个定时器电路,一般有一个输入和输出,其中输入叫喂狗,输出一般连接到另外一个部分的复位端,一般连接到单片机。看门狗的功能是定期查看芯片内部情况,一旦发生错误就想芯片发出重启信号。看门狗命令在程序中断中拥有最高的优先级

输入端:喂狗(定时器刷新计数器)--一个函数

输出端:连接复位电路,一旦计数器从最大值计数到0,还没有喂狗,就直接复位

重装载:1000

看门狗就会从1000从上而下计数,0--1000中间没有喂狗,那么计数器数到0,那么就会复位,如果0--1000范围内喂狗,那么就代表程序正常执行,不会复位。

假如说我们的一个程序执行1500ms,那么我们就可以将我们看门狗运行周期设置为大于1500ms时间,假如设置为2000ms,那么我们就可以检测程序的运行时间,如果2000ms还没有喂狗,代表程序卡死了,就需要复位

2、单片机中的看门狗

 

 看门狗:独立看门狗  窗口看门狗

独立看门狗的时钟:40KHZ(LSI)

窗口看门狗的时钟:APB1分频得到

功能描述:

在键寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET)。无论何时,只要在键寄存器IWDG_KR中写入0xAAAA, IWDG_RLR中的值就会被重新加载到计数器,从而避免产生看门狗复位 。

0xcccc--开启看门狗

0xaaaa--喂狗

IWDG_RESET--复位信号

IWDG_KR---键寄存器

IWDG_RLR--重装载寄存器

看门狗设置部分

设置一个1s的周期进行喂狗???

独立看门狗时钟40Khz

我们只需要设置预分频寄存器和重装在寄存器即可

 预分频寄存器(IWDG_PR)

 

 预分屏:64分屏

重装载:625

周期 = (64/40khz)*625ms  周期:1000ms

 窗口看门狗

窗口看门狗通常被用来检测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常运行序列产出的软件故障。除非递减计数器的值在T6变成0前被刷新,看门狗电路在达到预置的时间周期时,会产生一个MCU复位。在递减计数器打到窗口寄存器数值之前,如果7位递减计数器数值(在控制寄存器中)被刷新,那么也产生一个MCU复位。这表明递减计数器需要在一个有限的时间窗口中被刷新。

特性:

 可编程的自由运行递减计数器

条件复位

---当递减计算器的值小于0x40,(若看门狗被启动)则产生复位。

---当递减计算器在窗口外被重新装载,(若看门狗被启动)则产生复位。见0.

如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒(EWI),它可以被用于重装载计算器以避免WWDG复位

下限值:0x40--计算器递减到0x40还没有喂狗,那么就会产生复位

上限值:自定义的,不要超过最大的计数周期,计算器值大于上限值之前喂狗也会去复位。

 看门狗配置:

  • 39
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ESP8266 NodeMCU可以通过使用内置的看门狗定时器来实现看门狗功能。看门狗是一种硬件或软件机制,用于监视系统的运行状态并在系统停止响应时强制重新启动系统。在ESP8266 NodeMCU中,看门狗可以用于监视程序的运行状态并在程序发生故障时重启设备。 以下是使用ESP8266 NodeMCU看门狗的基本步骤: 1. 启用看门狗定时器 在ESP8266 NodeMCU中,看门狗定时器被称为硬件看门狗(HWDT)。要启用HWDT,需要调用`ESP.wdtEnable()`函数。 2. 配置看门狗定时器 可以通过调用`ESP.wdtDisable()`函数来禁用HWDT并重置其计数器。可以设置看门狗定时器的超时时间,以便在超过该时间时自动重启设备。可以通过调用`ESP.wdtSetTimeout()`函数并传递超时时间(以毫秒为单位)来设置超时时间。例如,如果要将超时时间设置为5秒,则可以使用以下代码: ``` ESP.wdtSetTimeout(5000); ``` 3. 喂狗 在程序运行期间,需要定期向看门狗定时器“喂狗”,防止看门狗定时器超时并重启设备。可以通过调用`ESP.wdtFeed()`函数来喂狗。可以将此函数调用放置在程序的主循环中,以确保每次循环都会喂狗。 4. 禁用看门狗定时器 在程序退出之前,需要禁用看门狗定时器,以防止设备在程序退出之后重启。可以通过调用`ESP.wdtDisable()`函数来禁用HWDT并重置其计数器。 例如,以下是一个使用ESP8266 NodeMCU看门狗的示例代码: ``` void setup() { // 启用看门狗定时器 ESP.wdtEnable(WDTO_8S); } void loop() { // 向看门狗定时器喂狗 ESP.wdtFeed(); // 程序的其他代码 } void exitFunction() { // 禁用看门狗定时器 ESP.wdtDisable(); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值