STM8|STM32 看門狗使用
STM8和STM32都配備了獨(dú)立看門狗,其作用之大不言而喻。以下為STM8及STM32的獨(dú)立看門狗使用例:
對(duì)于STM32單片機(jī):
#define SYS_IWDG_OPEN IWDG->KR=0xCCCC;
#define SYS_IWDG_FEED IWDG->KR=0xAAAA;
void SystemIWDG_Config(uint32 OverTime)
{
RCC->CSR|=RCC_CSR_LSION;
while((RCC->CSR&RCC_CSR_LSIRDY)==0);
IWDG->KR=0x5555; //使能模塊訪問
while(IWDG->SR&IWDG_SR_PVU);
IWDG->PR=0x0006; //256分頻 40000/256=156HZ T=6.4ms
while(IWDG->SR&IWDG_SR_RVU);
IWDG->RLR=(OverTime*10)>>6; //溢出時(shí)間
IWDG->KR=0xAAAA; //裝載IWDG->RLR
}
對(duì)于STM8單片機(jī):
#define SYS_IWDG_OPEN IWDG_KR=0xCC;
#define SYS_IWDG_FEED IWDG_KR=0xAA;
void SystemIWDG_Config(void){
CLK_ICKCR|=S3;
while((CLK_ICKCR&S4)==0);
//STM8單片機(jī)需先執(zhí)行0xCC指令,即先打開IWDG模塊,否則IWDG工作不正常
IWDG_KR=0xCC; //啟動(dòng)看門狗
IWDG_KR=0x55; //使能模塊訪問
IWDG_RLR=0xFF; //溢出時(shí)間
IWDG_PR=0x06; //256分頻 38000/256=148HZ T=6.7ms
IWDG_KR=0xAA; //裝載IWDG->RLR
}
使用:先在主程序中打開看門狗,在主循環(huán)或任務(wù)中喂狗,但千萬別在中斷中喂狗。
void main()
{
......
SYS_IWDG_OPEN
......
while(1){
......
SYS_IWDG_FEED
------
}
}
操作系統(tǒng)OS中喂狗一般安排在最高優(yōu)先級(jí)任務(wù)中,并且保證此線程不斷循環(huán)。