看门狗的主要作用就是防止程序跑飞,防止堆栈数据溢出,将单片机进行重启操作,不可屏蔽中断,优先级最高。
答题的过程是这样的,计数器有一个值,不停的做减法操作,当值为0时产生复位操作,因此在程序正常运行下需要不停的喂狗操作,但是这个时间需要把握,这个时间设置成为”喂狗时间“,在喂狗异常时发生中断复位操作,这个过程是自发进行的。
下面主要说明喂狗时间的操作。
需要控制的寄存器有:
键值寄存器iwdg_kr: 0~15位有效
预分频寄存器iwdg_pr:0~2位有效。具有写保护功能,要操作先取消写保护
重装载寄存器iwdg_rlr:0~11位有效。具有写保护功能,要操作先取消写保护。
状态寄存器iwdg_sr:0~1位有效
我的另一篇文章专门讲解了如何使用看门狗,这里不做赘述,主要说一下,这个喂狗时间如何设置,设置多长合适。
这里我们还是从函数计数开始说。
设置看门狗的分频系数的函数是:
//设置 iwdg 预分频值
void iwdg_setprescaler(uint8_t iwdg_prescaler);
设置看门狗的重装载值的函数是:
//设置 iwdg 重装载值
void iwdg_setreload(uint16_t reload);
设置好看门狗的分频系数 prer 和重装载值就可以知道看门狗的喂时间(也就是看门狗溢出时间) ,该时间的计算方式为(以时钟40khz计算):
tout=((4×2^prer) ×rlr) /40
tout 为看门狗溢出时间(单位为 ms);prer为看门狗时钟预分频(iwdg_pr 值),范围为 0~7;rlr 为看门狗的重装载值(iwdg_rlr 的值) ;我们设定 prer 值为 4, rlr 值为 625, 那么就可以得到 tout=64×625/40=1000ms, 这样,看门狗的溢出时间就是 1s,只要你在一秒钟之内,有一次写入 0xaaaa 到 iwdg_kr,就不会导致看门狗复位。
注意:看门狗的时钟频率并不是确定不变的40khz(而是在 15~47khz 之间的一个可变化的时钟),必须控制好大概复位时间。
综上所述只需要根据自己的需要进行设置相应的参数即可,这里提供相关的经验给大家参考,一般情况下我们都设置喂狗时间为1s当有特别的任务需要进行检测时需要根据特定的任务进行设置喂狗时间,假设有一个非常重要的进程,需要及时的进行检测,这里就要设置特定的时间,比如100ms一次喂狗等操作。
如何使用模拟发现调试数字逻辑
大算力芯片何时迎来终局战?
基于区块链技术运行的dApp应用跟App有什么区别
关于内外时钟切换及时钟超频测试
重大升级!Proxmox Virtual Environment 8.0 发布
关于看门狗时间选定问题
三坐标测量仪的操作流程及注意事项
ZUK Edge发布会在哪看?12.20联想ZUK Edge新品发布会
轻松高效自动化一体的Inline ECO模块
【喜讯】芯盾时代上榜“2023北京专精特新企业百强”
电动机如何一键实现启动和停止电路
TM-30是否具有明确的颜色质量指标
华为推出麦芒7,拥有大运存、长续航、智慧拍摄、GPU Turbo等产品优势
云原生的目的是构建和运行可弹性扩展的应用
多媒体融合通信系统在铁路系统编组站管理中的应用
荣誉丨国辰机器人荣获恰佩克品牌奖
怎样用FU-50制作单瑞甲类功放
WiFi联盟宣布暂时撤销华为会员资格,WAPI能否取代
谷歌旗下应用通过AR技术 让用户足不出户就能逛遍美术馆
日本四家移动运营商计划在2020年开始商用5G服务