<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

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

3天內不再提示

STM32速成筆記(10)—IWDG

冬至子 ? 來源:二土電子 ? 作者:二土電子 ? 2023-10-24 14:58 ? 次閱讀

一、IWDG簡介

獨立看門狗 (Independent Watchdog, IWDG ),什么是看門狗?字面意思——看門的,有陌生人來,就會叫。實際在嵌入式領域里,看門狗也是這種作用,當軟件程序發生故障或者程序跑飛時,看門狗會產生復位信號,復位系統。

二、STM32的IWDG

2.1 STM32的IWDG簡介

STM32內置兩個看門狗,提供了更高的安全性、時間的精確性和使用的靈活性。兩個看門狗設備(獨立看門狗和窗口看門狗)可用來檢測和解決由軟件錯誤引起的故障;當計數器達到給定的超時值時,觸發一個中斷(僅適用于窗口型看門狗)或產生系統復位。

獨立看門狗(IWDG)由專用的低速時鐘(LSI)驅動,即使主時鐘發生故障它也仍然有效。窗口看門狗由從APB1時鐘分頻后得到的時鐘驅動,通過可配置的時間窗口來檢測應用程序非正常的過遲或過早的操作。

IWDG最適合應用于那些需要看門狗作為一個在主程序之外,能夠完全獨立工作,并且對時間精 度要求較低的場合。WWDG最適合那些要求看門狗在精確計時窗口起作用的應用程序。

  • ? 自由運行的12位遞減計數器
  • ? 時鐘由獨立的RC振蕩器提供(可在停止和待機模式下工作)
  • ? 看門狗被激活后,則在計數器計數至0x000時產生復位

一旦使能IWDG,就無法關閉。只有等到復位之后,才能將IWDG關閉。

2.2 喂狗

通過上面的簡介可以知道,獨立看門狗實際就是一個12位的遞減計數器,當計數器的值遞減到0的時候,就會產生復位。但是,如果我們在計數值遞減到0之前,重新給計數器賦值,那么就不會再產生復位。這個操作叫做喂狗。

2.3 IWDG框圖

圖片

IWDG框圖

IWDG的框圖很好理解,IWDG由一個由獨立的RC振蕩器提供時鐘。經過一個8位的預分頻器對時鐘信號進行分頻。12位遞減計數器按照設置好的初始值和輸入時鐘遞減。當遞減計數器遞減到0時,產生獨立看門狗復位。

在產生復位之前,如果將重裝載寄存器傳遞給遞減計數器,那么就會重新開始遞減,這叫做喂狗。

鍵寄存器也叫做關鍵字寄存器,往該寄存器寫入不同的值,有不同的作用

  • ? 寫入 0x5555 ——表示允許訪問IWDG_PR和IWDG_RLR寄存器
  • ? 寫入 0xAAAA ——將重載寄存器的值傳遞到遞減計數器,也就是喂狗
  • ? 寫入 0xCCCC ——啟動獨立看門狗功能

中文參考手冊中給出了一個時間表

圖片

IWDG的溢出時間表

時間的計算方法是,時間 = 重裝載寄存器值 / (輸入時鐘頻率 / 4 * 2^預分頻系數)

為什么是4 * 2^預分頻系數,可以看一下中文參考手冊對于預分頻寄存器的描述

圖片

預分頻寄存器描述

三、IWDG配置步驟

  • ? 開啟寄存器訪問(允許訪問IWDG_PR和IWDG_RLR寄存器)

  • ? 設置IWDG預分頻系數和重裝載值

  • ? 將重裝載寄存器的值傳遞到遞減計數器(喂狗)

  • ? 開啟IWDG

    四、IWDG配置程序

    44.1 IWDG初始化程序

/*
 *==============================================================================
 *函數名稱:IWDG_Init
 *函數功能:初始化IWDG
 *輸入參數:pre:預分頻系數(0~6);rlr:重裝載值(0~0xFFF)
 *返回值:無
 *備  注:獨立看門狗復位時間計算公式:t=(4*2^pre*rlr)/40(ms)
 *==============================================================================
 */
void IWDG_Init (u8 pre,u16 rlr)
{
    IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);   // 取消寄存器寫保護
    IWDG_SetPrescaler(pre);   // 設置預分頻系數 0-6
    IWDG_SetReload(rlr);   // 設置重裝載值
    IWDG_ReloadCounter();   // 重裝載初值
    IWDG_Enable();   // 打開獨立看門狗
}

4.2 喂狗

/*
 *==============================================================================
 *函數名稱:IWDG_FeedDog
 *函數功能:喂狗
 *輸入參數:無
 *返回值:無
 *備  注:無
 *==============================================================================
 */
void IWDG_FeedDog (void)
{
    IWDG_ReloadCounter();   // 重裝載初值
}

五、應用實例

初始化IWDG,配置2s內不及時喂狗就會復位。通過按下按鍵WK UP喂狗。串口打印復位和喂狗信息。IWDG初始化程序如下

IWDG_Init(4,1250);   // 看門狗初始化,2s不及時喂狗,復位

main函數如下

u8 gKeyValue = 0;   // 記錄按鍵鍵值變量

int main(void)
{
    Med_Mcu_Iint();   // 系統初始化
    printf("復位系統rn");
    
    while(1)
  {
        gKeyValue = Med_KeyScan();   // 獲取按鍵鍵值
        
        // WK UP按下
        if (gKeyValue == 1)
        {
            IWDG_FeedDog();   // 喂狗
            printf ("喂狗rn");
        }
    }
}

效果如下

圖片

IWDG效果

