STM32看門狗應用實戰:獨立看門狗與窗口看門狗深度解析(下) | 零基礎入門STM32第九十五步

主題內容教學目的/擴展視頻
看門狗什么是看門狗,原理分析,啟動喂狗方法,讀標志位。熟悉在程序里用看門狗。

師從洋桃電子,杜洋老師


📑文章目錄

    • 一、看門狗應用架構分析
      • 1.1 系統監控流程圖
      • 1.2 雙看門狗應用場景對比
    • 二、獨立看門狗實戰解析
      • 2.1 測試程序核心代碼
      • 2.2 代碼執行流程圖
      • 2.3 關鍵參數計算
    • 三、窗口看門狗進階應用
      • 3.1 測試程序核心邏輯
      • 3.2 程序運行原理圖
      • 3.3 時間窗口參數解析
    • 四、關鍵代碼剖析
      • 4.1 獨立看門狗初始化
      • 4.2 窗口看門狗中斷處理
    • 五、擴展應用設計
      • 5.1 復合監控系統架構
      • 5.2 調試技巧
    • 六、常見問題解答
    • 七、性能優化建議
    • 八、相關資源


▲ 回顧上期🔍STM32看門狗原理與應用詳解:獨立看門狗 vs 窗口看門狗(上) | 零基礎入門STM32第九十四步


一、看門狗應用架構分析

1.1 系統監控流程圖

任務阻塞/異常
系統啟動
看門狗初始化
主循環運行
執行核心任務
定時喂狗
未及時喂狗
看門狗超時
系統復位

1.2 雙看門狗應用場景對比

特性獨立看門狗(IWDG)窗口看門狗(WWDG)
觸發條件任意時間未喂狗窗口期外喂狗/超時未喂狗
響應速度約1秒(可配置)毫秒級響應
中斷支持提供早期預警中斷
典型應用基礎系統監控實時任務時序控制

二、獨立看門狗實戰解析

2.1 測試程序核心代碼

// main.c關鍵邏輯
IWDG_Init(); // 初始化看門狗(預分頻64,重載值625)
while(1) {IWDG_Feed(); // 喂狗操作if(按鍵按下) delay_s(2); // 人為制造喂狗失敗
}

2.2 代碼執行流程圖

MCU IWDG 初始化(設置預分頻/重載值) 定期喂狗 執行正常任務 延時2秒(跳過喂狗) alt [按鍵按下] loop [主循環] 超時復位 MCU IWDG

2.3 關鍵參數計算

超時時間 = \frac{預分頻值 \times 重載值}{40} \ (ms)

示例配置:

  • 預分頻值:64(實際分頻系數=4×64=256)
  • 重載值:625
  • 理論超時時間:≈1秒

三、窗口看門狗進階應用

3.1 測試程序核心邏輯

// main.c關鍵代碼
WWDG_Init(); // 初始化窗口看門狗
while(1) {delay_ms(54); // 精確窗口時間控制WWDG_Feed();  // 窗口期內喂狗
}

3.2 程序運行原理圖

0x40
0x3F
窗口期內
主時鐘
預分頻器
7位遞減計數器
觸發中斷
系統復位
喂狗操作

3.3 時間窗口參數解析

時間窗口 = \frac{4096 \times 預分頻值 \times (CNT-WR)}{PCLK1} \ (μs)

示例配置:

  • 計數器初值(CNT):0x7F(127)
  • 窗口值(WR):0x50(80)
  • 預分頻值:8
  • PCLK1時鐘:36MHz
  • 實際窗口時間:48ms~64ms

四、關鍵代碼剖析

4.1 獨立看門狗初始化

void IWDG_Init(void) {IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);IWDG_SetPrescaler(pre);    // 設置預分頻IWDG_SetReload(rlr);       // 設置重載值IWDG_ReloadCounter();      // 重載計數器IWDG_Enable();             // 啟動看門狗
}

4.2 窗口看門狗中斷處理

void WWDG_IRQHandler(void) {WWDG_ClearFlag();          // 清除中斷標志// 緊急處理代碼// 保存系統狀態/發送警報WWDG_SetCounter(WWDG_CNT); // 重置計數器
}

五、擴展應用設計

5.1 復合監控系統架構

主任務
IWDG喂狗
實時任務
WWDG喂狗
中斷預警
異常處理
基礎監控

5.2 調試技巧

  1. IWDG凍結功能:在調試模式設置DBGMCU_CR寄存器
  2. WWDG時間測量:使用定時器捕獲喂狗脈沖
  3. 安全喂狗策略:
    • 多任務協同喂狗
    • 喂狗前進行系統自檢
  4. 狀態保存機制:在復位前將關鍵數據存入備份寄存器

六、常見問題解答

Q1:喂狗操作導致程序卡頓?

  • 優化喂狗位置:放在主循環空閑時段
  • 使用DMA或硬件自動喂狗

