STM32F10xxx支持三種復(fù)位形式,分別為系統(tǒng)復(fù)位、上電復(fù)位和備份區(qū)域復(fù)位。
一、系統(tǒng)復(fù)位
系統(tǒng)復(fù)位將復(fù)位所有寄存器至它們的復(fù)位狀態(tài)。
當(dāng)發(fā)生以下任一事件時(shí),產(chǎn)生一個(gè)系統(tǒng)復(fù)位:
NRST引腳上的低電平(外部復(fù)位)
窗口看門狗計(jì)數(shù)終止(WWDG復(fù)位)
獨(dú)立看門狗計(jì)數(shù)終止(IWDG復(fù)位)
軟件復(fù)位(SW復(fù)位)
低功耗管理復(fù)位 可通過查看RCC_CSR控制狀態(tài)寄存器中的復(fù)位狀態(tài)標(biāo)志位識別復(fù)位事件來源。
軟件復(fù)位通過將Cortex?-M3中斷應(yīng)用和復(fù)位控制寄存器中的SYSRESETREQ位置’1’,可實(shí)現(xiàn)軟件復(fù)位。請參考Cortex?-M3技術(shù)參考手冊獲得進(jìn)一步信息。低功耗管理復(fù)位在以下兩種情況下可產(chǎn)生低功耗管理復(fù)位:
在進(jìn)入待機(jī)模式時(shí)產(chǎn)生低功耗管理復(fù)位:通過將用戶選擇字節(jié)中的nRST_STDBY位置’1’將使能該復(fù)位。這時(shí),即使執(zhí)行了進(jìn)入待機(jī)模式的過程,系統(tǒng)將被復(fù)位而不是進(jìn)入待機(jī)模式。
在進(jìn)入停止模式時(shí)產(chǎn)生低功耗管理復(fù)位:通過將用戶選擇字節(jié)中的nRST_STOP位置’1’將使能該復(fù)位。這時(shí),即使執(zhí)行了進(jìn)入停機(jī)模式的過程,系統(tǒng)將被復(fù)位而不是進(jìn)入停機(jī)模式。
關(guān)于用戶選擇字節(jié)的進(jìn)一步信息,請參考STM32F10xxx閃存編程手冊。
二、電源復(fù)位
電源復(fù)位當(dāng)以下事件中之一發(fā)生時(shí),產(chǎn)生電源復(fù)位:
上電/掉電復(fù)位(POR/PDR復(fù)位)
從待機(jī)模式中返回 圖4) 電源復(fù)位將復(fù)位除了備份區(qū)域外的所有寄存器。
(見圖中復(fù)位源將最終作用于RESET引腳,并在復(fù)位過程中保持低電平。復(fù)位入口矢量被固定在地址0x0000_0004。芯片內(nèi)部的復(fù)位信號會在NRST引腳上輸出,脈沖發(fā)生器保證每一個(gè)(外部或內(nèi)部)復(fù)位源都能有至少20μs的脈沖延時(shí);當(dāng)NRST引腳被拉低產(chǎn)生外部復(fù)位時(shí),它將產(chǎn)生復(fù)位脈沖。
三、備份域復(fù)位
備份區(qū)域擁有兩個(gè)專門的復(fù)位,它們只影響備份區(qū)域(見圖4)。
當(dāng)以下事件中之一發(fā)生時(shí),產(chǎn)生備份區(qū)域復(fù)位。
軟件復(fù)位,備份區(qū)域復(fù)位可由設(shè)置備份域控制寄存器 (RCC_BDCR)(見6.3.9節(jié))中的BDRST位產(chǎn)生。
在VDD和VBAT兩者掉電的前提下,VDD或VBAT上電將引發(fā)備份區(qū)域復(fù)位。
四、復(fù)位的標(biāo)志位
五、復(fù)位標(biāo)志位檢索/判斷什么原因?qū)е碌膹?fù)位
標(biāo)志位判斷的代碼由官方庫中給定代碼如下:
FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);//FlagStatus 分為SET和RESET兩種;
/**
當(dāng)然判斷完后,我們需要將復(fù)位類型的標(biāo)志置位以防后期出現(xiàn)重復(fù)多次判斷void RCC_ClearFlag(void);//清除復(fù)位執(zhí)行函數(shù)
/**
在使用時(shí),只需要執(zhí)行如下語句即可:
if(RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET)
當(dāng)然軟件復(fù)位的代碼如下:
六、STM32軟件復(fù)位方法
在Cortex-M3權(quán)威指南中有這么一句話這里有一個(gè)要注意的問題:從SYSRESETREQ 被置為有效,到復(fù)位發(fā)生器執(zhí)行復(fù)位命令,往往會有一個(gè)延時(shí)。在此延時(shí)期間,處理器仍然可以響應(yīng)中斷請求。但我們的本意往往是要讓此次執(zhí)行到此為止,不要再做任何其它事情了。所以,最好在發(fā)出復(fù)位請求前,先把FAULTMASK 置位。所以最好在將FAULTMASK 置位才萬無一失。
void mcuRestart(void)
責(zé)任編輯:彭菁
-
寄存器
+關(guān)注
關(guān)注
31文章
5294瀏覽量
119816 -
STM32
+關(guān)注
關(guān)注
2264文章
10854瀏覽量
354294 -
編程
+關(guān)注
關(guān)注
88文章
3565瀏覽量
93536
發(fā)布評論請先 登錄
相關(guān)推薦
評論