RM新时代网站-首页

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

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

3天內(nèi)不再提示

淺談STM8S_008_WDG獨(dú)立看門(mén)狗和窗口看門(mén)狗

黃工的嵌入式技術(shù)圈 ? 來(lái)源:黃工的嵌入式技術(shù)圈 ? 2020-03-20 09:39 ? 次閱讀

Ⅰ寫(xiě)在前面

STM8S看門(mén)狗WDG分為兩類(lèi):

IWDG:Independent WatchDog獨(dú)立看門(mén)狗

WWDG:Window WatchDog窗口看門(mén)狗

獨(dú)立看門(mén)狗模塊可以用于解決處理器因?yàn)?a href="http://hljzzgx.com/v/tag/1751/" target="_blank">硬件或軟件的故障所發(fā)生的錯(cuò)誤。它由一個(gè)內(nèi)部的128kHz的LSI阻容振蕩器作為時(shí)鐘源驅(qū)動(dòng),因此即使是主時(shí)鐘失效時(shí)它仍然照常工作。

窗口看門(mén)狗用于監(jiān)測(cè)由于外部干擾或不可預(yù)知的邏輯條件所產(chǎn)生的軟件錯(cuò)誤,這樣的軟件錯(cuò)誤通常會(huì)導(dǎo)致應(yīng)用程序不按照預(yù)期的方式運(yùn)行。

大概意思主要是:IWDG主要防止硬件問(wèn)題引起的復(fù)位,WWDG主要防止軟件問(wèn)題引起的復(fù)位.

為方便大家閱讀,本文內(nèi)容已經(jīng)整理成PDF文件:

http://pan.baidu.com/s/1i5uWhJR

Ⅱ看門(mén)狗知識(shí)

1.看門(mén)狗結(jié)構(gòu)圖

STM8S的獨(dú)立看門(mén)狗IWDG比窗口看門(mén)狗WWDG結(jié)構(gòu)看起來(lái)要簡(jiǎn)單一點(diǎn),其實(shí)寄存器都只有那么兩個(gè),軟件配置起來(lái)也比較簡(jiǎn)單。不管是獨(dú)立還是窗口看門(mén)狗,自己看結(jié)構(gòu)圖基本就能理解到它們。具體請(qǐng)看下面結(jié)構(gòu)圖進(jìn)行對(duì)比。

獨(dú)立看門(mén)狗IWDG結(jié)構(gòu)圖:

當(dāng)向下計(jì)數(shù)器“8-bit down-counter”等于0時(shí),就會(huì)產(chǎn)生看門(mén)狗復(fù)位“WDG reset”。因此,就需要在計(jì)數(shù)器等于0之前通過(guò)重載寄存器“IWDG_RLR”更新計(jì)數(shù)器的值。

窗口看門(mén)狗WWDG結(jié)構(gòu)圖:

窗口看門(mén)狗有兩地方會(huì)引起復(fù)位:

1.當(dāng)7位(T[6:0])遞減計(jì)數(shù)器從0x40翻轉(zhuǎn)到0x3F(T6位清零)時(shí)。這種和上面IWDG類(lèi)似,遞減到“0”就會(huì)復(fù)位。

2.當(dāng)更新的計(jì)數(shù)值大于窗口值(T6:0 > W6:0)時(shí)。

這兩種復(fù)位的情況如下圖:

2.IWDG獨(dú)立看門(mén)狗功能

當(dāng)在鍵寄存器(IWDG_KR)中寫(xiě)入數(shù)值0xCC后,獨(dú)立看門(mén)狗就被啟動(dòng)了,計(jì)數(shù)器開(kāi)始從它的復(fù)位值0xFF開(kāi)始遞減計(jì)數(shù),當(dāng)計(jì)數(shù)減到0x00時(shí)就會(huì)產(chǎn)生一個(gè)復(fù)位信號(hào)(WDG RESET)。

