資料介紹
描述
STM32F401xD/E 有兩個看門狗定時器——獨立看門狗 (IWDG) 和窗口看門狗 (WWDG)。在這個項目中,我們將看到如何激活并定期撫摸狗,我的意思是刷新看門狗。此外,如果您不在窗口內撫摸您的看門狗,例如太晚或太早撫摸(刷新),我們也會看到會發生什么。
假定讀者了解 STM32CubeMX、Keil MDK、GPIO、計數器的一些知識。
理論
顧名思義,看門狗正在監視 MCU 上運行的應用程序。這是一個監控功能。如果程序執行的正常順序出現任何異常-軟件故障,看門狗會檢測到它。然后它會啟動 MCU 復位,這將有助于重新啟動軟件。
從功能的角度來看,IWGD 和 WWDG 之間有兩個主要區別。
- IWDG 不提供刷新窗口。[這意味著,IWDG 不在乎,只要在遞減計數器之前刷新它(WWDG_CR[6:0],翻轉]
- IWDG 沒有像 WWDG 那樣提供中斷服務程序 (ISR)。[這意味著,就在啟動重??置之前,會生成一個中斷,您可以在其中編寫例程以安全退出。]
與 IWDG 不同,WWDG 由 APB1 外設時鐘提供時鐘。下圖顯示了 STM32CubeMX 的快照形式。
在這個項目中,我們將配置和測試這些案例。
- 情況 1:激活 WWDG,我們不會刷新 WWDG 并通過倒計時計數器 WWDG_CR[6:0] 來檢查是否觸發了復位。我們將使用 Digilent-Analog Discovery (Legacy) 儀器監控復位線。
- 案例 2:包括我們的例程以在窗口中刷新它,并看到 WWDG 沒有啟動重置。[此時我還沒有解釋這個窗口是什么。過段時間就會熟悉]
- 案例 3:我們將過早刷新 WWDG 并檢查是否觸發了重置。
- 案例 4:我們將啟用 EWI 中斷并編寫一個程序來切換那里的板載綠色 LED。我們將在示波器上觀察到 ISR 在啟動 MCU 復位之前執行。這是 WWDG 中的一項高級功能,在 IWDG 中不可用。
啟動項目..
1. 通過板選擇器在 STM32CubeMX 中創建一個項目。有關詳細信息,請參閱附件 - “創建 STM32CubeMX 項目”。
2. 在左側窗格中,展開 - System Core 并選擇 - WWDG。將出現一個顯示 WWDG 配置的窗口。那里點擊激活。這將使用下圖中第 3 部分中顯示的默認配置激活 WWDG。
讓我們了解這些 WWDG 時鐘參數。
WWDG 計數器時鐘預分頻器:時鐘的結果值等于(PCLK1/4096)/預分頻器
- PCKL1為 APB1 時鐘(STM32F401RE 為 42MHz)
- 4096為內分頻器
[預分頻器只是一個時鐘分頻器。預分頻器越高,計數器的時鐘頻率就越低。因此計數需要更長的時間。]
讓我們選擇預分頻器為 8: (PCLK1/4096)/ 8
這導致遞減計數器的 WWDG 時鐘為 (42MHz/4096)/8 = 1281.738 Hz。因此時鐘周期(1 個時鐘周期)約為。780us
tClkWwdg = 780us
窗口:WWDG 中的這個術語是指允許刷新看門狗的時間范圍。超出該區域被解釋為軟件故障,并且 MCU 復位由 WWDG 啟動。現在讓我們配置這個窗口。請在下面找到圖片。
突出顯示的 3 個參數定義了窗口。
T[6:0] 是遞減計數器的 WWDG_CR[6:0] 寄存器。最大值為 127。一旦看門狗被激活 WWDG_CR[7] 被設置,倒計時以 tClkWWDG 的速率開始。在這種情況下,它是 780us。
W[6:0] 是 WWDG_CFR[6:0] 寄存器,用于在運行時與遞減計數器進行比較的窗口值。
0x3F 是向下計數器計數的最低限制。一旦計數器達到該值,就會觸發復位。
當遞減計數器值大于 W[6:0] 且小于 0x3F 時,服務(刷新/更新)WWDG 很重要。未能在此窗口中刷新被 WWDG 解釋為軟件故障并啟動復位。
讓我們為看門狗窗口選擇一些值。
預分頻器 = 8;W = 94; T = 127。
現在讓我們計算時間。
遞減計數器從 127 遞減到 63 所用時間為 tWWDG = tClkWWDG * (127 - 63) = 49.92ms
從遞減計數器 127 開始直到達到 94 都不允許刷新,即 tNoRefr = tClkWWDG * (127-94) = 25.74ms
在 tNoRefr 和 tWWDG 之前允許刷新。
讓我們回到 CubeMX,切換到 Project Manager 視角并選擇 Keil MDK,保存項目并點擊 - 'Generate code'。
請注意,看門狗中斷(Early Wakeup Interrupt-EWI)保持禁用狀態。我們將在稍后部分討論它。
選擇 Open project 并打開 Keil MDK IDE。如下圖所示,打開main.c文件。
構建項目,看看沒有錯誤。
右鍵單擊看門狗初始化函數并選擇轉到定義。
static void MX_WWDG_Init(void);
請注意,參數與我們在 CubeMX 中指定的一樣。
也可以隨意查看源文件stm32f4xx_it.c
,用于 EXTI(外部中斷/事件控制器)例程。目前我們還沒有配置任何中斷。在后面的部分中,我們將更深入地了解它。
部署和測試:
無需浪費太多時間,只需構建項目并將其部署到我們的 ST32F401RE Nucleo 板即可。
情況1:
由于我們尚未為 WWDG 提供服務,因此在遞減計數器達到 0x3F 后,將觸發 MCU 復位。我們將超級有用的 Digilent Analog Discovery 的示波器通道 1 連接到復位線并對其進行監控。
我們的預期是,WWDG 每大約 50 毫秒觸發一次復位。
請參閱下面的兩張圖片以供參考。
打開 Digilent 波形。我已經為通道 1 配置了一些測量選項 - x 光標,這將有助于我們查看復位發生的頻率。
構建項目并點擊調試按鈕。
讓我們從 RCC 外設監控 CRC 寄存器。窗口看門狗復位標志 (WWDGRRSTF) 和刪除復位標志 (RMVF) 在 CRC 寄存器中很重要。詳情請閱讀 STM32 MCU 參考手冊。為了方便起見,我剛剛提供了這兩個 RCC_CRC 寄存器的圖像。
?
回到凱爾..
代碼仍然停止。您會注意到我們設置了一些重置標志。在繼續進行干凈設置之前清除所有重置。
Click RMVF bit
Hit
運行 (F5) 啟動程序
您將立即看到 WWDGRSTF 設置。
我們可以看到,正如預期的那樣,每 ca 都會切換一次重置線。52 毫秒。
案例二:
讓我們撫摸我們的狗,讓它不叫。好的..我的意思是讓我們在窗口中刷新我們的 WWDG 看看會發生什么..
轉到 main.c。如果您仍處于調試模式,請退出調試透視圖。在無限的while循環中包含這段代碼。
HAL_Delay(30);
HAL_WWDG_Refresh(&hwwdg);
HAL_Delay(30) 將 MCU 暫停 30 毫秒。我們等待 30ms 并刷新 WWDG。現在可能很清楚,我們無法在 tNoRefr(25.74 毫秒)的持續時間內刷新看門狗。
結果..應該有由WWDG觸發的任何重置。讓我們構建項目并檢查它..
按照與之前相同的步驟構建項目并在調試模式下打開它。設置 RMVF 位以清除復位標志并運行程序。您應該看到 WWDGRSTF 標志始終是清除的。
沒有重置。我們的狗很高興:)
案例3:
我們將過早刷新 WWDG 并檢查是否觸發了重置。
將延遲值從 30ms 修改為小于 tNoRefr (25.74ms) 的任何值。
我選擇 15 毫秒。
結果:
由于我們很快就會刷新 WWDG,因此每 18 毫秒觸發一次重置。
案例4:
最有趣的部分。我們不應該忘記 WWDG 有一個漂亮的特性——它會在觸發休息之前產生一個中斷。這將幫助我們以安全狀態退出,比如說拍攝系統快照并存儲到 EEPROM 中。
讓我們通過啟用 EWI 中斷并編寫一個例程來切換板載綠色 LED 來檢查此功能。我們將在示波器上觀察到 ISR 在啟動 MCU 復位之前執行。這是 WWDG 中的一項高級功能,在 IWDG 中不可用。
您可以使用 CubeMX 以圖形方式啟用 EWI,如下所示。
這還不夠。我們需要在 NVIC 設置中啟用看門狗中斷。如果不啟用全局看門狗中斷,僅啟用 EWI 不起作用,因為中斷將無法通過中斷控制器-NVIC。我強烈建議您閱讀參考手冊中的 EXTI 部分以了解更多詳細信息,因為這超出了本文的范圍。
保存項目并構建。這次當您切換回 Keil 時,它應該會詢問您文件是否已更新以及是否要加載它們。說,是的。
現在你應該在你的 Keil 項目中擁有最新的文件。轉到文件 stm32f4xx_it.c。您將在最后看到添加了這段額外的代碼(在紅色框中)。它是 WWDG 中斷處理程序。
轉到 HAL_WWDG_IRQHandler(&hwwdg);
藍色框中指示的定義。
我們可以看到啟用了早期喚醒回調并為我們創建了 __weak 函數。復制該函數并將其粘貼到 main.c 并刪除 __weak。這就是我們將編寫例程以切換板載綠色 LED 以查看 ISR 是否在啟動復位之前執行的地方。請參閱下圖,指示它必須在 main.c 中復制的位置。在所有外設初始化功能完成后以及在用戶代碼開始和結束之間執行此操作。
讓我們從函數體中刪除所有內容并切換我們的板載 LED。
另外,注釋掉寫在 while(1) 無限循環中的代碼。這次我們將讓遞減計數器過去,并期望 WWDG 重置 MCU。但在此之前,我們希望它服務于我們的中斷。我們將通過每 20 毫秒切換一次 LED 來監控這一點。
請按照與之前相同的步驟構建項目并在調試模式下打開它。設置 RMVF 位以清除復位標志并運行程序。
結果:
請參閱顯示切換板載綠色 LED 的視頻-
?
示波器:
Ch1:NRST
通道 2:LED
我們可以看到中斷是在大約生成的。復位前 780us,正好是之前的一個 WWDG 時鐘周期。但是每 52ms 觸發一次復位,即只有在遞減計數器倒數到 0x3F(十進制:63)之后。
注意:如果您需要有關 STM32F4 的 HAL 庫以及如何使用它們的完整信息,請參閱手冊 UM1725。STM32F4 HAL 和底層驅動說明
結論
我們已經在各種場景下對STM32F401RE的Window看門狗進行了配置和測試。在案例 4 中,我們看到了一些非常有趣的東西。板載 LED 不是每 20 毫秒切換一次。復位迫使 LED 關閉,因為 WWDG 只給 MCU 1 個時鐘周期來做任何重要的事情。由于每 52ms 發生一次復位,我們可能會將 LED 切換誤解為我們的 ISR 例程。事實上,HAL_GPIO_TogglePin()
甚至沒有完全執行。它被重置破壞了。嘗試注釋掉HAL_Delay()
,嘗試替換HAL_GPIO_TogglePin()
to HAL_GPO_WritePin()
,看看會發生什么。
同樣在啟用 EWI 的情況下,嘗試過早刷新 WWDG 并查看是否執行了 ISR。如果您有任何問題,請告訴我。我很高興聽到您的反饋。感謝您的閱讀!
- 基于STM32單片機窗口看門狗使用庫文件設計 0次下載
- 窗口看門狗是什么?與獨立看門狗有啥區別?
- STM32:獨立看門狗、窗口看門狗的配置
- STM32L051使用HAL庫操作實例(7)-(WWDG)窗口看門狗實驗
- STM32L051使用HAL庫操作實例(6)-(IWDG)獨立看門狗實驗
- MCU學習筆記_WWDG窗口看門狗
- 【STM32】窗口看門狗
- STM32開發,使用HAL庫函數實現窗口看門狗WWDG功能
- 【MCU】基于STM32CubeMX 實現窗口看門狗 WWDG
- MCU獨立看門狗與窗口看門狗的區別
- 對于MCU看門狗IIWDG WWDG喂狗時間的配置參考
- STM32 ADC模擬看門狗及其應用
- 單片機看門狗有兩種:分別為獨立看門狗和窗口看門狗,它們有什么區別?資料下載
- STM32開發板教程之窗口看門狗(WWDG)的詳細資料概述 1次下載
- ALIENTEK_MINISTM32_實驗6_窗口看門狗實驗 4次下載
- 什么是模擬看門狗?模擬看門狗有什么用處? 1867次閱讀
- MCU如何集成看門狗的功能 1858次閱讀
- STM32單片機看門狗的配置方法 2944次閱讀
- STM32中的獨立看門狗和窗口看門狗 1416次閱讀
- STM32中的獨立看門狗和窗口看門狗 2196次閱讀
- 窗口看門狗的基礎知識 2418次閱讀
- STM32芯片如何使用片內參考電壓實現模擬看門狗 7013次閱讀
- STM32單片機中的獨立看門狗與窗口看門狗有哪些不同之處 3400次閱讀
- 一文了解STM32窗口看門狗的真正作用 3.2w次閱讀
- 一文讀懂STM32之獨立看門狗/窗口看門狗的原理 9433次閱讀
- 窗口看門狗的作用是什么?窗口看門狗復位分析 2.3w次閱讀
- STM32看門狗WWDG和IWDG的區別是什么 1.5w次閱讀
- stm32看門狗復位技巧編輯 1.5w次閱讀
- STM32看門狗配置(獨立看門狗IWDG和窗口看門狗WWDG) 8468次閱讀
- stm32看門狗時間計算 獨立看門狗和窗口看門狗的特性是什么 8789次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多