日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > 嵌入式微處理器
[導(dǎo)讀]SATM32單片機(jī)的看門狗有獨立看門狗和窗口看門狗之分,這兩者的工作原理卻完全不同,今天來看一下他們的具體區(qū)別和配置方法。



SATM32單片機(jī)的看門狗有獨立看門狗和窗口看門狗之分,這兩者的工作原理卻完全不同,今天來看一下他們的具體區(qū)別和配置方法。


▍STM32獨立看門狗

由專門的低速時鐘(LSI)驅(qū)動,即便是主時鐘發(fā)生故障它仍能夠有效,所以此狗狗可以工作在與主時鐘無關(guān)的要求下,或者待機(jī)模塊下等,所以它叫獨立看門狗,注意一旦開啟此看門狗則只能由MCU復(fù)位后才清除,讓它不再工作。

它的時鐘是一個內(nèi)部RC時鐘,它會在30KHZ到60KHZ之間變化,并非是精確的40KHZ,而只是一般計算時取40KHZ。

獨立看門狗需設(shè)置四個寄存器如下:


其中,預(yù)分頻寄存器(IWDG_PR),最低三位PR[2:0](Prescaler divider)有效,可設(shè)置有8種不同的計數(shù)器時鐘預(yù)分頻因子。

重裝載寄存器(IWDG_RLR)低12位RL[11:0]: 看門狗計數(shù)器重裝載值 (Watchdog counter reload value) 有效,用來設(shè)置計數(shù)器的重裝載值。

注意要設(shè)置以上兩個寄存器的值需滿足兩個條件,詳見如下:

鍵寄存器(IWDG_KR),用來控制去除IWDG_PR和IWDG_RLR寫保護(hù)功能以便正常寫值,向此寄存器寫入0x5555則暫時去除IWDG_PR和IWDG_RLR的寫保護(hù)功能才可向兩個寄存器中寫值。

當(dāng)向此寄存器寫入0xAAAA則IWDG_RLR的值會重裝載,防止MCU復(fù)位,向入0xCCCC是開啟狗立看門狗動作。

狀態(tài)寄存器(IWDG_SR)最低兩位有效RVU: 看門狗計數(shù)器重裝載值更新 (Watchdog counter reload value update) 標(biāo)識位和PVU: 看門狗預(yù)分頻值更新?(Watchdog prescaler value update) 標(biāo)識位,分別用來指示此時是否可向IWDG_RLR ?和 IWDG_PR寫值,此寄存器由硬件置1與清0,只有當(dāng)為0時才可向上面兩個寄存器寫值。

它的初始化過程大致如下 :?

//時間計算(大概):Tout=((4*2^prer)*rlr)/40?(ms)
void?IWDG_Init(u8?prer,u16?rlr)
{???????
????????IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);?
?????????IWDG_SetPrescaler(prer);???
?????????IWDG_SetReload(rlr);?
?????????IWDG_ReloadCounter();??????
?????????IWDG_Enable();?
}


喂狗可通過調(diào)用如下函數(shù)進(jìn)行:


IWDG_ReloadCounter();//reload
另外要注意不要使用硬件時鐘中斷喂狗,因為硬件時鐘中斷一般都有較高優(yōu)先級且獨立于主控程序,這樣有時會出現(xiàn)主控程序雖然跑飛了,但仍能夠正常喂狗的現(xiàn)象。

獨立看門狗能夠在一定程度上監(jiān)控著程序正常運行,然而我認(rèn)為更加強(qiáng)大,應(yīng)用更靈活及更能保證程序穩(wěn)定運行的還屬窗口看門狗,雖然它開始時不太好理解。

STM32窗口看門狗

共三個寄存器,如下圖:


看似簡單,但設(shè)置及應(yīng)用起來有不少玄機(jī)。

控制寄存器(WWDG_CR)中的值必須在0xFF與0xC0之間, 因為它的第0至第6位為遞減計數(shù)器CNT,在它的第6位變?yōu)?時將產(chǎn)生復(fù)位,所以在初始化時需要為1,第7位WDGA是用來設(shè)置啟動或禁止窗口看門狗的,當(dāng)為1進(jìn)才會啟動窗口看門狗,所以第6和第7位都需為1,即WWDG_CR 的值需要大于等于0xC0 。

配置寄存器(WWDG_CFR) 第0至第6位 是設(shè)置窗口邊界值用的,只有當(dāng)遞減計數(shù)器CNT的值小于邊界值時才可以喂狗,過早不行,狗還不餓,撐死了。

并且7位遞減計數(shù)器CNT減少到0x3F時即T6位變?yōu)?,此時MCU也會復(fù)位,過晚了,狗餓死了。

所以必須在指定的時間范圍喂狗,過早或過晚都將產(chǎn)生復(fù)位,而這樣設(shè)計可以減少軟件跑飛了卻仍能夠歪打正著地喂狗的發(fā)生概率。

狀態(tài)寄存器(WWDG_CFR) 只用到了第0位,EWIF(Early wakeup interrupt flag )是提前喚醒中斷標(biāo)識,當(dāng)遞減計數(shù)器CNT的值到達(dá)0X40(若再減少一次則T6位變?yōu)?,產(chǎn)生復(fù)位)時此位由硬件置1,且需用軟件清0,注意無論中斷是否使能此位都會被硬件置1。

而提前喚醒中斷使能設(shè)置是在配置寄存器(WWDG_CFR)第9位EWI(Early wakeup interrupt),此位需由軟件置1,則會在當(dāng)遞減計數(shù)器CNT的值到達(dá)0X40時產(chǎn)生中斷,并且與EWIF不同,此位是由硬件清0。

另外控制寄存器(WWDG_CR)中第7位WDGA(Activation bit)激活位,需用軟件來置1,以啟動窗口看門狗,并且一旦啟動后,只能在復(fù)位或重啟后由硬件來清0。

配置寄存器(WWDG_CFR)的第8位和第7位WDGTB[1:0]用來設(shè)置時基(Timer base)預(yù)分頻數(shù)。

?以上描述可參考下圖以更清晰的理解:


窗口看門狗應(yīng)用時還要注意算準(zhǔn)最小與最大喂狗時間,以便正確地喂狗,如下:


在PCLK1頻率為36MHz 時,則

上窗口時間:T_min = 4096 * (2^WDGTB)*(WWDG_CR[6:0] - WWDG_CFR[6:0])/36 (us)
下窗口時間:T_max = 4096 * (2^WDGTB)*(WWDG_CR[6:0] - 0x40)/36 (us) 。

喂狗動作需在這段時間之間進(jìn)行,而喂狗動作為向控制寄存器(WWDG_CR)中寫值。

窗口看門狗中斷函數(shù)void WWDG_IRQHandler(void);是用來做什么的呢。

窗口看門狗中斷函數(shù)是在遞減計數(shù)器減少到0x40是被調(diào)用,因為它本身計數(shù)就比較慢,所以離數(shù)到0x3F復(fù)位還有一段時間,我認(rèn)為這樣設(shè)計是為MCU復(fù)位之前留下一點時間,能夠使工程設(shè)計人員根據(jù)需要在中斷函數(shù)保存一些重要的數(shù)據(jù),這樣在復(fù)位后MCU可知道系統(tǒng)因異常復(fù)位的某此狀態(tài),以使系統(tǒng)有更高穩(wěn)定性。

并且我覺得在窗口看門狗中斷函數(shù)中喂狗沒有什么意義,程序本來已經(jīng)不按正常運行了,還在中斷函數(shù)中喂狗防止復(fù)位只會錯上加錯,不好好利用它干點正事, 更是浪費資源。

這點上我個人認(rèn)為不要被點原子示例代碼誤導(dǎo)哦,但其還是有部分借鑒意義的,以下為初始化相關(guān)代碼:

??//窗口看門狗中斷服務(wù)設(shè)置程序
????void?WWDG_NVIC_Init()
????
{
??????NVIC_InitTypeDef?NVIC_InitStructure;
??????NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);??????
??????NVIC_InitStructure.NVIC_IRQChannel?=?WWDG_IRQn;???????//WWDG?中斷
??????NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority?=?2;?//搶占2?子優(yōu)先級3?組2
??????NVIC_InitStructure.NVIC_IRQChannelSubPriority?=?3;????//搶占2,子優(yōu)先級3,組2
??????NVIC_Init(&NVIC_InitStructure);???????????????????????//NVIC?初始化
????}
//保存WWDG?計數(shù)器的設(shè)置值,默認(rèn)為最大.
u8?WWDG_CNT=0x7f;
?//初始化窗口看門狗
????//tr??:T[6:0],計數(shù)器值
????//wr???:W[6:0],窗口值
????//fprer:分頻系數(shù)(WDGTB?),僅最低2?位有效
????//Fwwdg=PCLK1/(4096*2^fprer).
????void?WWDG_Init(u8?tr,u8?wr,u32?fprer)
????{
??????RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,?ENABLE);?//?WWDG?時鐘使能
??????WWDG_CNT=tr&WWDG_CNT;??????//初始化WWDG_CNT.
??????WWDG_SetPrescaler(fprer);????????//設(shè)置IWDG?預(yù)分頻值
??????WWDG_SetWindowValue(wr);???????//設(shè)置窗口值
??????WWDG_Enable(WWDG_CNT);???????//使能看門狗,設(shè)置counter
??????WWDG_ClearFlag();???????????????//清除提前喚醒中斷標(biāo)志位?(注:若沒有此句則會在初始化后先進(jìn)入中斷一次)
??????WWDG_NVIC_Init();???????????????//初始化窗口看門狗NVIC
??????WWDG_EnableIT();????????????????//開啟窗口看門狗中斷
}


以上代碼朋友們也可以跳到庫函數(shù)代碼中自己研究下,另外要說明下的是WWDG_EnableIT(); 函數(shù)相關(guān)代碼


#define?CFR_EWI_BB????????(PERIPH_BB_BASE?+?(CFR_OFFSET?*?32)?+?(EWI_BitNumber?*?4))

用到位帶操作,具體理解可參照《Cortex-M3權(quán)威指南》第五章的位帶操作相關(guān)介紹(具體89頁)。


-END-

來源 | 玩轉(zhuǎn)嵌入式


|?整理文章為傳播相關(guān)技術(shù),版權(quán)歸原作者所有?|

|?如有侵權(quán),請聯(lián)系刪除?|


【1】單片機(jī)為何既有Flash又有EEPROM?

【2】“史上”最爛代碼!

【3】goto語句對與錯

【4】C語言內(nèi)存操作的陷阱!你踩過坑嗎?

【5】RTOS 是如何進(jìn)行任務(wù)劃分的?


免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

嵌入式ARM

掃描二維碼,關(guān)注更多精彩內(nèi)容

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護(hù)是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機(jī)驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機(jī)驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