如果在IWDG_HW選擇字節(jié)中使能了硬件看門(mén)狗的功能,在芯片上電時(shí)看門(mén)狗的功能被自動(dòng)開(kāi)啟,如果軟件不能及時(shí)操作鍵寄存器,則在計(jì)數(shù)器達(dá)到0x00時(shí)產(chǎn)生復(fù)位。

看門(mén)狗復(fù)位的超時(shí)值是由你的配置(分頻值和計(jì)數(shù)值)決定的,大概如下(默認(rèn)LSI = 128 kHz 會(huì)隨溫度變化有所偏差):

3.WWDG獨(dú)立看門(mén)狗功能

● 可編程的自由運(yùn)行遞減計(jì)數(shù)器

● 有條件的復(fù)位

─ 如果開(kāi)啟了看門(mén)狗,當(dāng)遞減計(jì)數(shù)器的數(shù)值小于 0x40 時(shí)產(chǎn)生復(fù)位

─ 如果開(kāi)啟了看門(mén)狗,當(dāng)在指定的時(shí)間窗口之外重加載遞減計(jì)數(shù)器的數(shù)值時(shí)產(chǎn)生復(fù)位

● 硬件或軟件啟動(dòng)看門(mén)狗(由選擇字節(jié)指定)

● 可在HALT指令時(shí)產(chǎn)生復(fù)位(由選擇字節(jié)配置)

● 開(kāi)啟看門(mén)狗:

如果(通過(guò)選擇字節(jié))選擇了軟件看門(mén)狗,在系統(tǒng)復(fù)位后看門(mén)狗處于關(guān)閉狀態(tài)。設(shè)置WDGCR寄存器中的WDGA位將開(kāi)啟看門(mén)狗,隨后在下次復(fù)位之前將不能關(guān)閉看門(mén)狗。

如果(通過(guò)選擇字節(jié))選擇了硬件看門(mén)狗,看門(mén)狗將始終開(kāi)啟,而WDGA位將不起作用。

● 控制遞減計(jì)數(shù)器:

遞減計(jì)數(shù)器是自由運(yùn)行計(jì)數(shù)器:即使未開(kāi)啟看門(mén)狗,它依然不斷地遞減計(jì)數(shù)。當(dāng)開(kāi)啟看門(mén)狗時(shí),必須設(shè)置T6位以避免立刻產(chǎn)生復(fù)位。

T[5:0]位中包含了看門(mén)狗產(chǎn)生復(fù)位前允許的時(shí)間延遲;因?yàn)閷?xiě)入WDGCR寄存器時(shí),預(yù)分頻器的狀態(tài)是不可知的,所以這個(gè)時(shí)間延遲介于一個(gè)最小和最大數(shù)值之間。

窗口寄存器(WDGWR)的數(shù)值是指定窗口的高限:為防止復(fù)位,必須在遞減計(jì)數(shù)器的數(shù)值小于窗口寄存器的數(shù)值并大于0x3F時(shí)刷新遞減計(jì)數(shù)器。

提示: T6位可以用于產(chǎn)生一個(gè)軟件復(fù)位(即設(shè)置WDGA位同時(shí)清除T6位

● 在停止時(shí)產(chǎn)生看門(mén)狗復(fù)位

如果開(kāi)啟了看門(mén)狗,并且選擇了停止時(shí)產(chǎn)生看門(mén)狗復(fù)位的選項(xiàng),則執(zhí)行HALT指令將產(chǎn)生復(fù)位。

Ⅲ軟件工程源代碼

1、關(guān)于工程

本文提供兩個(gè)版本的工程代碼:

STM8S-A08_IWDG獨(dú)立看門(mén)狗

STM8S-A08_WWDG窗口看門(mén)狗

本文提供的工程代碼是基于前面軟件工程“STM8S-A04_UART基本收發(fā)數(shù)據(jù)”增加WDG看門(mén)狗修改而來(lái)。初學(xué)的朋友可以參看我前面對(duì)應(yīng)的基礎(chǔ)文章,那些文章講的比較詳細(xì)。

2.IWDG獨(dú)立看門(mén)狗代碼分析

A.IWDG_Initializes初始化

voidIWDG_Initializes(void)

{

IWDG_Enable();

IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

IWDG_SetPrescaler(IWDG_Prescaler_256);

IWDG_SetReload(250);

IWDG_ReloadCounter();

}

預(yù)分頻值為IWDG_Prescaler_256,參數(shù)為枚舉類(lèi)型:

typedef enum

{

IWDG_Prescaler_4 = (uint8_t)0x00,

IWDG_Prescaler_8 = (uint8_t)0x01,

IWDG_Prescaler_16 = (uint8_t)0x02,

IWDG_Prescaler_32 = (uint8_t)0x03,

IWDG_Prescaler_64 = (uint8_t)0x04,

IWDG_Prescaler_128 = (uint8_t)0x05,

IWDG_Prescaler_256 = (uint8_t)0x06

} IWDG_Prescaler_TypeDef;

重裝計(jì)數(shù)值為8位寄存器,最大255,我們?cè)O(shè)置為250.

