STM32—IWDG獨立看門(mén)狗的使用
STM32---IWDG獨立看門(mén)狗的使用
獨立看門(mén)狗(IWDG)由專(zhuān)用的40kHz的低速時(shí)鐘驅動(dòng),
即使主時(shí)鐘發(fā)生故障它也仍然有效。
窗口看門(mén)狗由從APB1時(shí)鐘分頻后得到的時(shí)鐘驅動(dòng),
通過(guò)可配置的時(shí)間窗口來(lái)檢測應用程序非正常的過(guò)遲或過(guò)早的操作。
IWDG最適合應用于那些需要看門(mén)狗作為一個(gè)在主程序之外,
能夠完全獨立工作,并且對時(shí)間精度要求較低的場(chǎng)合。
WWDG最適合那些要求看門(mén)狗在精確計時(shí)窗口起作用的應用程序。
IWDG主要性能
●自由運行的遞減計數器
●時(shí)鐘由獨立的RC振蕩器提供(可在停止和待機模式下工作)
●看門(mén)狗被激活后,則在計數器計數至0x000時(shí)產(chǎn)生復位
在鍵寄存器(IWDG_KR)中寫(xiě)入0xCCCC,開(kāi)始啟用獨立看門(mén)狗;
此時(shí)計數器開(kāi)始從其復位值0xFFF遞減計數。
當計數器計數到末尾0x000時(shí),會(huì )產(chǎn)生一個(gè)復位信號(IWDG_RESET)。
無(wú)論何時(shí),只要鍵寄存器IWDG_KR中被寫(xiě)入0xAAAA,
IWDG_RLR中的值就會(huì )被重新加載到計數器中從而避免產(chǎn)生看門(mén)狗復位 。
如果用戶(hù)在選擇字節中啟用了“硬件看門(mén)狗“功能,
在系統上電復位后,看門(mén)狗會(huì )自動(dòng)開(kāi)始運行;
如果在計數器計數結束前,若軟件沒(méi)有向鍵寄存器寫(xiě)入相應的值,
則系統會(huì )產(chǎn)生復位寄存器訪(fǎng)問(wèn)保護
IWDG_PR和IWDG_RLR寄存器具有寫(xiě)保護功能。
要修改這兩個(gè)寄存器的值,必須先向IWDG_KR寄存器中寫(xiě)入0x5555。
以不同的值寫(xiě)入這個(gè)寄存器將會(huì )打亂操作順序,寄存器將重新被保護。
重裝載操作(即寫(xiě)入0xAAAA)也會(huì )啟動(dòng)寫(xiě)保護功能。
狀態(tài)寄存器指示預分頻值和遞減計數器是否正在被更新。
//啟動(dòng)獨立看門(mén)狗
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //訪(fǎng)問(wèn)之前要首先使能寄存器寫(xiě)
IWDG_SetPrescaler(IWDG_Prescaler_64);//64分頻 一個(gè)周期1.6ms
IWDG_SetReload(800);//最長(cháng)12位 [0,4096] 800*1.6=1.28S
/* Reload IWDG counter */
IWDG_ReloadCounter();
IWDG_Enable();// Enable IWDG (the LSI oscillator will be enabled by hardware)
因為獨立看門(mén)狗使用的是LSI,所以最好程序啟動(dòng)的時(shí)候,使時(shí)鐘源穩定:
/* LSI的啟動(dòng)*/
RCC_LSICmd(ENABLE);//打開(kāi)LSI
while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY)==RESET);//等待直到LSI穩定
評論