精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

STM32看門狗定時器的工作原理和作用 看門狗定時器的特性

冬至子 ? 來源:舊巷聞書 ? 作者:駱駝聽海 ? 2023-07-27 16:30 ? 次閱讀

看門狗定時器(WDT,Watch Dog Timer)是單片機的一個組成部分,它實際上是一個計數器,一般來說都是向下計數的,給看門狗一個數字,程序開始運行后看門狗開始倒計數。如果程序運行正常,過一段時間CPU應發出指令讓看門狗復位(在計數器減到0之前),重新開始倒計數。如果看門狗減到0就認為程序沒有正常工作,強制整個系統復位。本節將對看門狗定時器的工作原理和作用進行詳細講解。

看門狗的主要功能是在發生系統軟件故障時,將系統復位。也可以用于將系統從休眠或空閑模式喚醒。一般在嵌入式開發中,整個程序都是在次循環往復不停的工作,正常運行期間會定時讓看門狗復位,一旦程序發生故障,停在某一處,看門狗不能及時復位,計數器減到0,就會強制整個系統復位,一般情況下復位操作能解決大部分問題。

用戶開發的產品很有可能運用到一些非常極端苛刻的環境中,容易發生故障,但是通過復位就能解決,如果人工復位,成本相當高,這時候看門狗的使用就非常有效了。

圖片

STM32結合安全度、計時精確度和易用性提供了IWDG和WWDG兩種看門狗,監測軟件跑飛,或未按預想地運行的情況觸發系統復位或產生中斷(中斷僅針對窗口看門狗)

獨立看門狗IWDG:專用時鐘LSI(內部低速時鐘),低功耗模式仍可運行,對定時的控制比較松,由于專門為其提供獨立的時鐘,因此稱為獨立看門狗。

窗口看門狗WWDG:總線時鐘APB1,對定時控制比較嚴,要求主應用程序在規定時間窗口內喂狗。

獨立看門狗IWDG工作原理框圖分析

圖片

獨立看門狗本質上就是一個計數定時器,既然是定時器,就和普通定時器的工作原理差不多,仍然包含計數器,重裝載寄存器等關鍵部件。計數器遞減的速度取決于時鐘的頻率,獨立看門狗使用專用內部低速時鐘,大小為32KHz。當計數器減到0后會觸發一個復位異常,進行系統的重啟。為了不讓計數器減到0,在程序中每過一段時間都要進行喂狗操作,喂狗操作就是刷新遞減計數器CNT的值,就是把重裝載值再次刷進計數器中。狀態寄存器是用來指示預分頻器和重載寄存器更新的狀態。

1.獨立看門狗的時鐘:STM32F4 的獨立看門狗由內部專門的 32Khz 低速時鐘(LSI)驅動,即使主時鐘發生故障,它也仍然有效。這里需要注意獨立看門狗的時鐘是一個內部RC時鐘(RC振蕩器典型的缺陷就是比較容易受環境的影響,且精確地不高),所以并不是準確的32Khz,而是在 15~47Khz 之間的一個可變化的時鐘,只是我們在估算的時候(之所以要估算時間是因為用戶要確保計數器減到0 之前喂狗),以 32Khz 的頻率來計算,看門狗對時間的要求不是很精確,所以,時鐘有些偏差,都是可以接受的。

圖片

2.預分頻器:分頻之后的時鐘才是真正驅動遞減計數器的時鐘。寄存器中只有低3位有效,不同的位組合表示不同的分頻系數。

圖片

3.重載寄存器:低12位有效,最大值位2的12次方。只有在關鍵字寄存器中寫入AAAAh時,重載寄存器厚葬的值才會自動裝載到看門狗計數器中。

圖片

4.關鍵字寄存器:用來控制獨立看門狗,寫入不同的值執行不同的命令。正常情況下PR和PLR是不可寫的,具有寫保護,需要通過寫入關鍵字寄存器值來解除寫保護。另外一旦通過關鍵字寄存器啟動看門狗,看門狗計數,將不會再停止,除非硬件復位,默認情況下看門狗關閉,所以正常情況下不輕易使用看門狗,否則系統會產生出乎意料的復位,造成損失。

圖片

5.狀態寄存器:低2位有效,更新時一定要確定相應位為0才可以更新。

圖片

IWDG的超時時間

以預分頻器分頻系數為32為例,計數器的時鐘頻率為1KHz,每個脈寬的時間間隔為1ms,當計數器的值為最小值1時,則最短超時時間為1ms,當當計數器的值為最大值0xFFF時,最長超時時間為2的12次方乘以1ms為4096ms。因此用戶可根據下表設置正確的超時時間防止看門狗復位。

圖片

IWDG獨立看門狗實例

實驗要求:開啟STM32的獨立看門狗,按鍵按下即喂狗,如果超時未喂狗,則看門狗復位系統,用指示燈指示系統復位。

步驟:

1.配置RCC

圖片

圖片

2.使能并配置IWDG

圖片

3.配置按鍵管腳為輸入模式。

圖片

4.編寫代碼

//mian.c 




#include "main.h" 
#include "stm32f4xx_hal.h" 
#include "iwdg.h" 
#include "usart.h" 
#include "gpio.h" 
int main(){    
  HAL_Init();    
  SystemClock_Config();        
  MX_GPIO_Init();    
  MX_USART1_UART_Init();    
  MX_IWDG_Init();    
  printf("this is iwdg testn");    

  HAL_GPIO_WritePin(GPIOF,  GPIO_PIN_7, GPIO_PIN_SET);//默認指示燈熄滅    
  HAL_Delay(500);    
  HAL_GPIO_WritePin(GPIOF,  GPIO_PIN_7, GPIO_PIN_RESET);    
  //指示燈亮,如果系統復位,指示燈就會熄滅0.5s后再次亮起    
  while(){        
      //********************************        
      //********************************        
      //********************************        
      //正常情況下喂狗操作之前有很多用戶程序        
      //現在使用按鍵手動喂狗以便觀察現象        
      if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET) {            
          HAL_IWDG_Refresh(&hiwdg);            
          //喂狗操作,將重載計數器的值再次裝填到計數器中 ,防止復位 }        
      } 
}

窗口看門狗WWDG剖析

窗口看門狗(WWDG)通常被用來監測由外部干擾或不可預見的邏輯條件造成的應用程序背離正常的運行序列而產生的軟件故障。

圖片

遞減計數器的值在 T6 位(WWDG->CR 的第六位)變成 0 前被刷新,看門狗電路在達到預置的時間周期時,會產生一個 MCU 復位。WWDG->CR滿載時為1111111,即0x7F,滿載隨著時鐘減1,當減到1000000,即0x40時,如果再減1變為0x3F之前計數器沒有被刷新(喂狗),則會產生 MCU 復位。由0x40變為0x3F第六為由1變為0,也就是第6為變為0之前計數器必須被刷新。0x40就是下窗口

在遞減計數器達到窗口配置寄存器(WWDG->CFR)數值之前,如果 7 位的遞減計數器數值(在控制寄存器中)被刷新, 那么也將產生一個 MCU 復位。也就是計數器在減到窗口配置寄存器(WWDG->CFR)中設定的數值之前被刷新(喂狗),就會就會產生 MCU 復位。這個數值就是上窗口

二者分別設定了一個喂狗的時間下限和一個喂狗的時間上限,中間形成了一個喂狗的窗口,因而稱為窗口看門狗。這樣對喂狗的時間有了更加精確的定位,要求也更嚴格。

WWDG的特性

圖片

可配置的時間窗,用來檢測應用程序非預期中的運行流程(過早或過晚),上窗口的值可配置范圍為0x40-0x7F(64-127)

