新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > stm8的獨立看門狗與窗口看門狗

        stm8的獨立看門狗與窗口看門狗

        作者: 時間:2016-11-19 來源:網絡 收藏
        STM8擁有兩個硬件看門狗,分別叫做獨立看門狗窗口看門狗

        獨立看門狗的框圖如下

        本文引用地址:http://www.104case.com/article/201611/318189.htm


        我們可以看到,獨立看門狗的時鐘來自于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;}



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 通辽市| 宁城县| 兰坪| 水富县| 白玉县| 韩城市| 宜宾市| 白银市| 吉首市| 鸡泽县| 丰城市| 丹江口市| 苏尼特右旗| 西青区| 班玛县| 营口市| 巴林左旗| 株洲市| 武城县| 京山县| 福鼎市| 南昌市| 北宁市| 临洮县| 石首市| 闽清县| 吉木萨尔县| 图木舒克市| 治多县| 资兴市| 屏南县| 洞口县| 搜索| 荔波县| 崇文区| 临猗县| 抚州市| 高州市| 临桂县| 比如县| 宣武区|