溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

STM32 看門狗的示例分析

發(fā)布時(shí)間:2021-12-27 11:11:44 來(lái)源:億速云 閱讀:163 作者:小新 欄目:互聯(lián)網(wǎng)科技

這篇文章主要為大家展示了“STM32 看門狗的示例分析”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“STM32 看門狗的示例分析”這篇文章吧。

1、IWDG

1.1 獨(dú)立看門狗簡(jiǎn)介

IWDG(Independent watchdog)獨(dú)立看門狗,可以用來(lái)檢測(cè)并解決由于軟件錯(cuò)誤導(dǎo)致的故障,當(dāng)計(jì)數(shù)器到達(dá)給定的超時(shí)值時(shí),會(huì)觸發(fā)一個(gè)中斷或產(chǎn)生系統(tǒng)復(fù)位

獨(dú)立看門狗的時(shí)鐘是它專用的低速時(shí)鐘(LSI),所以它能保持工作及時(shí)主時(shí)鐘出現(xiàn)問(wèn)題。窗口看門狗的時(shí)鐘是有APB1時(shí)鐘分頻得到得到,通過(guò)可配置的時(shí)間窗口來(lái)檢測(cè)應(yīng)用程序非正常的過(guò)遲或過(guò)早的操作。

IWDG 最適合應(yīng)用于那些需要看門狗作為一個(gè)在主程序之外,能夠完全獨(dú)立工作,并且對(duì)時(shí)間精度要求較低的場(chǎng)合。 WWDG 最適合那些要求看門狗在精確計(jì)時(shí)窗口起作用的應(yīng)用程序。

1.2 獨(dú)立看門狗的特點(diǎn)

①自由運(yùn)行遞減計(jì)數(shù)器

②時(shí)鐘來(lái)自通過(guò)獨(dú)立的RC振蕩器(可以工作在待機(jī)和停止模式下)

③當(dāng)向下計(jì)數(shù)器值達(dá)到0時(shí),會(huì)產(chǎn)生復(fù)位(如果看門狗已經(jīng)激活)

1.3 獨(dú)立看門狗功能描述

STM32 看門狗的示例分析

上圖紅框顯示,看門狗功能由 VDD 電壓域供電,所以在停止模式和待機(jī)模式下仍能工作

向關(guān)鍵字寄存器(IWDG_KR)寫入0XCCCC,獨(dú)立看門狗就會(huì)啟動(dòng),計(jì)數(shù)器開(kāi)始下降從復(fù)位值0XFFF。當(dāng)計(jì)數(shù)器值到達(dá)0,會(huì)產(chǎn)生一個(gè)復(fù)位信號(hào)(獨(dú)立看門狗復(fù)位)

無(wú)論何時(shí)向關(guān)鍵字寄存器寫入0XAAAA,IWDG_RLR的數(shù)值會(huì)重載進(jìn)計(jì)數(shù)器,避免看門狗復(fù)位

1.4 硬件看門狗

如果通過(guò)器件選項(xiàng)位使能“硬件看門狗”功能,上電時(shí)將自動(dòng)使能看門狗;如果在計(jì)數(shù)器計(jì)數(shù)結(jié)束前,若軟件沒(méi)有向關(guān)鍵字寄存器寫入相應(yīng)的值,則系統(tǒng)會(huì)產(chǎn)生復(fù)位

1.5 寄存器訪問(wèn)保護(hù)

IWDG_PR 和 IWDG_RLR 寄存器具有寫訪問(wèn)保護(hù)。若要修改寄存器,必須首先對(duì) IWDG_KR寄存器寫入代碼 0x5555。而寫入其他值則會(huì)破壞該序列,從而使寄存器訪問(wèn)保護(hù)再次生效。這意味著重裝載操作(即寫入 0xAAAA)也會(huì)啟動(dòng)寫保護(hù)功能。

狀態(tài)寄存器指示預(yù)分頻值和遞減計(jì)數(shù)器是否正在被更新

1.6 調(diào)試模式

當(dāng)微控制器進(jìn)入調(diào)試模式時(shí)( Cortex?-M3 內(nèi)核停止), IWDG 計(jì)數(shù)器會(huì)根據(jù) DBG 模塊中的 DBG_IWDG_STOP 配置位選擇繼續(xù)正常工作或者停止工作

下圖是LSI在不同分頻情況下IWDG超時(shí)周期的最小值和最大值。

STM32 看門狗的示例分析

2、WWDG

2.1 簡(jiǎn)介

窗口看門狗(Window watchdog)通常被用來(lái)監(jiān)測(cè),由外部干擾或不可預(yù)見(jiàn)的邏輯條件造成的應(yīng)用程序背離正常的運(yùn)行序列而產(chǎn)生的軟件故障。除非遞減計(jì)數(shù)器的值在 T6 位變成 0 前被刷新,看門狗電路在達(dá)到預(yù)置的時(shí)間周期時(shí),會(huì)產(chǎn)生一個(gè) MCU 復(fù)位。如果在遞減計(jì)數(shù)器達(dá)到窗口寄存器值之前刷新控制寄存器中的 7 位遞減計(jì)數(shù)器值,也會(huì)產(chǎn)生 MCU 復(fù)位。這意味著必須在限定的時(shí)間窗口內(nèi)刷新計(jì)數(shù)器

2.2 窗口看門狗主要特點(diǎn)

①可編程自由向下計(jì)數(shù)器

②復(fù)位條件,激活看門狗的情況下,當(dāng)遞減計(jì)數(shù)器值小于 0x40 時(shí)復(fù)位;在窗口之外重載遞減計(jì)數(shù)器時(shí)復(fù)位。

