看门狗的主要作用就是防止程序跑飞,防止堆栈数据溢出,将单片机进行重启操作,不可屏蔽中断,优先级最高。
答题的过程是这样的,计数器有一个值,不停的做减法操作,当值为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一次喂狗等操作。
审核编辑黄昊宇
-
看门狗
+关注
关注
10文章
560浏览量
70792
发布评论请先 登录
相关推荐
评论