打印
[STM8]

【转】stm8的独立看门狗与窗口看门狗

[复制链接]
585|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
俺是村长他爹|  楼主 | 2016-11-27 23:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

STM8拥有两个硬件看门狗,分别叫做独立看门狗和窗口看门狗

独立看门狗的框图如下



我们可以看到,独立看门狗的时钟来自于LSI内部低速振荡器,经过二分频到达看门狗外设单元,在经过一个七位的预分频到达计数器,这个七位的分频由PR控制,看门狗内部使用一个八位的向下计数计数器来计数,计数到0的时候发出看门狗复位信号,同时有一个RLR可以存放看门狗的初始化值,但对KR操作的时候看门狗计数器重载RLR的数据,达到喂狗目的


所以,对看门狗的处理应该分为以下步骤

1.      关闭看门狗

2.      启动LSI系统低速时钟

3.      设置时钟的分频系数

4.      设置看门狗重载的值

5.      在没有复位之前喂狗,重新计数

相关寄存器如下


沙发
俺是村长他爹|  楼主 | 2016-11-27 23:17 | 只看该作者

使用方法见以下代码



[cpp] view plain copy


  • #ifndef __IWDG_H_  
  • #define __IWDG_H_  
  • #include "stm8s.h"  
  •   
  •   
  • void IWDGInit(void);//默认计数时间一s  
  •   
  • void IWDGFeed(void);  
  •   
  •   
  •   
  • #endif  


[cpp] view plain copy


  • #include "iwdg.h"  
  •   
  •   
  • void IWDGInit(void) //默认计数时间一分钟  
  • {  
  •     //首先打开LSI时钟  
  •     CLK->ICKR |= (1<<3);  
  •     while((CLK->ICKR&(1<<4)) == 0);//等待时钟稳定  
  •     IWDG->KR = 0x55;//写入解锁  
  •     IWDG->PR = 0x06;//分频64K /256 = 250  
  •     IWDG->RLR = 250;//计数值250 1复位  
  •     IWDG->KR = 0xaa;//锁定并刷新分频器  
  •     IWDG->KR = 0xcc;//启动独立看门狗  
  •       
  • }  
  •   
  • void IWDGFeed(void)  
  • {  
  •     IWDG->KR = 0xaa;//锁定并刷新分频器  
  • }  



窗口看门狗这是另一种模式,芯片定义了一个下线,低于0x40的时候产生复位,同时定义了一个上限,高于上限的时候喂狗同样产生复位

  窗口看门狗的时钟来自于cpu时钟,分频数为12288,使用看门狗过程如下

1设置窗口值

2设置当前计数值

3启动看门狗

窗口看门狗一旦启动无法关闭,除非发生复位系统自动关闭,具体使用查看代码


[cpp] view plain copy


  • #ifndef __WWDG_H_  
  • #define __WWDG_H_  
  • #include "stm8s.h"  
  •   
  •   
  • void WWDGInit(void);  
  •   
  • void WWDGFeed(void);  
  •   
  •   
  •   
  • #endif  


[cpp] view plain copy


  • #include "wwdg.h"  
  •   
  • void WWDGInit(void)  
  • {  
  •     if((WWDG->CR&0x80) == 1)  
  •     {  
  •         return;  
  •     }  
  •     else  
  •     {  
  •         WWDG->WR = 0x60;  
  •         WWDG->CR = 0xff;  
  •     }  
  • }  
  •   
  • void WWDGFeed(void)  
  • {  
  •     u8 windows = WWDG->WR ;  
  •     if((WWDG->CR&0x7f)>=windows)  
  •         return;  
  •     else  
  •          WWDG->CR |= 0x7f;  
  • }  


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

66

主题

168

帖子

2

粉丝