RM新时代网站-首页

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

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

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

獨立看門狗的一點經(jīng)驗

冬至子 ? 來源:魚鷹Osprey ? 作者:魚鷹Osprey ? 2023-05-24 16:00 ? 次閱讀

stm32基本都內(nèi)置兩種看門狗(另外還有外置的看門狗芯片),窗口看門狗和獨立看門狗,兩種看門狗的使用方法和應(yīng)用場景各不相同,今天主要講講最常用的獨立看門狗(工作這么多年,沒見誰用過窗口看門狗,這種估計在時序嚴(yán)格的場合會用上)。

所謂獨立(Independent watchdog),就是該看門狗有獨立的時鐘源供看門狗使用,VIP專屬。這樣即使程序跑飛,或者主時鐘掛掉,照樣運行。但是精度嘛,你懂的(VIP用戶一般比較飄)。

所謂看門狗,外形雖然不像(一堆電子電路,肯定不像),但行為真的狗,還是一條瘋狗。為啥這么說呢?

這只狗一定要在規(guī)定以內(nèi)的時間(這個時間自己設(shè)置)喂食,超出一點都不行,否則就咬人(復(fù)位整個程序,讓你的人生重新來過)

但是瘋狗用的好,就是一條專業(yè)的好狗,比誰都敬業(yè)(雖然會有點飄哈,因此喂狗的時間不能卡太死,需要有充足的余量)。所以絕大部分產(chǎn)品都會用上看門狗,以防意外情況發(fā)生,可以有重頭再來的機(jī)會。

但是喂狗也有方法,不能隨便喂,不然狗的行為就不專業(yè)了(該復(fù)位的時候不復(fù)位)。所以需要專業(yè)的調(diào)教。

比如,喂狗的地方一般只有一個地方,并且是一定會執(zhí)行的。

裸機(jī)時,一般放主循環(huán)while(1)里面定時執(zhí)行(沒必要太頻繁)。

RTOS時,一般放在優(yōu)先級最低的任務(wù)中執(zhí)行,或者空閑任務(wù)中(使用鉤子函數(shù))。

千萬千萬不要在中斷處理程序中喂狗,因為可能你的主程序已經(jīng)跑死,中斷還好好的運行呢(如果要用中斷觸發(fā),可以在中斷處理程序中只設(shè)置一個變量標(biāo)志位,然后在另外位置判斷標(biāo)志位決定是否喂狗)。

但是看門狗只是一個預(yù)防措施,而不是一個正常行為,因此開發(fā)過程中,一定要關(guān)注看門狗是否出現(xiàn)復(fù)位現(xiàn)象,只要出現(xiàn)一次,都要揪出問題的根本原因,否則到了市場上一定會復(fù)位的。

引起程序復(fù)位的原因有很多種,比如上電、掉電,那么如何看是否由看門狗引起的呢?有個寄存器是可以看到具體原因的,比如stm32f1 (其他的可以自己查手冊)

image.png

代碼實現(xiàn):

hw_cpu_reset_flag_t hw_cpu_reset_get(void)
{
    hw_cpu_reset_flag_t temp = {.value = 0};// 自定義的一個結(jié)構(gòu)變量,方便使用

    if(RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET)
    {
       temp.flag.power = 1;
    }
    if(RCC_GetFlagStatus(RCC_FLAG_LPWRRST)!= RESET)
    {
       temp.flag.low_power = 1;
    }
    if(RCC_GetFlagStatus(RCC_FLAG_PINRST) != RESET)
    {
       temp.flag.pin_reset = 1;
    }
    if(RCC_GetFlagStatus(RCC_FLAG_SFTRST)!= RESET)
    {
       temp.flag.software_reset = 1;
    }  
    if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET)
    {
       temp.flag.independent_dog = 1;
    }
    if(RCC_GetFlagStatus(RCC_FLAG_WWDGRST)!= RESET)
    {
       temp.flag.window_dog = 1;
    }
    
    RCC_ClearFlag();//清除RCC中復(fù)位標(biāo)志

    return temp;
}

