一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32單片機(jī)兩種看門(mén)狗的區(qū)別和配置方法

Q4MP_gh_c472c21 ? 來(lái)源:玩轉(zhuǎn)嵌入式 ? 作者:玩轉(zhuǎn)嵌入式 ? 2020-10-10 11:27 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

STM32獨(dú)立看門(mén)狗 由專(zhuān)門(mén)的低速時(shí)鐘(LSI)驅(qū)動(dòng),即便是主時(shí)鐘發(fā)生故障它仍能夠有效,所以此狗狗可以工作在與主時(shí)鐘無(wú)關(guān)的要求下,或者待機(jī)模塊下等,所以它叫獨(dú)立看門(mén)狗,注意一旦開(kāi)啟此看門(mén)狗則只能由MCU復(fù)位后才清除,讓它不再工作。 它的時(shí)鐘是一個(gè)內(nèi)部RC時(shí)鐘,它會(huì)在30KHZ到60KHZ之間變化,并非是精確的40KHZ,而只是一般計(jì)算時(shí)取40KHZ。 獨(dú)立看門(mén)狗需設(shè)置四個(gè)寄存器如下:

其中,預(yù)分頻寄存器(IWDG_PR),最低三位PR[2:0](Prescaler divider)有效,可設(shè)置有8種不同的計(jì)數(shù)器時(shí)鐘預(yù)分頻因子。 重裝載寄存器(IWDG_RLR)低12位RL[11:0]: 看門(mén)狗計(jì)數(shù)器重裝載值 (Watchdog counter reload value) 有效,用來(lái)設(shè)置計(jì)數(shù)器的重裝載值。 注意要設(shè)置以上兩個(gè)寄存器的值需滿足兩個(gè)條件,詳見(jiàn)如下: 鍵寄存器(IWDG_KR),用來(lái)控制去除IWDG_PR和IWDG_RLR寫(xiě)保護(hù)功能以便正常寫(xiě)值,向此寄存器寫(xiě)入0x5555則暫時(shí)去除IWDG_PR和IWDG_RLR的寫(xiě)保護(hù)功能才可向兩個(gè)寄存器中寫(xiě)值。 當(dāng)向此寄存器寫(xiě)入0xAAAA則IWDG_RLR的值會(huì)重裝載,防止MCU復(fù)位,向入0xCCCC是開(kāi)啟狗立看門(mén)狗動(dòng)作。 狀態(tài)寄存器(IWDG_SR)最低兩位有效RVU: 看門(mén)狗計(jì)數(shù)器重裝載值更新 (Watchdog counter reload value update) 標(biāo)識(shí)位和PVU: 看門(mén)狗預(yù)分頻值更新(Watchdog prescaler value update) 標(biāo)識(shí)位,分別用來(lái)指示此時(shí)是否可向IWDG_RLR 和 IWDG_PR寫(xiě)值,此寄存器由硬件置1與清0,只有當(dāng)為0時(shí)才可向上面兩個(gè)寄存器寫(xiě)值。 它的初始化過(guò)程大致如下 :

//時(shí)間計(jì)算(大概):Tout=((4*2^prer)*rlr)/40(ms) voidIWDG_Init(u8prer,u16rlr) { IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); IWDG_SetPrescaler(prer); IWDG_SetReload(rlr); IWDG_ReloadCounter(); IWDG_Enable(); }

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

IWDG_ReloadCounter();//reload另外要注意不要使用硬件時(shí)鐘中斷喂狗,因?yàn)橛布r(shí)鐘中斷一般都有較高優(yōu)先級(jí)且獨(dú)立于主控程序,這樣有時(shí)會(huì)出現(xiàn)主控程序雖然跑飛了,但仍能夠正常喂狗的現(xiàn)象。 獨(dú)立看門(mén)狗能夠在一定程度上監(jiān)控著程序正常運(yùn)行,然而我認(rèn)為更加強(qiáng)大,應(yīng)用更靈活及更能保證程序穩(wěn)定運(yùn)行的還屬窗口看門(mén)狗,雖然它開(kāi)始時(shí)不太好理解。 ▍STM32窗口看門(mén)狗 共三個(gè)寄存器,如下圖:

看似簡(jiǎn)單,但設(shè)置及應(yīng)用起來(lái)有不少玄機(jī)。 控制寄存器(WWDG_CR)中的值必須在0xFF與0xC0之間, 因?yàn)樗牡?至第6位為遞減計(jì)數(shù)器CNT,在它的第6位變?yōu)?時(shí)將產(chǎn)生復(fù)位,所以在初始化時(shí)需要為1,第7位WDGA是用來(lái)設(shè)置啟動(dòng)或禁止窗口看門(mén)狗的,當(dāng)為1進(jìn)才會(huì)啟動(dòng)窗口看門(mén)狗,所以第6和第7位都需為1,即WWDG_CR 的值需要大于等于0xC0 。 配置寄存器(WWDG_CFR) 第0至第6位 是設(shè)置窗口邊界值用的,只有當(dāng)遞減計(jì)數(shù)器CNT的值小于邊界值時(shí)才可以喂狗,過(guò)早不行,狗還不餓,撐死了。 并且7位遞減計(jì)數(shù)器CNT減少到0x3F時(shí)即T6位變?yōu)?,此時(shí)MCU也會(huì)復(fù)位,過(guò)晚了,狗餓死了。 所以必須在指定的時(shí)間范圍喂狗,過(guò)早或過(guò)晚都將產(chǎn)生復(fù)位,而這樣設(shè)計(jì)可以減少軟件跑飛了卻仍能夠歪打正著地喂狗的發(fā)生概率。 狀態(tài)寄存器(WWDG_CFR) 只用到了第0位,EWIF(Early wakeup interrupt flag )是提前喚醒中斷標(biāo)識(shí),當(dāng)遞減計(jì)數(shù)器CNT的值到達(dá)0X40(若再減少一次則T6位變?yōu)?,產(chǎn)生復(fù)位)時(shí)此位由硬件置1,且需用軟件清0,注意無(wú)論中斷是否使能此位都會(huì)被硬件置1。 而提前喚醒中斷使能設(shè)置是在配置寄存器(WWDG_CFR)第9位EWI(Early wakeup interrupt),此位需由軟件置1,則會(huì)在當(dāng)遞減計(jì)數(shù)器CNT的值到達(dá)0X40時(shí)產(chǎn)生中斷,并且與EWIF不同,此位是由硬件清0。 另外控制寄存器(WWDG_CR)中第7位WDGA(Activation bit)激活位,需用軟件來(lái)置1,以啟動(dòng)窗口看門(mén)狗,并且一旦啟動(dòng)后,只能在復(fù)位或重啟后由硬件來(lái)清0。 配置寄存器(WWDG_CFR)的第8位和第7位WDGTB[1:0]用來(lái)設(shè)置時(shí)基(Timer base)預(yù)分頻數(shù)。 以上描述可參考下圖以更清晰的理解:

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

在PCLK1頻率為36MHz 時(shí),則 上窗口時(shí)間:T_min = 4096 * (2^WDGTB)*(WWDG_CR[6:0] - WWDG_CFR[6:0])/36 (us) 下窗口時(shí)間:T_max = 4096 * (2^WDGTB)*(WWDG_CR[6:0] - 0x40)/36 (us) 。 喂狗動(dòng)作需在這段時(shí)間之間進(jìn)行,而喂狗動(dòng)作為向控制寄存器(WWDG_CR)中寫(xiě)值。 窗口看門(mén)狗中斷函數(shù)void WWDG_IRQHandler(void);是用來(lái)做什么的呢。 窗口看門(mén)狗中斷函數(shù)是在遞減計(jì)數(shù)器減少到0x40是被調(diào)用,因?yàn)樗旧碛?jì)數(shù)就比較慢,所以離數(shù)到0x3F復(fù)位還有一段時(shí)間,我認(rèn)為這樣設(shè)計(jì)是為MCU復(fù)位之前留下一點(diǎn)時(shí)間,能夠使工程設(shè)計(jì)人員根據(jù)需要在中斷函數(shù)保存一些重要的數(shù)據(jù),這樣在復(fù)位后MCU可知道系統(tǒng)因異常復(fù)位的某此狀態(tài),以使系統(tǒng)有更高穩(wěn)定性。 并且我覺(jué)得在窗口看門(mén)狗中斷函數(shù)中喂狗沒(méi)有什么意義,程序本來(lái)已經(jīng)不按正常運(yùn)行了,還在中斷函數(shù)中喂狗防止復(fù)位只會(huì)錯(cuò)上加錯(cuò),不好好利用它干點(diǎn)正事, 更是浪費(fèi)資源。 這點(diǎn)上我個(gè)人認(rèn)為不要被點(diǎn)原子示例代碼誤導(dǎo)哦,但其還是有部分借鑒意義的,以下為初始化相關(guān)代碼:

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

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

#defineCFR_EWI_BB(PERIPH_BB_BASE+(CFR_OFFSET*32)+(EWI_BitNumber*4))

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

責(zé)任編輯:YYX

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6067

    文章

    44969

    瀏覽量

    649180
  • 看門(mén)狗
    +關(guān)注

    關(guān)注

    10

    文章

    582

    瀏覽量

    71701
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5432

    瀏覽量

    124049
  • STM32
    +關(guān)注

    關(guān)注

    2291

    文章

    11026

    瀏覽量

    363775

原文標(biāo)題:STM32單片機(jī):獨(dú)立看門(mén)狗、窗口看門(mén)狗的配置

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    什么是模擬看門(mén)狗?模擬看門(mén)狗有什么用處?

    看門(mén)狗大家應(yīng)該再熟悉不過(guò)了,一旦忘記喂狗就會(huì)導(dǎo)致單片機(jī)復(fù)位,而在大部分stm32中都存在兩種類(lèi)型的看門(mén)狗,Independent watch
    的頭像 發(fā)表于 11-22 09:40 ?2358次閱讀
    什么是模擬<b class='flag-5'>看門(mén)狗</b>?模擬<b class='flag-5'>看門(mén)狗</b>有什么用處?

    51單片機(jī)看門(mén)狗電路

    51單片機(jī)看門(mén)狗電路 采用89C51單片機(jī)和X25045組成的看門(mén)狗電路,X25045硬件連接圖如圖2所示。
    發(fā)表于 01-13 08:34 ?3592次閱讀
    51<b class='flag-5'>單片機(jī)</b><b class='flag-5'>看門(mén)狗</b>電路

    單片機(jī)應(yīng)用中看門(mén)狗技術(shù)

    分析研究了單片機(jī)應(yīng)用系統(tǒng)中軟件看門(mén)狗、單雙時(shí)限和強(qiáng)制復(fù)位 看門(mén)狗 等幾種常見(jiàn)的看門(mén)狗技術(shù)及具體的實(shí)現(xiàn)方法, 從提高
    發(fā)表于 06-03 16:49 ?318次下載
    <b class='flag-5'>單片機(jī)</b>應(yīng)用中<b class='flag-5'>看門(mén)狗</b>技術(shù)

    什么是stm32看門(mén)狗?獨(dú)立看門(mén)狗和窗口看門(mén)狗工作原理解析

    stm32個(gè)看門(mén)狗,獨(dú)立看門(mén)狗和窗口看門(mén)狗,其實(shí)者的功能是類(lèi)似的,只是喂狗的限制時(shí)間不同。
    的頭像 發(fā)表于 11-06 11:48 ?2.8w次閱讀
    什么是<b class='flag-5'>stm32</b><b class='flag-5'>看門(mén)狗</b>?獨(dú)立<b class='flag-5'>看門(mén)狗</b>和窗口<b class='flag-5'>看門(mén)狗</b>工作原理解析

    STM32看門(mén)狗配置(獨(dú)立看門(mén)狗IWDG和窗口看門(mén)狗WWDG)

    stm32自帶個(gè)看門(mén)狗模塊,獨(dú)立看門(mén)狗IWDG和窗口看門(mén)狗WWDG。看門(mén)狗主要作用是可用來(lái)檢測(cè)
    發(fā)表于 11-09 17:17 ?8582次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>看門(mén)狗</b><b class='flag-5'>配置</b>(獨(dú)立<b class='flag-5'>看門(mén)狗</b>IWDG和窗口<b class='flag-5'>看門(mén)狗</b>WWDG)

    STM32看門(mén)狗配置詳情解說(shuō)

     stm32個(gè)看門(mén)狗,獨(dú)立看門(mén)狗和窗口看門(mén)狗,其實(shí)者的功能是類(lèi)似的,只是喂狗的限制時(shí)間不同
    發(fā)表于 11-13 11:17 ?4682次閱讀
    <b class='flag-5'>STM32</b>的<b class='flag-5'>看門(mén)狗</b><b class='flag-5'>配置</b>詳情解說(shuō)

    PIC單片機(jī)看門(mén)狗_看門(mén)狗定時(shí)器工作原理

    PIC系列不同型號(hào)的單片機(jī)其,看門(mén)狗設(shè)置不同,下面是以PIC16F688單片機(jī)為例。如果配置字中的WDTE=1那么后面的看門(mén)狗開(kāi)關(guān)(WDT
    發(fā)表于 05-18 01:59 ?8307次閱讀
    PIC<b class='flag-5'>單片機(jī)</b>之<b class='flag-5'>看門(mén)狗</b>_<b class='flag-5'>看門(mén)狗</b>定時(shí)器工作原理

    基于STM32、FreeRTOS 實(shí)現(xiàn)硬件看門(mén)狗+軟件看門(mén)狗監(jiān)測(cè)多任務(wù)的方法

    基于STM32、FreeRTOS實(shí)現(xiàn)硬件看門(mén)狗+軟件看門(mén)狗監(jiān)測(cè)多任務(wù)的方法
    的頭像 發(fā)表于 03-12 10:11 ?1w次閱讀

    單片機(jī)看門(mén)狗兩種:分別為獨(dú)立看門(mén)狗和窗口看門(mén)狗,它們有什么區(qū)別?資料下載

    電子發(fā)燒友網(wǎng)為你提供單片機(jī)看門(mén)狗兩種:分別為獨(dú)立看門(mén)狗和窗口看門(mén)狗,它們有什么區(qū)別?資料下載的
    發(fā)表于 04-18 08:41 ?2次下載
    <b class='flag-5'>單片機(jī)</b><b class='flag-5'>看門(mén)狗</b>有<b class='flag-5'>兩種</b>:分別為獨(dú)立<b class='flag-5'>看門(mén)狗</b>和窗口<b class='flag-5'>看門(mén)狗</b>,它們有什么<b class='flag-5'>區(qū)別</b>?資料下載

    STM32L4單片機(jī)配置STOP模式下停止看門(mén)狗計(jì)數(shù)

    STM32L4系列的單片機(jī),在stop模式或是standby模式下可以停止看門(mén)狗計(jì)數(shù)器,喚醒后,看門(mén)狗繼續(xù)計(jì)數(shù)。這樣,在單片機(jī)休眠期間,就可
    發(fā)表于 11-19 10:51 ?54次下載
    <b class='flag-5'>STM32</b>L4<b class='flag-5'>單片機(jī)</b><b class='flag-5'>配置</b>STOP模式下停止<b class='flag-5'>看門(mén)狗</b>計(jì)數(shù)

    STM32:獨(dú)立看門(mén)狗、窗口看門(mén)狗配置

    STM32單片機(jī)看門(mén)狗有獨(dú)立看門(mén)狗和窗口看門(mén)狗之分,這者的工作原理卻完全不同。
    發(fā)表于 02-08 16:15 ?18次下載
    <b class='flag-5'>STM32</b>:獨(dú)立<b class='flag-5'>看門(mén)狗</b>、窗口<b class='flag-5'>看門(mén)狗</b>的<b class='flag-5'>配置</b>

    基于STM32單片機(jī)窗口看門(mén)狗使用庫(kù)文件設(shè)計(jì)

    基于STM32單片機(jī)窗口看門(mén)狗使用庫(kù)文件設(shè)計(jì)源代碼
    發(fā)表于 04-26 14:46 ?0次下載

    基于STM32單片機(jī)獨(dú)立看門(mén)狗實(shí)驗(yàn)使用庫(kù)文件設(shè)計(jì)

    基于STM32單片機(jī)獨(dú)立看門(mén)狗實(shí)驗(yàn)使用庫(kù)文件設(shè)計(jì)源代碼
    發(fā)表于 04-26 14:43 ?0次下載

    獨(dú)立看門(mén)狗的一點(diǎn)經(jīng)驗(yàn)

    stm32基本都內(nèi)置兩種看門(mén)狗(另外還有外置的看門(mén)狗芯片),窗口看門(mén)狗和獨(dú)立看門(mén)狗,
    的頭像 發(fā)表于 05-24 16:00 ?1573次閱讀
    獨(dú)立<b class='flag-5'>看門(mén)狗</b>的一點(diǎn)經(jīng)驗(yàn)

    STM32單片機(jī)看門(mén)狗配置方法

    SATM32單片機(jī)看門(mén)狗有獨(dú)立看門(mén)狗和窗口看門(mén)狗之分,這者的工作原理卻完全不同,今天來(lái)看一下他們的具體
    的頭像 發(fā)表于 06-22 09:07 ?3536次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>看門(mén)狗</b>的<b class='flag-5'>配置</b><b class='flag-5'>方法</b>