Q2:窗口時間計算不準確?

  • 校準主時鐘源
  • 使用公式:實際時間 = (4096×預分頻×(CNT-WR))/PCLK1

Q3:同時使用雙看門狗要注意什么?

  • 設置不同的超時周期
  • IWDG周期 > WWDG周期
  • 錯開喂狗時間點

七、性能優化建議

優化方向實施方法預期效果
時鐘精度使用外部晶振提高時間計算精度
喂狗策略多任務協同喂狗避免單點故障
異常處理在WWDG中斷中保存系統狀態提升故障診斷能力
功耗控制在低功耗模式下調整預分頻平衡監控與功耗需求

附:看門狗配置速查表

寄存器IWDGWWDG
控制寄存器IWDG_KRWWDG_CR
預分頻寄存器IWDG_PRWWDG_CFR
重載寄存器IWDG_RLRWWDG_CFR
狀態寄存器-WWDG_SR

八、相關資源

[1] 洋桃電子B站課程-STM32入門100步
[2] STM32官方文檔手冊
[3] STM32F103固件函數庫用戶手冊(中文)
[4] 看門狗原理.pptx
[5] 獨立看門狗測試程序
[6] 窗口看門狗測試程序


💬 技術討論(請在評論區留言~)

📌 下期預告:下一期將探討TIM定時器重點課程,歡迎持續關注!

點擊查閱🔍往期【STM32專欄】文章

版權聲明:本文采用[CC BY-NC-SA 4.0]協議,轉載請注明來源
實測開發版:洋桃1號開發版(基于STM32F103C8T6)
更新日志

  • v1.0 初始版本(2025-04-07)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/75835.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/75835.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/75835.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

nacos集群啟動問題

根據您的描述,Nacos集群只能啟動兩個節點,可能的原因和解決方法如下: 1. 集群配置問題 ? 原因:cluster.conf文件中可能只配置了兩個節點的地址,導致第三個節點無法加入集群。 ? 解決方法: ? 檢查每個…

【C語言】跳臺階

相信你是最棒噠!!! 一、題目描述 二、題目代碼 1.斐波那契數列 2.DFS深度搜索 總結 一、題目描述 一只青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先后次序不同算不同的結果…

指紋瀏覽器技術架構解析:高并發批量注冊業務的工程化實踐——基于分布式指紋引擎與防關聯策略的深度實現

