那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32單片機看門狗的配置方法

科技綠洲 ? 來源:硬件攻城獅 ? 作者:硬件攻城獅 ? 2023-06-22 09:07 ? 次閱讀

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

STM32獨立看門狗

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

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

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

poYBAGSNfPWABHYuAAFvcIAqf_k616.png

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

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

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

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

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

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

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

//時間計算(大概):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();}

喂狗可通過調用如下函數進行:

IWDG_ReloadCounter();//reload

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

獨立看門狗能夠在一定程度上監控著程序正常運行,然而我認為更加強大,應用更靈活及更能保證程序穩定運行的還屬窗口看門狗,雖然它開始時不太好理解。

▍STM32窗口看門狗

共三個寄存器,如下圖:

poYBAGSNfVKATbxvAAEyX5P8zgI969.png

看似簡單,但設置及應用起來有不少玄機。

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

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

并且7位遞減計數器CNT減少到0x3F時即T6位變為0,此時MCU也會復位,過晚了,狗餓死了。

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

狀態寄存器(WWDG_CFR) 只用到了第0位,EWIF(Early wakeup interrupt flag )是提前喚醒中斷標識,當遞減計數器CNT的值到達0X40(若再減少一次則T6位變為0,產生復位)時此位由硬件置1,且需用軟件清0,注意無論中斷是否使能此位都會被硬件置1。

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

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

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

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

pYYBAGSNfVyAQw3JAADnH3s5Z3Q100.png

窗口看門狗應用時還要注意算準最小與最大喂狗時間,以便正確地喂狗,如下:

poYBAGSNfWSABIgCAAGP_ZTRdZE007.png

在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) 。

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

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

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

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

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

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

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

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

責任編輯:彭菁

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6043

    文章

    44621

    瀏覽量

    638495
  • 看門狗
    +關注

    關注

    10

    文章

    566

    瀏覽量

    70945
  • STM32
    +關注

    關注

    2272

    文章

    10923

    瀏覽量

    357547
  • 時鐘
    +關注

    關注

    11

    文章

    1746

    瀏覽量

    131797
