電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>STM32窗口看門狗(WWDG)開源

STM32窗口看門狗(WWDG)開源

2022-11-14 | zip | 12.74 MB | 次下載 | 5積分

資料介紹

描述

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 的快照形式。

pYYBAGNxJheAd3IjAABJUnczUSI010.png
?

在這個項目中,我們將配置和測試這些案例。

  • 情況 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。

poYBAGNxJh2AGoiMAAHNqqQwXGA131.png
?

讓我們了解這些 WWDG 時鐘參數(shù)。

pYYBAGNxJiCAJmFMAABexVZadKI023.png
?
poYBAGNxJiKAfqEWAACHTJvYDxY647.png
?

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)在讓我們配置這個窗口。請在下面找到圖片。

poYBAGNxJiSAONr3AAAvX2IqWR8858.png
STM32F401RE參考手冊中的WWDG時序圖
?

突出顯示的 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。

pYYBAGNxJieAOYqtAABQ6NhAIKA063.png
?

現(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)。我們將在稍后部分討論它。

poYBAGNxJiqAUjdxAADko0JneZM911.png
STM32CubeMX項目經(jīng)理視角
?
pYYBAGNxJiyAVrcwAAAvF3LV_f4722.png
?

選擇 Open project 并打開 Keil MDK IDE。如下圖所示,打開main.c文件。

pYYBAGNxJjGAFAmEAAH3kcbvyz0416.png
Keil MDK-main.c
?

構(gòu)建項目,看看沒有錯誤。

右鍵單擊看門狗初始化函數(shù)并選擇轉(zhuǎn)到定義。

static void MX_WWDG_Init(void);

請注意,參數(shù)與我們在 CubeMX 中指定的一樣。

poYBAGNxJjOASlfUAAB_tuQzCk8580.png
?

也可以隨意查看源文件stm32f4xx_it.c,用于 EXTI(外部中斷/事件控制器)例程。目前我們還沒有配置任何中斷。在后面的部分中,我們將更深入地了解它。

poYBAGNxJjWAS2E2AAH7FI6gZFA955.png
?

部署和測試:

無需浪費太多時間,只需構(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ù)位。

CN4- Pin 5 is NRST

請參閱下面的兩張圖片以供參考。

pYYBAGNxJjeAbYCxAAA1ovjMUFI308.png
來自 Schematics 的快照
?
pYYBAGNxJjqALhNdAAGJJKr-mxY034.png
?

打開 Digilent 波形。我已經(jīng)為通道 1 配置了一些測量選項 - x 光標(biāo),這將有助于我們查看復(fù)位發(fā)生的頻率。

poYBAGNxJjyAJJyOAAHXnXcyfEI559.png
?

構(gòu)建項目并點擊調(diào)試按鈕。

讓我們從 RCC 外設(shè)監(jiān)控 CRC 寄存器。窗口看門狗復(fù)位標(biāo)志 (WWDGRRSTF) 和刪除復(fù)位標(biāo)志 (RMVF) 在 CRC 寄存器中很重要。詳情請閱讀 STM32 MCU 參考手冊。為了方便起見,我剛剛提供了這兩個 RCC_CRC 寄存器的圖像。

pYYBAGNxJj-AEESUAAFGwN4hEsU548.png
?

?

poYBAGNxJkKAenljAAEBTXTIpmA919.png
?

回到凱爾..

pYYBAGNxJkSAZVejAAF6m6yyGPc927.png
?
poYBAGNxJkaAUZYBAADioIQC2dY569.png
?

代碼仍然停止。您會注意到我們設(shè)置了一些重置標(biāo)志。在繼續(xù)進行干凈設(shè)置之前清除所有重置。

Click RMVF bit

Hit運行 (F5) 啟動程序

poYBAGNxJkiACMRRAACHnHcHza0281.png
?

您將立即看到 WWDGRSTF 設(shè)置。

