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);//默许计数时刻一svoid 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 = 250IWDG->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;elseWWDG->CR = 0x7f;}