③提前喚醒中斷 (EWI):當(dāng)遞減計(jì)數(shù)器等于 0x40 時(shí)觸發(fā)(如果已使能且看門狗已激活)

2.3 窗口看門狗功能說(shuō)明

如果窗口看門狗啟動(dòng)(WWDG_CR寄存器的WDGA位置1),7位向下計(jì)數(shù)器從0X40向0x3F滾動(dòng)(T6已經(jīng)清零),會(huì)導(dǎo)致一個(gè)復(fù)位。如果軟件重載計(jì)數(shù)器,當(dāng)計(jì)數(shù)器值大于窗口所存儲(chǔ)的值時(shí),就會(huì)產(chǎn)生復(fù)位

STM32 看門狗的示例分析

應(yīng)用程序必須在正常操作期間寫WWDG_CR寄存器去組織MCU復(fù)位。這個(gè)操作必須發(fā)生在計(jì)數(shù)器值小于窗口寄存器值。窗口寄存器值存儲(chǔ)在WWDG_CR寄存器,必須在0XFF和0XC0之間。

使能窗口看門狗

復(fù)位之后,窗口寄存器經(jīng)常是禁止的。通過(guò)設(shè)置WWDG_CR寄存器的WDGA位去使能,不能被禁止除了通過(guò)復(fù)位。

控制向下計(jì)數(shù)器

遞減計(jì)數(shù)器處于自由運(yùn)行狀態(tài):即使禁止看門狗,遞減計(jì)數(shù)器仍繼續(xù)遞減計(jì)數(shù)。當(dāng)使能看門狗時(shí),必須將 T6 位置 1,以防止立即復(fù)位

T[5:0] 位包含了看門狗產(chǎn)生復(fù)位之前的計(jì)時(shí)數(shù)目;復(fù)位前的延時(shí)時(shí)間在一個(gè)最小值和一個(gè)最大值之間變化,這是因?yàn)閷懭?WWDG_CR 寄存器時(shí),預(yù)分頻值是未知的。配置寄存器 (WWDG_CFR) 包含窗口的上限:為防止發(fā)生復(fù)位,當(dāng)遞減計(jì)數(shù)器的值低于窗口寄存器值且大于 0x3F 時(shí)必須重載

注意:可使用 T6 位產(chǎn)生軟件復(fù)位(將 WDGA 位置 1 并將 T6 位清零)

STM32 看門狗的示例分析

看門狗中斷高級(jí)特性

如果在產(chǎn)生實(shí)際復(fù)位之前必須執(zhí)行特定的安全操作或數(shù)據(jù)記錄,則可使用提前喚醒中斷(EWI)。通過(guò)設(shè)置 WWDG_CFR 寄存器中的 EWI 位使能 EWI 中斷。當(dāng)遞減計(jì)數(shù)器的值為0x40 時(shí),將生成 EWI 中斷。在復(fù)位器件之前,可以使用相應(yīng)的中斷服務(wù)程序 (ISR) 來(lái)觸發(fā)特定操作(例如通信或數(shù)據(jù)記錄)。

在某些應(yīng)用中,可以使用 EWI 中斷來(lái)管理軟件系統(tǒng)檢查和/或系統(tǒng)恢復(fù)/功能退化,而不會(huì)生成 WWDG 復(fù)位。在這種情況下,相應(yīng)的中斷服務(wù)程序 (ISR) 可用來(lái)重載 WWDG 計(jì)數(shù)器以避免 WWDG 復(fù)位,然后再觸發(fā)所需操作。

通過(guò)將 0 寫入 WWDG_SR 寄存器中的 EWIF 位來(lái)清除 EWI 中斷

2.4 如何設(shè)置看門狗超時(shí)

STM32 看門狗的示例分析

例子:APB1的頻率是24MHZ,WDGTB[1:0]設(shè)置3,T[5:0]設(shè)置成63

t = 1/24000*4096*2*2*2*(63+1)= 24.85ms

有關(guān) TWWDG 的最小值和最大值

STM32 看門狗的示例分析

2.5 調(diào)試模式

微控制器進(jìn)入調(diào)試模式時(shí)( Cortex?-M3內(nèi)核停止),WWDG計(jì)數(shù)器會(huì)根據(jù)DBG模塊中的DBG_WWDG_STOP配置位選擇繼續(xù)正常工作或者停止工作

3、區(qū)別

應(yīng)用場(chǎng)景不同

IWDG 最適合應(yīng)用于那些需要看門狗作為一個(gè)在主程序之外,能夠完全獨(dú)立工作,并且對(duì)時(shí)間精度要求較低的場(chǎng)合。

WWDG 最適合那些要求看門狗在精確計(jì)時(shí)窗口起作用的應(yīng)用程序

為什么要窗口看門狗?

對(duì)于一般的看門狗,程序可以在它產(chǎn)生復(fù)位前的任意時(shí)刻刷新看門狗,但這有一個(gè)隱患,有可能程序跑亂了又跑回到正常的地方,或跑亂的程序正好執(zhí)行了刷新看門狗操作,這樣的情況下一般的看門狗就檢測(cè)不出來(lái)了;

如果使用窗口看門狗,程序員可以根據(jù)程序正常執(zhí)行的時(shí)間設(shè)置刷新看門狗的一個(gè)時(shí)間窗口,保證不會(huì)提前刷新看門狗也不會(huì)滯后刷新看門狗,這樣可以檢測(cè)出程序沒(méi)有按照正常的路徑運(yùn)行非正常地跳過(guò)了某些程序段的情況。

以上是“STM32 看門狗的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI