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;
}





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM