切换到宽版
  • 3821阅读
  • 3回复

[STM]STM8学习之——IWDG独立看门狗 [复制链接]

上一主题 下一主题
离线zeze10000
 

发帖
2858
M币
8559
专家
35
粉丝
112
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2018-07-15
今天来学习STM8的独立看门狗。
看门狗就是用来监测单片机运行是否正常的,程序是否运行正常,是否进入死循环等。
原理就是定时计数器。
计数器向下计数,到零时触发单片机复位。
正常运行时就需要在复位前给计数器写入新值,也就是喂狗。

先看看结构

这里可以看到,看门狗的时钟是来源于内部128K低速震荡时钟的2分频。
也就是输入时钟是64k。
再经过一个分频器变成计数器时钟。

与独立看门狗相关的寄存器有IWDG_KR键寄存器,IWDG_PR分频寄存器,IWDG_RLR重装载寄存器。

分频器寄存器如下

显示了分频系数及喂狗周期

下图是计算方式

T为喂狗周期,超时产生复位
D为喂狗后到复位的时长,比喂狗周期长一些。

独立看门狗的启用流程如下
先开启独立看门狗功能
再解锁相关寄存器设置
再写入分频和重装载值
最后执行刷新,使分频和重装载值生效

喂狗就是执行刷新,要改变分频值和重装载值则先解锁,再修改,再刷新。
执行刷新后IWDG_RLR的值会重新装载到计数器。

这里以分频256、重装载17计算
T=(2*256*17)/128=68ms
D=68+6/128=68.05ms

看复位引脚波形

基本满足,因为频率误差和执行指令时间,所以有点误差

停机模式下的看门狗复位

这里比不停机多了零点几毫秒的时间,可能是带有唤醒单片机的操作吧

贴上程序
  1. #include<iostm8s105k4.h>
  2. void init()
  3. {
  4.   IWDG_KR=0xcc; //启用看门狗
  5.   IWDG_KR=0x55; //解锁寄存器
  6.   IWDG_PR=0x06; //分频值
  7.   IWDG_RLR=0x10;//重装载值
  8.   IWDG_KR=0xaa; //数据刷新
  9. }
  10. int main( void )
  11. {
  12.   init();
  13.   while(1)
  14.   {
  15.     //IWDG_KR=0xaa;     //喂狗
  16.     //asm("halt");        //进入停机模式
  17.   }
  18. }


THE END!

本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共2条打赏M币+20
2545889167 M币 +5 - 2018-07-15
66ok66 M币 +15 小白福音,请继续....... 2018-07-15
离线junyee

发帖
4100
M币
1036
专家
12
粉丝
165
只看该作者 1楼 发表于: 2018-07-15
请登录后查看
离线hw364700944

发帖
178
M币
-439
专家
0
粉丝
6
只看该作者 2楼 发表于: 2018-07-15
请登录后查看
离线yzx0201

发帖
1562
M币
3685
专家
2
粉丝
24
只看该作者 3楼 发表于: 2018-07-16
回 hw364700944 的帖子
请登录后查看
快速回复
限80 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个