看門狗復位條件:①使能了看門狗的情況下,自減計數器值小于0x40。② 使能了看門狗的情況下,喂狗時間大于上窗口的值

計數器值=0x40時可以使能一個早期喚醒中斷(EWI),因為再減下去即將產生復位,如果有些數據還不保存就來不及了,可以在中斷處理中做一些緊急保護的事情或者刷新看門狗計數器。

窗口看門狗WWDG工作原理框圖分析

圖片

①窗口看門狗時鐘:窗口看門狗時鐘來自 PCLK1,也就是來自APB1,是主系統時鐘,PCLK1 最大是 42M,由 RCC 時鐘控制器開啟。一旦主系統時鐘崩潰,窗口看門狗就無法工作。

②計數器時鐘:計數器時鐘由 CK計時器時鐘經過預分頻器分頻得到,WDG分頻器仍然有一些分頻系數供用戶選擇,分頻系數由配置寄存器 CFR 的位 8:7 WDGTB[1:0]配置。

圖片

③計數器:窗口看門狗的計數器是一個遞減計數器,共有 7 位,其值存在控制寄存器CR 的位 6:0,即 T[6:0],當 7 個位全部為 1時是 0X7F,這個是最大值,當遞減到 T6 位變成 0時,即從0X40 變為 0X40時候,會產生看門狗復位。這個值 0X40 是看門狗能夠遞減到的最小值,當遞減計數器遞減到 0X40 的時候,還不會馬上產生復位,如果使能了提前喚醒中斷:CFR 位 9 EWI 置 1,則產生提前喚醒中斷,如果真進入了這個中斷的話,就說明程序肯定是出問題了,那么在提前喚醒中斷的處理程序中我們就需要做最重要的工作,比如保存重要數據,或者報警等,這個中斷我們也叫它死前中斷。但是這個中斷的處理時間只有0X40減到0X3F的一個CLK的時長。

④窗口值:下窗口的值是固定的0X40,上窗口的值可以改變,具體的由配置寄存器CFR 的位 6:0 W[6:0]設置。其值必須大于 0X40(十進制為64),如果小于或者等于 0X40就是失去了窗口的價值,而且也不能大于計數器的值,所以必須得小于 0X7F(十進制為127)。如何設置窗口值需要根據我們需要監控的程序的運行時間來決定。如果我們要監控的程序段 A 運行的時間為 Ta,當執行完這段程序之后就要進行喂狗,如果在窗口時間內沒有喂狗的話,那程序就肯定是出問題了。一般計數器的值TR設置成最大 0X7F,窗口值為 WR,計數器減一個數的時間為 T,那么時間:(TR-WR)*T 應該稍微小于 Ta即可。

窗口看門狗WWDG實例

實驗要求:開啟STM32的窗口看門狗,并使能喚醒中斷。主程序正常運行時喂狗,用按鍵中斷模擬程序故障死機,此時將觸發喚醒中斷并產生復位,用LED燈指示喚醒中斷的觸發。

達到0X40會觸發早期喚醒中斷,但是再次減1就會產生系統復位,因此中斷處理的事件就是1個CLK的持續時間,不同的分頻系數,CLK的持續時間不同,總體來說早期喚醒中斷的時間事件相當短,這個過程中只能做一些非常緊急的操作。

步驟:

1.配置RCC

圖片

2.配置LED燈管腳,設為輸出模式

圖片

3.配置按鍵中斷管腳,設為外部中斷模式

圖片

4.使能并配置WWDG

圖片

5.中斷配置

圖片

6.編寫代碼

//main.c 


