單片機系統在外界的干擾下會出現程序跑飛的現象導致出現死循環,看門狗電路就是爲了避免這種情況的發生。
看門狗的作用就是在一定時間內(通過定時計數器實現)沒有接收餵狗信號(表示 MCU 已經掛了),便實現處理器
的自動復位重啓(發送復位信號)。
以下爲stm32f042單片機獨立看門狗相關代碼:
/**********************************************************
*函數描述:初始化獨立看門狗,timeout爲1s
*函數:void IWDG_Init(unsigned char usb_sw)
*參數:無
*作者:
*日期:
***********************************************************/
void IWDG_Init(void)
{
/* Set counter reload value to obtain 250ms IWDG TimeOut.
Counter Reload Value = 1000ms/IWDG counter clock period
= 1000ms / (128/LSI)
= LsiFreq/128
*/
IWDG->KR = 0x5555; //使能對寄存器寫操作
IWDG->PR = 0x05; //設置預分頻爲128分頻
IWDG->KR = 40000/128; //設置重裝載值
IWDG->KR = (uint16_t)0xAAAA; //重裝載計數器
IWDG->KR = (uint16_t)0xCCCC; //使能看門狗
}
/* 餵狗函數 */
void IWDG_ReloadCounter(void)
{
IWDG->KR = (uint16_t)0xAAAA;
}