pYYBAGNxJkuAQnhOAABJLPrCujU403.png
?

我們可以看到,正如預(yù)期的那樣,每 ca 都會切換一次重置線。52 毫秒。

poYBAGNxJk6ATBTgAAIFr6FunU8461.png
?

案例二:

讓我們撫摸我們的狗,讓它不叫。好的..我的意思是讓我們在窗口中刷新我們的 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)刷新看門狗。

pYYBAGNxJlGASQBqAAGwNp1d95w914.png
?

結(jié)果..應(yīng)該有由WWDG觸發(fā)的任何重置。讓我們構(gòu)建項目并檢查它..

按照與之前相同的步驟構(gòu)建項目并在調(diào)試模式下打開它。設(shè)置 RMVF 位以清除復(fù)位標(biāo)志并運行程序。您應(yīng)該看到 WWDGRSTF 標(biāo)志始終是清除的。

poYBAGNxJlOAD9YMAAC-sRRBsJ0526.png
?
pYYBAGNxJlWARPl2AAGhkLBBfvQ050.png
?

沒有重置。我們的狗很高興:)

案例3:

我們將過早刷新 WWDG 并檢查是否觸發(fā)了重置。

將延遲值從 30ms 修改為小于 tNoRefr (25.74ms) 的任何值。

我選擇 15 毫秒。

結(jié)果:

pYYBAGNxJliASPSWAAIedGntqSM669.png
?

由于我們很快就會刷新 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,如下所示。

poYBAGNxJlqAGRvWAACN9WmKzKQ575.png
?

這還不夠。我們需要在 NVIC 設(shè)置中啟用看門狗中斷。如果不啟用全局看門狗中斷,僅啟用 EWI 不起作用,因為中斷將無法通過中斷控制器-NVIC。我強烈建議您閱讀參考手冊中的 EXTI 部分以了解更多詳細(xì)信息,因為這超出了本文的范圍。

poYBAGNxJlyAKi9aAADZX38gOvs857.png
?

保存項目并構(gòu)建。這次當(dāng)您切換回 Keil 時,它應(yīng)該會詢問您文件是否已更新以及是否要加載它們。說,是的。

pYYBAGNxJl-ADfopAAG6o6_Onrc056.png
?

現(xiàn)在你應(yīng)該在你的 Keil 項目中擁有最新的文件。轉(zhuǎn)到文件 stm32f4xx_it.c。您將在最后看到添加了這段額外的代碼(在紅色框中)。它是 WWDG 中斷處理程序。

poYBAGNxJmGALCAvAAGfGXuFRMM630.png
?

轉(zhuǎn)到 HAL_WWDG_IRQHandler(&hwwdg); 藍(lán)色框中指示的定義。

pYYBAGNxJmSAPRinAAIF4sG6ekA013.png
?

我們可以看到啟用了早期喚醒回調(diào)并為我們創(chuàng)建了 __weak 函數(shù)。復(fù)制該函數(shù)并將其粘貼到 main.c 并刪除 __weak。這就是我們將編寫例程以切換板載綠色 LED 以查看 ISR 是否在啟動復(fù)位之前執(zhí)行的地方。請參閱下圖,指示它必須在 main.c 中復(fù)制的位置。在所有外設(shè)初始化功能完成后以及在用戶代碼開始和結(jié)束之間執(zhí)行此操作。

pYYBAGNxJmaAXaK7AAIg0E5alpg823.png
?

讓我們從函數(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

poYBAGNxJmmAMikBAAIlUAYFcik989.png
?
poYBAGNxJmyAaYfpAAHUmvjpYdQ638.png
?

我們可以看到中斷是在大約生成的。復(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。如果您有任何問題,請告訴我。我很高興聽到您的反饋。感謝您的閱讀!


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應(yīng)用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關(guān)電源設(shè)計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅(qū)動電路設(shè)計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學(xué)會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費