stm8的独立看门狗与窗口看门狗
STM8拥有两个硬件看门狗,分别叫做独立看门狗和窗口看门狗
独立看门狗的框图如下
我们可以看到,独立看门狗的时钟来自于LSI内部低速振荡器,经过二分频到达看门狗外设单元,在经过一个七位的预分频到达计数器,这个七位的分频由PR控制,看门狗内部使用一个八位的向下计数计数器来计数,计数到0的时候发出看门狗复位信号,同时有一个RLR可以存放看门狗的初始化值,但对KR操作的时候看门狗计数器重载RLR的数据,达到喂狗目的
所以,对看门狗的处理应该分为以下步骤
1. 关闭看门狗
2. 启动LSI系统低速时钟
3. 设置时钟的分频系数
4. 设置看门狗重载的值
5. 在没有复位之前喂狗,重新计数
相关寄存器如下
使用方法见以下代码
#ifndef __IWDG_H_ #define __IWDG_H_ #include "stm8s.h" void IWDGInit(void);//默认计数时间一s void IWDGFeed(void); #endif
#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启动看门狗
窗口看门狗一旦启动无法关闭,除非发生复位系统自动关闭,具体使用查看代码
#ifndef __WWDG_H_ #define __WWDG_H_ #include "stm8s.h" void WWDGInit(void); void WWDGFeed(void); #endif
#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;
}
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号