收藏 人收藏

    評論

    相關推薦

    STM32單片機兩種看門狗的區別和配置方法

    SATM32單片機看門狗有獨立看門狗和窗口看門狗之分,這兩者的工作原理卻完全不同,今天來看一下他們的具體區別和配置
    的頭像 發表于 10-10 11:27 ?7893次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>單片機</b>兩種<b class='flag-5'>看門狗</b>的區別和<b class='flag-5'>配置</b><b class='flag-5'>方法</b>

    51單片機看門狗電路

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

    單片機應用中看門狗技術

    分析研究了單片機應用系統中軟件看門狗、單雙時限和強制復位 看門狗 等幾種常見的看門狗技術及具體的實現方法, 從提高
    發表于 06-03 16:49 ?318次下載
    <b class='flag-5'>單片機</b>應用中<b class='flag-5'>看門狗</b>技術

    STM32看門狗配置(獨立看門狗IWDG和窗口看門狗WWDG)

    stm32自帶兩個看門狗模塊,獨立看門狗IWDG和窗口看門狗WWDG。看門狗主要作用是可用來檢測和解決由軟件錯誤引起的故障;當計數器達到給定
    發表于 11-09 17:17 ?8476次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>看門狗</b><b class='flag-5'>配置</b>(獨立<b class='flag-5'>看門狗</b>IWDG和窗口<b class='flag-5'>看門狗</b>WWDG)

    STM32看門狗配置詳情解說

     stm32有兩個看門狗,獨立看門狗和窗口看門狗,其實兩者的功能是類似的,只是喂狗的限制時間不同。獨立看門狗有自己獨立的40Khz時鐘,不存
    發表于 11-13 11:17 ?4500次閱讀
    <b class='flag-5'>STM32</b>的<b class='flag-5'>看門狗</b><b class='flag-5'>配置</b>詳情解說

    單片機看門狗定義及其作用分析

    看門狗(WDT)是一個定時器,開啟看門狗定時器之后(比如定時200ms),在單片機程序中每隔一定的時間(小于200ms)要“喂狗”一次,即將看門狗定時器清零。這樣做的用處是,一旦
    發表于 11-16 10:27 ?1.4w次閱讀

    PIC單片機看門狗_看門狗定時器工作原理

    PIC系列不同型號的單片機其,看門狗設置不同,下面是以PIC16F688單片機為例。如果配置字中的WDTE=1那么后面的看門狗開關(WDT
    發表于 05-18 01:59 ?8097次閱讀
    PIC<b class='flag-5'>單片機</b>之<b class='flag-5'>看門狗</b>_<b class='flag-5'>看門狗</b>定時器工作原理

    STM32單片機中的獨立看門狗與窗口看門狗有哪些不同之處

    1.關于看門狗的解釋不再說明,窗口看門狗簡而言之即只能看某個窗口期即某段時間內才能夠喂狗。32的獨立看門狗是沒有中斷的,而窗口看門狗可根據需要配置
    發表于 12-10 15:55 ?3409次閱讀

    使用STM32單片機實現獨立看門狗實驗的教程說明

    本文檔的主要內容詳細介紹的是使用STM32單片機實現獨立看門狗實驗的教程說明。
    發表于 01-02 08:00 ?3次下載
    使用<b class='flag-5'>STM32</b><b class='flag-5'>單片機</b>實現獨立<b class='flag-5'>看門狗</b>實驗的教程說明

    基于STM32、FreeRTOS 實現硬件看門狗+軟件看門狗監測多任務的方法

    基于STM32、FreeRTOS實現硬件看門狗+軟件看門狗監測多任務的方法
    的頭像 發表于 03-12 10:11 ?9520次閱讀

    STM32L4單片機配置STOP模式下停止看門狗計數

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

    STC單片機看門狗

    STC單片機看門狗設時鐘為11.0592MHz看門狗溢出時間 = (12 Prescale32768)/11059200 = Prescale*393216/11059200也可以在下載程序里設置
    發表于 12-23 19:22 ?10次下載
    STC<b class='flag-5'>單片機</b><b class='flag-5'>看門狗</b>

    STM32:獨立看門狗、窗口看門狗配置

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

    基于STM32單片機窗口看門狗使用庫文件設計

    基于STM32單片機窗口看門狗使用庫文件設計源代碼
    發表于 04-26 14:46 ?0次下載

    基于STM32單片機獨立看門狗實驗使用庫文件設計

    基于STM32單片機獨立看門狗實驗使用庫文件設計源代碼
    發表于 04-26 14:43 ?0次下載
    百家乐哪里可以玩| 洱源县| 金界百家乐的玩法技巧和规则 | 澳门百家乐官网下三路| KK娱乐| 永利娱乐城提款| 大发888游戏平台 df888ylcxz46| 乐中百家乐的玩法技巧和规则 | 明溪百家乐的玩法技巧和规则| 百家乐波音平台有假吗| 百家乐最新投注法| 做生意买车白色风水| 索罗门百家乐官网的玩法技巧和规则| 百家乐官网园百利宫娱乐城信誉好...| 百家乐官网网络公式| 襄汾县| 云鼎百家乐官网现金网| 肯博百家乐官网现金网| 博发百家乐官网游戏| 百家乐官网攻略投注法| 百家乐官网翻天粤| 百家乐官网斗地主在哪玩| 百家乐官网去哪里玩最好| 网络百家乐官网免费试玩| 缅甸百家乐官网博彩| 皇冠百家乐官网代理网址| 百家乐官网赢多少该止赢| 易学24山3d罗盘App| 24山在风水中的作用| 做生意适合放什么花招财| 百家乐的必赢方法| 百家乐对付抽水| 百家乐园首选海立方| 大发888娱乐场 ylc8| 循化| 百家乐官网白菜价| 百家乐官网看图赢钱| 澳门百家乐娱乐网| 大发888扑克官方下载| 大发888官方6222| 林西县|