#include "main.h" 
#include "stm32f4xx_hal.h" 
#include "usart.h" 
#include "wwdg.h" 
#include "gpio.h" 
int main(){    
    uint8_t wr, tr;    
    HAL_Init();    
    SystemClock_Config();        
    MX_GPIO_Init();    
    MX_USART1_UART_Init();    
    MX_WWDG_Init();    
    printf("this is wwdg testn");    
    HAL_GPIO_WritePin(GPIOF, GPIO_PIN_7, GPIO_PIN_SET);//初始時指示燈熄滅
    wr = WWDG- >CFR & 0x7f ;//獲取上窗口的值
    while(){
        tr = WWDG- >CR & 0x7f;//獲取當前計數器的值
        if(tr < wr){   //計數器的值小于上窗口的值,進行喂狗
        //沒有復位說明大于下窗口的值,不需要判斷
            HAL_WWDG_Refresh(&hwwdg);  //刷新計數器的值,喂狗
        }    
    }
}
//gpio.c 


//重寫按鍵中斷(外部中斷)的中斷處理回調函數 
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {    
    if(GPIO_Pin == GPIO_PIN_0) {         
        printf("程序故障n"); 
        while(1); //死循環,模擬故障死機    
     } 
}
//wwdg.c 


//重寫提前喚醒中斷的中斷處理回調函數 
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef* hwwdg) {     
    HAL_GPIO_WritePin(GPIOF, GPIO_PIN_7, GPIO_PIN_RESET); //LED亮     
    printf("EarlyWakeup INTn");    
    //提前喚醒中斷處理的時間非常有限,串口信息很有可能打印不完整 
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 看門狗定時器

    關注

    0

    文章

    38

    瀏覽量

    16243
  • STM32F4
    +關注

    關注

    3

    文章

    194

    瀏覽量

    27991
  • 狀態寄存器
    +關注

    關注

    0

    文章

    38

    瀏覽量

    7073
  • WWDG
    +關注

    關注

    0

    文章

    19

    瀏覽量

    5500
  • IWDG
    +關注

    關注

    0

    文章

    21

    瀏覽量

    5195
收藏 人收藏

    評論

    相關推薦

    一文詳解看門狗定時器

    看門狗定時器由獨立的1 Mhz 片內振蕩驅動。這是VCC = 5V 時的典型值。請參見特性數據以了解其他VCC 電平下的典型值。通過設置看門狗
    發表于 09-02 16:40 ?3945次閱讀
    一文詳解<b class='flag-5'>看門狗</b><b class='flag-5'>定時器</b>

    看門狗電路的作用

    看門狗電路的作用      看門狗電路其實是一個獨立的定時器,有一個定時器控制寄存
    發表于 01-12 12:00 ?8572次閱讀
    <b class='flag-5'>看門狗</b>電路的<b class='flag-5'>作用</b>

    內部與外部看門狗定時器的比較

    摘要:本文對內部(集成在處理內部)看門狗定時器(WTD)與外部(基于硬件) WDT的優勢和劣勢進行了對比。內部看門狗便于設計,但容易失效。MAXQ2000微控制
    發表于 05-02 10:34 ?4600次閱讀

    看門狗定時器的設計、工作原理看門狗定時器的操作

    看門狗定時器(WDT,Watch Dog Timer)是單片機的一個組成部分,它實際上是一個計數,一般給看門狗一個數字,程序開始運行后看門狗
    發表于 05-23 09:14 ?7632次閱讀
    <b class='flag-5'>看門狗</b><b class='flag-5'>定時器</b>的設計、<b class='flag-5'>工作原理</b>及<b class='flag-5'>看門狗</b><b class='flag-5'>定時器</b>的操作

    看門狗定時器作用

    看門狗復位,重新開始倒計數。如果看門狗減到0就認為程序沒有正常工作,強制整個系統復位。 看門狗定時器的操作過程 使用時,WDT將遞增,直到
    發表于 10-20 14:41 ?6668次閱讀

    dsp看門狗定時器作用解析

    看門狗在外圍監控DSP中軟件的運行以及硬件的操作,當CPU出現故障時,看門狗將執行系統復位。如果軟件進入了一個不正確的循環或者CPU出現暫時的混亂,看門狗定時器將出現溢出來使系統復位。
    發表于 11-21 16:52 ?1.4w次閱讀
    dsp<b class='flag-5'>看門狗</b><b class='flag-5'>定時器</b>的<b class='flag-5'>作用</b>解析

    基于VxWorks的看門狗定高效定時機制設計實現

    VxWorks提供了一個看門狗定時器(watchDog timer),它由以下四個函數維護: wdCreate( ) 創建并初始化一個看門狗定時器;wdDelete( ) 終止并
    發表于 03-06 09:22 ?4756次閱讀
    基于VxWorks的<b class='flag-5'>看門狗</b>定高效<b class='flag-5'>定時</b>機制設計實現

    TB3123 - PIC?單片機的窗口看門狗定時器

    窗口看門狗定時器(Windowed Watchdog Timer,WWDT)是PIC單片機的增強型看門狗定時器。該定時器是PIC單片機現有
    發表于 03-26 14:35 ?0次下載
    TB3123 - PIC?單片機的窗口<b class='flag-5'>看門狗</b><b class='flag-5'>定時器</b>

    什么是看門狗定時器?為何看門狗定時器如此重要?

    的MCU故障可能無意中使看門狗定時器喪失功用,因此整合看門狗可能不會總是按預期的方式運作。同樣地,雖然軟件以內部看門狗能夠偵測所有凍結或停機的方式編寫,但是,采取額外的步驟以冗余方式監
    的頭像 發表于 08-29 08:13 ?2.4w次閱讀
    什么是<b class='flag-5'>看門狗</b><b class='flag-5'>定時器</b>?為何<b class='flag-5'>看門狗</b><b class='flag-5'>定時器</b>如此重要?

    看門狗定時器的相關問題和實驗說明

    看門狗作用看門狗定時器是一個計數,基本功能是在發生軟件問題和程序跑飛后使系統重新啟動。看門狗
    的頭像 發表于 10-06 12:59 ?4487次閱讀
    <b class='flag-5'>看門狗</b><b class='flag-5'>定時器</b>的相關問題和實驗說明

    一文詳解微控制中的看門狗定時器

    本文介紹看門狗定時器,通常縮寫為 WDT,也稱為計算機正常運行定時器或 COP。有外部看門狗設備和內部看門狗功能。本文僅介紹內部
    的頭像 發表于 04-25 17:26 ?5003次閱讀
    一文詳解微控制<b class='flag-5'>器</b>中的<b class='flag-5'>看門狗</b><b class='flag-5'>定時器</b>

    使用高速微型看門狗定時器

    在惡劣環境中使用的高速微控制應用的設計人員將使用看門狗定時器來防止軟件失控。DS80C320高速微控制集成了看門狗
    的頭像 發表于 02-09 11:54 ?876次閱讀

    內部和外部看門狗定時器的比較

    本文比較了內部(與微處理集成)和外部(基于硬件)看門狗定時器(WDT)的優缺點。它解釋了內部看門狗定時器易于實現,但容易發生故障。MAXQ
    的頭像 發表于 04-03 11:15 ?2954次閱讀

    AXI時基看門狗定時器(WDT)概述

    XilinxLogiCORE IP AXI4-Lite時基看門狗定時器(WDT)是一個32位外設,提供32位自由運行時基和看門狗定時器
    的頭像 發表于 10-16 11:10 ?1134次閱讀
    AXI時基<b class='flag-5'>看門狗</b><b class='flag-5'>定時器</b>(WDT)概述

    看門狗定時器工作原理

    看門狗定時器是一種獨立的計時硬件模塊,其核心功能是倒計時。如果系統軟件在計時超時前沒有對其進行復位操作(即“喂狗”),看門狗將觸發一個預
    的頭像 發表于 10-21 14:18 ?249次閱讀
    <b class='flag-5'>看門狗</b><b class='flag-5'>定時器</b>的<b class='flag-5'>工作原理</b>