一、技術背景與行業痛點 在跨境電商、廣告投放、問卷調查等場景中,批量注冊與多賬號矩陣運營已成為剛需。然而,主流平臺(如亞馬遜、Facebook、Google)的風控系統通過瀏覽器指紋追蹤(Canvas/WebGL/WebRTC等&#xff09…

linux基礎操作

一、系統目錄知識 /bin: bin 是 Binaries (二進制文件) 的縮寫, 這個目錄存放著最經常使用的命令。 /boot: 這里存放的是啟動 Linux 時使用的一些核心文件,包括一些連接文件以及鏡像文件。 /dev : dev 是 Device(設備) 的縮寫,…

源碼分析之Leaflet圖層控制控件Control.Layers實現原理

概述 本文將介紹Leaflet庫中最后一個組件,即圖層控制組件 Control.Layers。 源碼實現 export var Layers Control.extend({options: {collapsed: true,position: "topright",autoZIndex: true,hideSingleBase: false,sortLayers: false,sortFunction:…

Element 使用 textarea 內容實現高度自適應

在 ElInput 組件的 type"textarea" 模式下&#xff0c;你可以使用 autosize 屬性來實現內容高度自適應。當沒有內容時默認顯示 3 行&#xff0c;當有內容時根據內容動態調整高度。 代碼&#xff1a; <el-form-item v-if"item.type textarea" :rules&…

Java技術生態前沿洞察:虛擬線程引領并發革命,框架創新賦能云原生時代

Java技術生態正迎來新一輪變革浪潮。虛擬線程的落地成為高并發編程范式轉折點&#xff0c;其極低資源開銷特性在電商秒殺場景中展現出3倍吞吐量提升&#xff0c;徹底改寫傳統線程模型性能邊界。Spring Boot 3.2原生支持虛擬線程&#xff0c;結合Observation API與HTTP客戶端優化…

leetcode每日一題:替換子串得到平衡字符串

引言 今天的每日一題原題是1863. 找出所有子集的異或總和再求和&#xff0c;比較水&#xff0c;直接對于集合中的每一個元素&#xff0c;都有取或者不取2種情況&#xff0c;直接遞歸進去求和即可。更換成前幾天遇到的更有意思的一題來寫這個每日一題。 題目 有一個只含有 Q,…

node-modules-inspector 可視化node_modules

1、node_modules 每個vue的項目都有很多的依賴&#xff0c;有的是dev的&#xff0c;有的是生產的。 2、使用命令pnpx node-modules-inspector pnpx node-modules-inspector 3、node_modules可視化 4、在線體驗 Node Modules Inspector 5、github地址 https://github.com/a…

【零基礎入門unity游戲開發——動畫篇】unity舊動畫系統Animation組件的使用

考慮到每個人基礎可能不一樣&#xff0c;且并不是所有人都有同時做2D、3D開發的需求&#xff0c;所以我把 【零基礎入門unity游戲開發】 分為成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】&#xff1a;主要講解C#的基礎語法&#xff0c;包括變量、數據類型、運算符、…

Linux網絡:數據鏈路層以太網

目錄 認識數據鏈路層關于以太網1. 基本概念2. 以太網幀格式3. MAC vs IP 認識數據鏈路層 數據鏈路層 位于物理層和網絡層之間&#xff0c;其作用是將源自物理層來的數據可靠地傳輸到相鄰節點的目標主機的網絡層&#xff0c;主要通過物理介質(如以太網&#xff0c;Wi-Fi等)將數…

SpringMVC與SpringCloud的區別

SpringMVC與SpringCloud的核心區別 功能定位 ? SpringMVC&#xff1a; 基于Spring框架的Web層開發模塊&#xff0c;采用MVC&#xff08;Model-View-Controller&#xff09;模式&#xff0c;專注于處理HTTP請求、路由分發&#xff08;如DispatcherServlet&#xff09;和視圖…

使用MATIO庫寫入MATLAB結構體(struct)數據的示例程序

使用MATIO庫寫入MATLAB結構體(struct)數據的示例程序 MATIO是一個用于讀寫MATLAB數據文件(.mat)的開源C庫。下面是一個完整的示例程序&#xff0c;展示如何使用MATIO庫創建一個包含結構體數據的MAT文件。 示例程序 #include <stdio.h> #include <stdlib.h> #inc…

SSE與Streamable HTTP的區別:協議與技術實現的深度對比

引言 在現代Web開發中&#xff0c;實時數據傳輸是許多應用的核心需求&#xff0c;從聊天應用到股票市場更新&#xff0c;從游戲服務器到AI模型通信。為了滿足這一需求&#xff0c;各種技術應運而生&#xff0c;其中Server-Sent Events (SSE)和Streamable HTTP是兩種重要的實時…

【Easylive】視頻在線人數統計系統實現詳解 WebSocket 及其在在線人數統計中的應用

【Easylive】項目常見問題解答&#xff08;自用&持續更新中…&#xff09; 匯總版 視頻在線人數統計系統實現詳解 1. 系統架構概述 您實現的是一個基于Redis的視頻在線人數統計系統&#xff0c;主要包含以下組件&#xff1a; 心跳上報接口&#xff1a;客戶端定期調用以…

Linux 高級命令與常見操作:文本處理、系統管理與網絡調試

下面是一份針對已經熟悉 Linux 基礎命令的用戶所整理的「高級命令與常見操作」筆記&#xff0c;涵蓋文本處理、系統管理、網絡調試與其他常用的進階技巧。請你審核下面筆記&#xff0c;檢查是否有過時的內容&#xff0c;如有請進行替換&#xff0c;確保其符合現代化需求&#x…

使用MFC ActiveX開發KingScada控件(OCX)

最近有個需求&#xff0c;要在KingScada上面開發一個控件。 原來是用的WinCC&#xff0c;WinCC本身是支持調用.net控件&#xff0c;就是winform控件的&#xff0c;winform控件開發簡單&#xff0c;相對功能也更豐富。奈何WinCC不是國產的。 話說KingScada&#xff0c;國產組態軟…

QScrollArea 內部滾動條 QSS 樣式失效問題及解決方案

在使用 Qt 進行 UI 開發時,我們經常希望通過 QSS(Qt Style Sheets)自定義控件的外觀,比如為 QScrollArea 的內部滾動條設置特定的樣式。然而,有開發者遇到了這樣的問題:在 UI 設計器中預覽 QSS 顯示效果正常,但程序運行時卻顯示為系統默認樣式。經過反復測試和調試,最終…

使用OpenSceneGraph生成3D數據格式文件

OpenSceneGraph (OSG) 提供了多種方式來生成和導出3D數據格式文件。以下是詳細的生成方法和示例代碼&#xff1a; 一、基本文件生成方法 1. 使用osgDB::writeNodeFile函數 這是最直接的生成方式&#xff0c;支持多種格式&#xff1a; #include <osgDB/WriteFile>osg:…

JMeter接口性能測試從入門到精通

前言&#xff1a; 本文主要介紹了如何利用jmter進行接口的性能測試 1.在測試計劃中添加線程組 1.1.線程組界面中元素含義 如果點擊循環次數為永遠&#xff1a; 2.添加HTTP取樣器 2.1.填寫登錄接口的各個參數 2.2.在線程組下面增加查看結果樹 請求成功的情況&#xff1a; 請求…