為了提搞系統的可靠性,STM32F4系列MCU有一個獨立看門狗(IWDG)和一個窗口看門狗(WWDG)。今天做的實驗是關於獨立看門狗的。
獨立看門狗使用的時鍾源是內部低速振盪器LSI。因為LSE可能沒接,HSE可能壞點,HSE耗着的時候HSI卻觀點了。。。諸多原因,LSI是最好的獨立看門狗時鍾。
【IWDG主要特性】
1、獨立的向下計數器 2、內部RC振盪器作為時鍾源 3、當計數器值減到0時,復位MCU
【IWDG配置步驟】
1、設置KR寄存器,為向PR和RLR寫入數據做准備。向KR寫入0x5555使能寫入PR和RLR
2、寫入預分頻值和重裝載值。預分頻是對LSI進行分頻,重裝載值是每次重新計數的開始值。
3、向KR寫入0xAAAA,使能計數。
4、向KR寫入0x5555,重新開始計數。否則計數到0就會reset。
【代碼實現】
本實驗依賴於前面的LED實驗。實驗第一步的現象是LED反復閃爍。第二步現象是LED亮一下后熄滅。
第一部分:
int main()
{
NVIC_Config();
LED_Init();
LEDOn(LED1);
delay_ms(500);
LEDOff(LED1);
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//使能寫入PR和RLR
IWDG_SetPrescaler(IWDG_Prescaler_128); //寫入PR預分頻值
IWDG_SetReload(100); //寫入RLR
IWDG_Enable();//KR寫入0xCCCC
while(1)
{
IWDG_ReloadCounter(); //KR寫入0x5555 重新開始計數,不讓復位
}
}
在這次實驗中我們看到LED亮一下就保持常暗。說明MCU沒有被復位。
第二部分,我們不重裝RLR計數器,看看呢個不能復位mcu
int main()
{
NVIC_Config();
LED_Init();
LEDOn(LED1);
delay_ms(500);
LEDOff(LED1);
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//使能寫入PR和RLR
IWDG_SetPrescaler(IWDG_Prescaler_32); //寫入PR預分頻值
IWDG_SetReload(100); //寫入RLR
IWDG_Enable();//KR寫入0xCCCC
while(1)
{
//等待mcu被IWDG復位
}
}
這次可以看到LED在閃爍了。
