在編寫程序時(shí)有時(shí)會(huì)出現(xiàn)死機(jī)或程序跑飛的情況,這時(shí)對(duì)系統(tǒng)有一定的影響,怎樣讓程序可以自行重啟呢,STM8S中的看門狗就是實(shí)現(xiàn)這一功能的,用看門狗檢測(cè)程序的執(zhí)行,在看門狗的復(fù)位時(shí)間內(nèi)進(jìn)行喂狗,如果程序在某個(gè)地方出現(xiàn)問題,那么就不能及時(shí)的進(jìn)行喂狗,這時(shí)系統(tǒng)就會(huì)重新啟動(dòng),達(dá)到檢測(cè)的目的。通過觀察小燈的閃爍快慢可以看出系統(tǒng)是否復(fù)位。程序如下:
本文引用地址:http://m.butianyuan.cn/article/201611/321589.htm//軟件環(huán)境:IAR FOR STM8 V1.0
//作者:Nicole
//功能:STM8的獨(dú)立看門狗應(yīng)用
//日期:2010.11.04
#include
#include
unsigned int i;
//時(shí)鐘配置
void CLK_Configuration(void)
{
//CLK_ICKR= 0x08; //打開低速時(shí)鐘
CLK_CKDIVR = 0x00;
}
//延時(shí)函數(shù)
void Delay(unsigned int i)
{
unsigned int j;
while(i--)
{
for(j=1000;j>0;j--);
}
}
//IO口配置,控制小燈
void GPIO_Init(void)
{
unsigned int i;
PD_DDR|=0x01;//PD0輸出,其余保持原功能
PD_CR1|=0x01;//對(duì)應(yīng)位設(shè)置為推挽輸出
PD_CR2|=0x00;//輸出最大頻率為2MHz
//小燈閃爍的速度快(為了看的清晰循環(huán)4次)
for(i=0;i<4;i++)
{
PD_ODR=0xff;
Delay(200);
PD_ODR=0xfe;
Delay(200);
}
}
//看門狗配置
void IWDG_Init(void)
{
IWDG_KR = 0xCC; //啟動(dòng)IWDG
IWDG_KR = 0x55; //解除 PR 及 RLR 的寫保護(hù)
IWDG_RLR = 0xff; //看門狗計(jì)數(shù)器重裝載數(shù)值
IWDG_PR = 0x06; //分頻系數(shù)為256,最長(zhǎng)超時(shí)時(shí)間為:1.02S
IWDG_KR = 0xAA; //刷新IDDG,避免產(chǎn)生看門狗復(fù)位,同時(shí)恢復(fù) PR 及 RLR 的寫保護(hù)狀態(tài)
void main(void)
{
CLK_Configuration(); // 開啟外部時(shí)鐘
GPIO_Init();// 初始化端口
IWDG_Init();// 初始化外部看門狗
while(1)
{
PD_ODR = 0xff;//PD0為輸出1,LED滅
Delay(1000);//延時(shí)長(zhǎng)小燈閃爍慢些
PD_ODR = 0xfe;//PD0為輸出0,LED亮
Delay(1000);
}
//程序中沒有及時(shí)喂狗,所以觀察到小燈先閃爍快些,然后閃爍慢些,達(dá)到看門狗的復(fù)位時(shí)間系統(tǒng)重啟,循環(huán)上述過程
}
評(píng)論