按下WK UP喂狗,不會產生系統復位。

一旦2s內,未按下WK UP,就會產生系統復位。

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

    關注

    30

    文章

    5042

    瀏覽量

    117801
  • STM32
    +關注

    關注

    2240

    文章

    10675

    瀏覽量

    348929
  • IWDG
    +關注

    關注

    0

    文章

    21

    瀏覽量

    5142
  • rc振蕩器
    +關注

    關注

    3

    文章

    43

    瀏覽量

    9454
  • 獨立看門狗
    +關注

    關注

    0

    文章

    23

    瀏覽量

    3661
收藏 人收藏

    評論

    相關推薦

    STM32速成

    喲管STM32速成貼?求助
    發表于 01-23 14:34

    STM32CubeMX看門狗iwdg定時

    STM32CubeMX看門狗iwdg定時 筆記1.打開STM32cubeMX的工程文件重新配置,開啟獨立看門狗(IWDG)。2.生成報告以及
    發表于 07-30 07:17

    STM32_H750_IWDG 精選資料分享

    STM32_H750_IWDG__HAL_IWDG_START(&hiwdg1);HAL_IWDG_Refresh(&hiwdg1);iwdg時鐘32k4096/(32k/4)=512ms實測延時506ms可以正常喂狗HAL_D
    發表于 08-02 09:50

    STM32F103獨立看門狗IWDG使用筆記 精選資料分享

    本文使用STM32CubeMX1,在Pinout激活IWDG獨立看門狗2,在Configration 中點擊System-> IWDG 設置看門狗參數,我使用700ms設置如下,生成的初始化
    發表于 08-02 10:02

    STM32使用IWDG死機

    STM32使用IWDG死機嗯,不知道怎么說,stm32的看門狗死機了,下面是仿真時報錯信息:The processor has escalated a configurable-priority
    發表于 08-02 08:50

    使用HAL_IWDG庫讓IWDG工作,為什么無法在IWDG_Reset之前刷新看門狗?

    /en.STM32WB-WDG_TIMERS-Independent-Watchdog-IWDG.pdf當 RL < WINR 時,我必須刷新看門狗看門狗超時設置為 10 秒。wdgReset
    發表于 02-08 07:26

    STM32F446ZE-Nucleo-IWDG

    單片機開發板STM32F446ZE-Nucleo的開發例程IWDG
    發表于 06-03 15:48 ?8次下載

    STM32469I_EVAL-IWDG

    單片機開發板STM32469I_EVAL的開發例程STM32469I_EVAL-IWDG
    發表于 06-03 15:48 ?8次下載

    STM32各模塊學習筆記

    STM32個模塊學習筆記 目錄 STM32筆記之一 中斷優先級.....................................................1
    發表于 11-30 03:32 ?2985次閱讀

    STM32看門狗WWDG和IWDG的區別是什么

    STM32有2個看門狗:獨立看門狗和窗口看門狗。 獨立看門狗IWDG:獨立于系統之外,因為有獨立時鐘,所以不受系統影響的系統故障探測器,主要用于監視硬件錯誤。
    發表于 05-17 13:51 ?1.5w次閱讀
    <b class='flag-5'>STM32</b>看門狗WWDG和<b class='flag-5'>IWDG</b>的區別是什么

    如何解決STM32在擦除內部FLASH時間過長導致IWDG復位的問題

    客戶反饋在使用STM32F412的時候,擦除Sector 8~11發現時間過長,從而導致意外觸發IWDG復位。原因是什么?怎么避免?怎么處理?
    的頭像 發表于 01-29 11:53 ?1.5w次閱讀
    如何解決<b class='flag-5'>STM32</b>在擦除內部FLASH時間過長導致<b class='flag-5'>IWDG</b>復位的問題

    STM32擦除內部FLASH時間過長導致IWDG復位

    STM32擦除內部FLASH時間過長導致IWDG復位(嵌入式開發一般采用什么方式?)-客戶反饋在使用STM32F412的時候,擦除sector 8~11發現時間過長,從而導致意外觸發IWDG
    發表于 07-30 11:06 ?3次下載
    <b class='flag-5'>STM32</b>擦除內部FLASH時間過長導致<b class='flag-5'>IWDG</b>復位

    MCU學習筆記_IWDG獨立看門狗

    MCU學習筆記IWDG獨立看門狗1. IWDG獨立看門狗概述2. 寄存器和HAL庫函數配置3. 實例1. IWDG獨立看門狗概述看門狗,watchdog,用于檢測單片機程序運行狀態的模
    發表于 10-28 20:21 ?9次下載
    MCU學習<b class='flag-5'>筆記</b>_<b class='flag-5'>IWDG</b>獨立看門狗

    【MCU】基于STM32CubeMX 實現獨立看門狗 IWDG

    STM32F10X 獨立看門狗 IWDG1. IWDG 簡介(1)STM32F10X內置了獨立看門狗 IWDG,其可用來檢查和解決由軟件錯誤
    發表于 11-05 15:51 ?10次下載
    【MCU】基于<b class='flag-5'>STM32</b>CubeMX 實現獨立看門狗 <b class='flag-5'>IWDG</b>

    STM32核心筆記

    STM32核心筆記文章目錄STM32核心筆記1. 下載程序的兩種方式1.1 串口ISP1.2 仿真器2. 認識寄存器3. 地址總線與外設地址映射關系4. GPIO的三種配置5. 時鐘樹
    發表于 12-04 12:21 ?1次下載
    <b class='flag-5'>STM32</b>核心<b class='flag-5'>筆記</b>
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>