主題 | 內容 | 教學目的/擴展視頻 |
---|---|---|
看門狗 | 什么是看門狗,原理分析,啟動喂狗方法,讀標志位。 | 熟悉在程序里用看門狗。 |
師從洋桃電子,杜洋老師
📑文章目錄
- 一、看門狗應用架構分析
- 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 代碼執行流程圖
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 程序運行原理圖
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 復合監控系統架構
5.2 調試技巧
- IWDG凍結功能:在調試模式設置DBGMCU_CR寄存器
- WWDG時間測量:使用定時器捕獲喂狗脈沖
- 安全喂狗策略:
- 多任務協同喂狗
- 喂狗前進行系統自檢
- 狀態保存機制:在復位前將關鍵數據存入備份寄存器
六、常見問題解答
Q1:喂狗操作導致程序卡頓?
- 優化喂狗位置:放在主循環空閑時段
- 使用DMA或硬件自動喂狗
Q2:窗口時間計算不準確?
- 校準主時鐘源
- 使用公式:實際時間 = (4096×預分頻×(CNT-WR))/PCLK1
Q3:同時使用雙看門狗要注意什么?
- 設置不同的超時周期
- IWDG周期 > WWDG周期
- 錯開喂狗時間點
七、性能優化建議
優化方向 | 實施方法 | 預期效果 |
---|---|---|
時鐘精度 | 使用外部晶振 | 提高時間計算精度 |
喂狗策略 | 多任務協同喂狗 | 避免單點故障 |
異常處理 | 在WWDG中斷中保存系統狀態 | 提升故障診斷能力 |
功耗控制 | 在低功耗模式下調整預分頻 | 平衡監控與功耗需求 |
附:看門狗配置速查表
寄存器 | IWDG | WWDG |
---|---|---|
控制寄存器 | IWDG_KR | WWDG_CR |
預分頻寄存器 | IWDG_PR | WWDG_CFR |
重載寄存器 | IWDG_RLR | WWDG_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)