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