我在初始化看門(mén)狗時(shí),將復(fù)位超時(shí)值設(shè)置為1000ms,具體計(jì)算為如下:

128K/2 = 64K (輸入時(shí)鐘)

64K / 256 = 250(分頻后時(shí)鐘)

250 / 250 = 1 (重載值為250)

B.功能測(cè)試代碼

voidmain(void)

{

System_Initializes();

UART1_Printf((uint8_t*)"Start...");

while(1)

{

LED_REVERSE;

TIMDelay_Nms(990);

IWDG_ReloadCounter();

}

}

第一:如果復(fù)位,會(huì)打印“Start...";

第二:我們配置復(fù)位超時(shí)值為1000ms,理論小于1000ms內(nèi)喂狗都不會(huì)復(fù)位,由于LSI有偏差,我們?cè)O(shè)定在990ms喂狗一次。

第三:修改延時(shí)值為1010,則會(huì)發(fā)現(xiàn)系統(tǒng)復(fù)位(打印“Start...")。

3.WWDG窗口看門(mén)狗代碼分析

A.WWDG_Initializes初始化

#define WWDG_WINDOW_VALUE 0x7F //窗口值

#define WWDG_COUNTER_INIT 0x7F //計(jì)數(shù)值

voidWWDG_Initializes(void)

{

WWDG_Init(WWDG_COUNTER_INIT, WWDG_WINDOW_VALUE);

}

為了方便測(cè)試,我們這里將窗口值和計(jì)數(shù)值定義為宏,范圍:0x40 - 0x7F.

B.功能測(cè)試代碼

voidmain(void)

{

System_Initializes();

UART1_Printf((uint8_t*)"Start...");

WWDG_Initializes();

while(1)

{

LED_REVERSE;

TIMDelay_Nms(49);

WWDG_SetCounter(WWDG_COUNTER_INIT);

}

}

第一:同理,如果復(fù)位,會(huì)打印“Start...";

第二:我們配置復(fù)位超時(shí)值為49.152ms,如果這個(gè)延時(shí)大于49(設(shè)定為50及以上),就會(huì)復(fù)位(打印“Start...")。

第三:如果我們修改延時(shí)值(假如為T(mén)IMDelay_Nms(10);),修改窗口值為#define WWDG_WINDOW_VALUE 0x4F。則不在喂狗窗口范圍內(nèi),會(huì)發(fā)現(xiàn)系統(tǒng)復(fù)位(打印“Start...")。

提醒大家:多測(cè)試驗(yàn)證才能更容易理解和記住功能的要點(diǎn)。

下載

STM8S資料

http://pan.baidu.com/s/1o7Tb9Yq

軟件源代碼工程兩版本(STM8S-A08_xWDGxx看門(mén)狗):

http://pan.baidu.com/s/1c2EcRo0

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 看門(mén)狗
    +關(guān)注

    關(guān)注

    10

    文章

    560

    瀏覽量

    70789
  • STM8S
    +關(guān)注

    關(guān)注

    16

    文章

    149

    瀏覽量

    31407
  • IWDG
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

    5211
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    請(qǐng)問(wèn)如何關(guān)閉獨(dú)立看門(mén)狗

    ic是cs32l015. 使用HAL_FWDT_STOP(&h_FWDT);加__HAL_RCC_FWDT_CLK_DISABLE();無(wú)法使看門(mén)狗停止工作,會(huì)一直在深度休眠時(shí)喚醒IC。請(qǐng)問(wèn)怎么關(guān)閉看門(mén)狗
    發(fā)表于 11-26 18:03

    看門(mén)狗定時(shí)器的工作原理

    看門(mén)狗定時(shí)器是一種獨(dú)立的計(jì)時(shí)器硬件模塊,其核心功能是倒計(jì)時(shí)。如果系統(tǒng)軟件在計(jì)時(shí)器超時(shí)前沒(méi)有對(duì)其進(jìn)行復(fù)位操作(即“喂狗”),看門(mén)狗將觸發(fā)一個(gè)預(yù)定義的動(dòng)作,通常是系統(tǒng)復(fù)位或中斷。
    的頭像 發(fā)表于 10-21 14:18 ?403次閱讀
    <b class='flag-5'>看門(mén)狗</b>定時(shí)器的工作原理

    Sitara AM6442 RTI看門(mén)狗調(diào)試

    電子發(fā)燒友網(wǎng)站提供《Sitara AM6442 RTI看門(mén)狗調(diào)試.pdf》資料免費(fèi)下載
    發(fā)表于 08-27 11:26 ?0次下載
    Sitara AM6442 RTI<b class='flag-5'>看門(mén)狗</b>調(diào)試

    STM8S103K3看門(mén)狗死機(jī)的原因?

    最近在用STM8S103K3芯片,寫(xiě)了個(gè)程序,發(fā)現(xiàn)開(kāi)啟看門(mén)狗之后,進(jìn)行仿真調(diào)式時(shí),程序就死機(jī)了 下面是我的看門(mén)狗配置程序 //須先啟動(dòng)看門(mén)狗,然后才能配置
    發(fā)表于 05-14 07:00

    【GD32F470紫藤派開(kāi)發(fā)板使用手冊(cè)】第七講 FWDG-看門(mén)狗實(shí)驗(yàn)

    通過(guò)本實(shí)驗(yàn)主要學(xué)習(xí)以下內(nèi)容: 獨(dú)立看門(mén)狗的原理 獨(dú)立看門(mén)狗功能介紹 實(shí)現(xiàn)獨(dú)立看門(mén)狗功能
    的頭像 發(fā)表于 05-11 10:13 ?1103次閱讀
    【GD32F470紫藤派開(kāi)發(fā)板使用手冊(cè)】第七講 FWDG-<b class='flag-5'>看門(mén)狗</b>實(shí)驗(yàn)

    【GD32H757Z海棠派開(kāi)發(fā)板使用手冊(cè)】第七講 FWDG-看門(mén)狗實(shí)驗(yàn)

    通過(guò)本實(shí)驗(yàn)主要學(xué)習(xí)以下內(nèi)容: 獨(dú)立看門(mén)狗的原理 獨(dú)立看門(mén)狗功能介紹 實(shí)現(xiàn)獨(dú)立看門(mén)狗功能
    的頭像 發(fā)表于 05-10 09:37 ?754次閱讀
    【GD32H757Z海棠派開(kāi)發(fā)板使用手冊(cè)】第七講 FWDG-<b class='flag-5'>看門(mén)狗</b>實(shí)驗(yàn)

    軟件看門(mén)狗和硬件看門(mén)狗的區(qū)別

    系統(tǒng)出現(xiàn)了故障或死鎖,軟件看門(mén)狗會(huì)自動(dòng)重啟系統(tǒng)或執(zhí)行其他預(yù)定義的操作。軟件看門(mén)狗通常用于嵌入式系統(tǒng)中,可以方便地進(jìn)行編程和控制。硬件看門(mén)狗則是一種獨(dú)立的硬件設(shè)備,它與計(jì)算機(jī)主板上的芯片
    的頭像 發(fā)表于 04-16 15:10 ?1069次閱讀

    窗口看門(mén)狗的系列處理器監(jiān)控電路TPS3813xxx數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《帶窗口看門(mén)狗的系列處理器監(jiān)控電路TPS3813xxx數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 04-07 10:29 ?0次下載
    帶<b class='flag-5'>窗口</b><b class='flag-5'>看門(mén)狗</b>的系列處理器監(jiān)控電路TPS3813xxx數(shù)據(jù)表

    TLF35584中集成的看門(mén)狗工作應(yīng)用案例

    看門(mén)狗輸入引腳 WDI 具有集成的下拉電流 IWDI 。看門(mén)狗輸入 WDI 可以在“Closed Window”內(nèi)或隨后的“Open Window”期間轉(zhuǎn)換為高電平。
    發(fā)表于 03-18 11:27 ?3824次閱讀
    TLF35584中集成的<b class='flag-5'>看門(mén)狗</b>工作應(yīng)用案例

    具有窗口看門(mén)狗的汽車(chē)處理器監(jiān)控電路TPS3813-Q1數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《具有窗口看門(mén)狗的汽車(chē)處理器監(jiān)控電路TPS3813-Q1數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 03-14 10:10 ?0次下載
    具有<b class='flag-5'>窗口</b><b class='flag-5'>看門(mén)狗</b>的汽車(chē)處理器監(jiān)控電路TPS3813-Q1數(shù)據(jù)表

    具有可編程復(fù)位延遲功能的 TPS3430 窗口看門(mén)狗計(jì)時(shí)器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《具有可編程復(fù)位延遲功能的 TPS3430 窗口看門(mén)狗計(jì)時(shí)器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 03-13 14:42 ?2次下載
    具有可編程復(fù)位延遲功能的 TPS3430 <b class='flag-5'>窗口</b><b class='flag-5'>看門(mén)狗</b>計(jì)時(shí)器數(shù)據(jù)表

    調(diào)試模式下如何調(diào)試看門(mén)狗?

    大家在調(diào)試GD32 MCU系統(tǒng)的時(shí)候,若開(kāi)了看門(mén)狗外設(shè),是否會(huì)碰到進(jìn)入調(diào)試模式看門(mén)狗就會(huì)咬造成無(wú)法調(diào)試的問(wèn)題?
    的頭像 發(fā)表于 02-23 09:30 ?1254次閱讀
    調(diào)試模式下如何調(diào)試<b class='flag-5'>看門(mén)狗</b>?

    求助,關(guān)于看門(mén)狗定時(shí)器的喂狗時(shí)間和多APP看門(mén)狗的問(wèn)題求解

    參考例程,在看門(mén)狗定時(shí)器時(shí)間的配置上,我看到如下函數(shù): /* Step 3- Write match value */ #if(WDT_DEMO == WDT_INTERRUPT_DEMO
    發(fā)表于 02-21 06:50

    什么是看門(mén)狗?如何實(shí)現(xiàn)對(duì)系統(tǒng)程序的監(jiān)控?

    看門(mén)狗通過(guò)定時(shí)器計(jì)數(shù)器和相關(guān)的控制邏輯來(lái)實(shí)現(xiàn)功能。在系統(tǒng)正常運(yùn)行時(shí),定時(shí)器會(huì)以固定的時(shí)間間隔重復(fù)計(jì)數(shù),如果系統(tǒng)一切正常,那么定時(shí)器會(huì)定期被重置。
    的頭像 發(fā)表于 02-02 15:58 ?2468次閱讀

    ADUC7024的看門(mén)狗能不能在看門(mén)狗定時(shí)沒(méi)有到之前,將看門(mén)狗給關(guān)了啊?

    ADUC7024的看門(mén)狗能不能在看門(mén)狗定時(shí)沒(méi)有到之前(即沒(méi)有復(fù)位之前),將看門(mén)狗給關(guān)了?。?/div>
    發(fā)表于 01-15 08:17
    RM新时代网站-首页