另外在調(diào)試過程中,我們可以一開始就禁用看門狗(一般在調(diào)試寄存器中)比如

DBGMCU_Config (DBGMCU_IWDG_STOP, ENABLE);

這樣即使程序因調(diào)試而長時間暫停,也不會產(chǎn)生復(fù)位,否則看門狗復(fù)位,會影響調(diào)試。

需要注意的是,即使在在線調(diào)試環(huán)境下,一旦全速運行,如果程序喂狗不及時,仍然會引起復(fù)位(這也是我們希望的,可以在調(diào)試過程中發(fā)現(xiàn)喂狗是否有問題)

如果我們的代碼已經(jīng)下載單片機(jī),但又沒用設(shè)置該位,如果你采用魚鷹之前介紹的抓現(xiàn)場環(huán)境的方法(關(guān)鍵字 顛覆認(rèn)知),那么也可能會引起看門狗的復(fù)位,因此我們既可以在寄存器界面手動設(shè)置(看你手速快不快,能不能在復(fù)位前設(shè)置),也可以通過 *.ini 文件設(shè)置該寄存器完成(建議使用該方法,不用拼手速,哈哈)

*.ini 禁用看門狗:

_WWORD (0xE0042004, 0x100); // 注意該代碼會將其它位清零??梢圆捎孟旅孢@種方式
//
DEFINE int temp;
temp = _RWORD (0xE0042004); // CSR address
temp |= 0x100;
_WWORD (0xE0042004, temp);
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 看門狗
    +關(guān)注

    關(guān)注

    10

    文章

    560

    瀏覽量

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

    關(guān)注

    31

    文章

    5336

    瀏覽量

    120230
  • RTOS
    +關(guān)注

    關(guān)注

    22

    文章

    811

    瀏覽量

    119593
  • STM32單片機(jī)
    +關(guān)注

    關(guān)注

    59

    文章

    549

    瀏覽量

    58701
  • stm32f1
    +關(guān)注

    關(guān)注

    1

    文章

    56

    瀏覽量

    12199
收藏 人收藏

    評論

    相關(guān)推薦

    獨立看門狗(IWDG)的基礎(chǔ)知識

      STM32F10xxx系列內(nèi)置兩個看門狗(獨立看門狗和窗口看門狗),提供了更高的安全性、時間的精確性和使用的靈活性。兩個看門狗設(shè)備(
    發(fā)表于 10-19 17:10 ?4250次閱讀
    <b class='flag-5'>獨立</b><b class='flag-5'>看門狗</b>(IWDG)的基礎(chǔ)知識

    STM32中的獨立看門狗和窗口看門狗是什么

    在早期的MCU中是沒有看門狗這種東西的,所以產(chǎn)品就很容易出現(xiàn)死機(jī),跑飛的情況。為了避免這種情況的出現(xiàn),后期的MCU都集成了看門狗的功能。但是目前看門狗發(fā)展到今天基本上分為兩大類:獨立
    的頭像 發(fā)表于 02-20 17:47 ?2716次閱讀
    STM32中的<b class='flag-5'>獨立</b><b class='flag-5'>看門狗</b>和窗口<b class='flag-5'>看門狗</b>是什么

    關(guān)于獨立看門狗一點經(jīng)驗

    stm32基本都內(nèi)置兩種看門狗(另外還有外置的看門狗芯片),窗口看門狗獨立看門狗,兩種看門狗
    發(fā)表于 05-09 11:18 ?634次閱讀
    關(guān)于<b class='flag-5'>獨立</b><b class='flag-5'>看門狗</b>的<b class='flag-5'>一點</b><b class='flag-5'>經(jīng)驗</b>

    關(guān)于看門狗一點經(jīng)驗程序

    關(guān)于看門狗一點經(jīng)驗程序跑飛時可以通過看門狗復(fù)位,嘗試恢復(fù)系統(tǒng)的工作,本文對stm32的Markdown和擴(kuò)展Markdown簡潔的語法代碼塊高亮圖片鏈接和圖片上傳LaTex數(shù)學(xué)公式U
    發(fā)表于 07-30 06:37

    stm32看門狗時間計算 獨立看門狗和窗口看門狗的特性是什么

    本文為您講解STM看門狗時間計算(時限)與頻率計算,獨立看門狗和窗口看門狗的特性、區(qū)別與聯(lián)系。
    發(fā)表于 10-10 10:41 ?8760次閱讀

    什么是stm32看門狗?獨立看門狗和窗口看門狗工作原理解析

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

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

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

    文讀懂STM32之獨立看門狗/窗口看門狗的原理

    STM32的獨立看門狗由內(nèi)部專門的40Khz低速時鐘驅(qū)動,即主時鐘發(fā)生故障,它也仍然有效,這里我們需要注意獨立看門狗的時鐘不是準(zhǔn)確的40Khz,二是在30~60Khz之間變化的
    發(fā)表于 05-18 01:06 ?9400次閱讀
    <b class='flag-5'>一</b>文讀懂STM32之<b class='flag-5'>獨立</b><b class='flag-5'>看門狗</b>/窗口<b class='flag-5'>看門狗</b>的原理

    淺談STM8S_008_WDG獨立看門狗和窗口看門狗

    STM8S_008_WDG獨立看門狗和窗口看門狗
    的頭像 發(fā)表于 03-20 09:39 ?5268次閱讀
    淺談STM8S_008_WDG<b class='flag-5'>獨立</b><b class='flag-5'>看門狗</b>和窗口<b class='flag-5'>看門狗</b>

    MCU獨立看門狗與窗口看門狗的區(qū)別

    早期的MCU沒有看門狗,就容易引起有些產(chǎn)品死機(jī)了不能重啟工作。為了避免這個問題,后期的MCU在內(nèi)部集成了看門狗的功能。為了滿足更多使用場景,現(xiàn)在很多MCU都集成了兩個看門狗獨立
    發(fā)表于 10-28 20:06 ?8次下載
    MCU<b class='flag-5'>獨立</b><b class='flag-5'>看門狗</b>與窗口<b class='flag-5'>看門狗</b>的區(qū)別

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

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

    窗口看門狗是什么?與獨立看門狗有啥區(qū)別?

    STM32有兩個看門狗獨立看門狗和窗口看門狗。其實兩者的功能是類似的,只是喂狗的限制時間不同。
    發(fā)表于 02-09 10:28 ?9次下載
    窗口<b class='flag-5'>看門狗</b>是什么?與<b class='flag-5'>獨立</b><b class='flag-5'>看門狗</b>有啥區(qū)別?

    STM32中的獨立看門狗和窗口看門狗

    、前言 在早期的MCU中是沒有看門狗這種東西的,所以產(chǎn)品就很容易出現(xiàn)死機(jī),跑飛的情況。為了避免這種情況的出現(xiàn),后期的MCU都集成了看門狗的功能。但是目前看門狗發(fā)展到今天基本上分為兩大
    的頭像 發(fā)表于 12-22 16:58 ?2136次閱讀

    詳解獨立看門狗的實現(xiàn)原理

    這里以大家熟悉的STM32為例給大家講解獨立看門狗的配置以及工作過程。STM32F10xxx內(nèi)置兩個看門狗獨立
    發(fā)表于 12-22 17:01 ?3236次閱讀

    STM32中的獨立看門狗和窗口看門狗

    在早期的MCU中是沒有看門狗這種東西的,所以產(chǎn)品就很容易出現(xiàn)死機(jī),跑飛的情況。為了避免這種情況的出現(xiàn),后期的MCU都集成了看門狗的功能。但是目前看門狗發(fā)展到今天基本上分為兩大類:獨立
    的頭像 發(fā)表于 01-30 14:38 ?1367次閱讀
    STM32中的<b class='flag-5'>獨立</b><b class='flag-5'>看門狗</b>和窗口<b class='flag-5'>看門狗</b>
    RM新时代网站-首页