GD32F103C8T6看门狗

1|0GD32F10x看门狗

  • 两个看门狗设备(独立看门狗IWDG和窗口看门狗WWDG)可用来检测和解决由软件错误引起的故障;
    当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。

1|0一、独立看门狗IWDG

  • 特性:
    自由运行的递减计数器;
    时钟由独立的RC振荡器提供(可在停止和待机模式下工作);
    看门狗被激活后,则在计数器计数至0x000时产生复位。

1|0二、窗口看门狗

窗口看门狗(WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。

1|0三、比较

相同点:

目标都是为了防止MCU进入死循环
代码执行超时(或者外部触发)导致没法喂狗就会产生复位
喂狗的具体时间可以设定。

不同点:

1、计数所用的时钟源不同,独立看门狗由内部40KHz低速时钟驱动,窗口看门狗使用PCLK1的时钟;
2、窗口看门狗在使用之前需要先使能时钟,而独立看门狗不需要使能时钟操作;
3、独立看门狗超时直接复位,没有中断;窗口看门狗有中断,超时可以在中断做复位前的函数操作或重新喂狗;
4、独立看门狗一般用于避免程序跑飞或死循环;窗口看门狗用于避免程序不按预定逻辑执行;
5、计数方式不同,独立看门狗是12位递减的,而窗口看门狗的寄存器低8位有效,是6位递减的;
6、超时复位时间范围不同,独立看门狗计数器值(tr)<IWDG重装载值时,进行喂狗;窗口看门狗的计数器值(tr)在0x40和窗口值(wr)之间时进行喂狗。

1|0四、看门狗配置

独立看门狗初始化

/** *@brief: 初始化独立看门狗 *@param reloadValue:重装载值 * prescaler: 时钟分频值 *@retval NONE */ void Drv_FwdgInit(uint16_t reloadValue, uint8_t prescaler) { // 开启时钟源(IRC40K)以供看门狗使用 rcu_osci_on(RCU_IRC40K); while(SUCCESS != rcu_osci_stab_wait(RCU_IRC40K)); // 等待IRC40k稳定 fwdgt_write_enable(); fwdgt_config(reloadValue, prescaler); fwdgt_write_disable(); fwdgt_enable(); // 使能看门狗 }

喂狗

void Drv_FwdgReload(void) { fwdgt_write_enable(); fwdgt_counter_reload(); }

__EOF__

本文作者xiaohu
本文链接https://www.cnblogs.com/xiaohuzaixue/p/17834988.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   EternalH  阅读(273)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示