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

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

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

【GD32F303紅楓派開發(fā)板使用手冊】第十講 FWDGT-獨立看門狗實驗

聚沃科技 ? 2024-06-08 09:45 ? 次閱讀
wKgaomZVdiiAfR9BAB3mDFhHnZc972.png

10.1實驗內(nèi)容

通過本實驗主要學(xué)習(xí)以下內(nèi)容:

  • 獨立看門狗的原理
  • 獨立看門狗功能介紹
  • 實現(xiàn)獨立看門狗功能

10.2實驗原理

10.2.1看門狗的原理

一般來說,搭配MCU產(chǎn)品都需要有長期運行的需求,特別像一些工業(yè)設(shè)備,可能要求運行個幾年都不關(guān)機(jī),但誰也不能保證在這幾年里,MCU里面的代碼不出任何問題,更何況自然環(huán)境中還存在很多電磁干擾、靜電等,都可能會導(dǎo)致MCU出現(xiàn)運行異常的情況,比如程序卡死啦,進(jìn)入錯誤狀態(tài)啦等等,這個時候,我們就可以通過一個非??蓯鄣耐庠O(shè)——看門狗,來幫助MCU從異常狀態(tài)復(fù)位,讓程序重新開始從頭運行。

看門狗實際上是一個定時器,它的工作原理是:將看門狗定時器的計數(shù)器設(shè)定一個初始值,看門狗開始運行后,定時器中的計數(shù)值會在每一個計數(shù)器時鐘來的時候減1,如果這個計數(shù)值減到0,看門狗就會內(nèi)部給MCU一個復(fù)位信號使MCU復(fù)位。所以應(yīng)用程序中必須每隔一段時間要對看門狗的計數(shù)值進(jìn)行一次重載(看門狗計數(shù)器恢復(fù)到初始值),這樣看門狗的計數(shù)器就不會減到0了,而當(dāng)程序出現(xiàn)卡死的情況時,由于不再對看門狗計數(shù)器重載,看門狗就會讓MCU復(fù)位,使MCU從卡死狀態(tài)恢復(fù)出來。這種工作方式是不是就像一條狗,你要每隔一段時間去喂它,否則它就不給你“看門”了,“看門狗”的名字,就是這么來的。

GD32F303片上有兩個看門狗外設(shè)——獨立看門狗(FWDGT)和窗口看門狗(WWDGT),本章我們只講獨立看門狗。

10.2.2獨立看門狗(FWDGT)的時鐘

前面講到,看門狗的計數(shù)值在每一個計數(shù)器時鐘來的時候減1,那么這個時鐘是什么呢,我們來看一下GD32F303ZE的時鐘樹:

wKgaomZjtxuATQtwAAA3X2hrBQM233.png

從時鐘樹可以看到,F(xiàn)WDGT的時鐘來源于IRC40K,這是GD32F303的內(nèi)部時鐘,典型的頻率值是40KHz。但要注意,這個IRC40K不是直接連到FWDGT計數(shù)器的,而是需要經(jīng)過一個預(yù)分頻器,這個分頻器大小通過FWDGT_PSC進(jìn)行設(shè)定。

預(yù)分頻寄存器(FWDGT_PSC):

wKgaomY9eV-AOG5kAABcFQ1QEEw925.pngwKgZomY9eWiAWv51AAFYY6ZfqBc364.pngwKgaomY9eY6ASl7jAAFQREG8aQk297.png

如設(shè)定PS[2:0]為001b,那么計數(shù)器的時鐘頻率就為40K/8 = 5KHz,即每隔200us計數(shù)值減1。

10.2.3獨立看門狗(FWDGT)的重裝載

說完時鐘,我們來說下FWDGT的計數(shù)器和重裝載。計數(shù)器就是按照前面說的,每來一個計數(shù)器時鐘,計數(shù)器減1,而計數(shù)器的初始值,來自于重裝載寄存器。

重裝載寄存器(FWDGT_RLD):

wKgaomY9eYaAVRGMAABaHu93Q8g730.pngwKgZomY9eaCAClk4AAJfPNzGgew320.png

從“描述”中我們可以看出,向FWDGT_CTL寫入0xAAAA(即喂狗,詳見用戶手冊FWDGT_CTL寄存器),重裝載寄存器中的數(shù)值就會自動加載到FWDGT的計數(shù)器中。

重裝載寄存器(FWDGT_RLD)是一個12位的計數(shù)器,這就意味著重裝載最大值為65535,再結(jié)合上一節(jié)的時鐘分頻,F(xiàn)WDGT設(shè)定的最大/最小超時周期見下表:

wKgZomZjt1OAVtiMAAE-5-a5kyg568.png

注意: 當(dāng)執(zhí)行完喂狗reload操作之后,如需要立即進(jìn)入deepsleep / standby模式時,必須通過軟件設(shè)置,在reload命令及deepsleep / standby模式命令中間插入(3個以上)IRC40K時鐘間隔,否則可能導(dǎo)致喂狗不成功。

10.2.4獨立看門狗的使用注意事項

獨立看門狗的時鐘源來自于IRC40K,這個內(nèi)部時鐘實際上不是非常的準(zhǔn)確,所以在設(shè)定看門狗重載值和分配器時需要留有一定的余量,防止應(yīng)用程序由于IRC40K頻率偏差而來不及喂狗,導(dǎo)致不必要的MCU復(fù)位。

10.3硬件設(shè)計

本實驗我們通過紅楓派開發(fā)板LED0的狀態(tài)來指示MCU復(fù)位情況,用LED1來指示喂狗的情況。

10.4代碼解析

10.4.1獨立看門狗初始化和喂狗函數(shù)

在driver_wdgt.c中定義了獨立看門狗的配置函數(shù)drive_fwdgt_config和喂狗函數(shù)Feed_fwdgt:

C
void drive_fwdgt_config(uint16_t reload_value, uint8_t prescaler_div)
{
/* 開啟內(nèi)部40K時鐘 */
rcu_osci_on(RCU_IRC40K);
/* 等待40K時鐘ready */
while(SUCCESS != rcu_osci_stab_wait(RCU_IRC40K)){
}
/*配置看門狗參數(shù)*/
fwdgt_config(reload_value,prescaler_div);
/*開啟看門狗*/
fwdgt_enable();
}

void Feed_fwdgt(void)
{
/* 重裝載計數(shù)器 */
fwdgt_counter_reload();
}

10.4.2main函數(shù)實現(xiàn)

以下為main函數(shù)代碼:

C
int main(void)
{
uint8_t i;
delay_init();//delay函數(shù)初始化
bsp_led_group_init();//LED初始化
bsp_led_on(&LED0);//點亮LED0
delay_ms(2000); //延時2s
bsp_led_off(&LED0);//熄滅LED0
drive_fwdgt_config(625,FWDGT_PSC_DIV64);//獨立看門狗配置
/*閃爍LED1 5次,并每閃爍一次進(jìn)行喂狗*/
for(i = 0;i<5;i++)
{
delay_ms(500);
bsp_led_toggle(&LED1);
Feed_fwdgt();
}
while (1)
{
}
}

本例程main函數(shù)首先進(jìn)行了延時函數(shù)初始化,再初始化LED0和LED1,并將LED0點亮2s鐘后熄滅,然后配置獨立看門狗時鐘預(yù)分頻為64分頻,重載值為1000,即超時時間為625/(40K/64)= 1s,再每500ms翻轉(zhuǎn)一次LED1,同時進(jìn)行喂狗,最后進(jìn)入while(1)循環(huán)。

10.5實驗結(jié)果

紅楓派開發(fā)板上電后,LED0燈亮,2s鐘后熄滅,隨后LED1閃爍5次,再經(jīng)過一段時間后LED1燈滅,LED0復(fù)亮,周而復(fù)始。

教程GD32 MCU方案商聚沃科技原創(chuàng)發(fā)布,了解更多GD32 MCU教程,關(guān)注聚沃科技官網(wǎng)

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

    關(guān)注

    6026

    文章

    44452

    瀏覽量

    630785
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    4834

    瀏覽量

    96821
  • 獨立看門狗
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    3779
  • 看門狗喂狗
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    1736
收藏 人收藏

    評論

    相關(guān)推薦

    GD32開發(fā)實戰(zhàn)指南(基礎(chǔ)篇) 第17章 看門狗

    開發(fā)環(huán)境: MDK:Keil 5.30 開發(fā)板GD32F207I-EVAL MCU:GD32F207IK GD32 有兩個
    的頭像 發(fā)表于 06-03 16:00 ?1.1w次閱讀
    <b class='flag-5'>GD</b>32<b class='flag-5'>開發(fā)</b>實戰(zhàn)指南(基礎(chǔ)篇) 第17章 <b class='flag-5'>看門狗</b>

    GD32F303】星空介紹

    一、開發(fā)板介紹星空GD開發(fā)板是由旗點科技推出的一款GD32開發(fā)板,板載
    發(fā)表于 09-11 17:55

    【星空GD32F303開發(fā)板試用體驗】開箱+環(huán)境搭建

    本帖最后由 lustao 于 2021-10-19 09:29 編輯 感謝 發(fā)燒友學(xué)院以及廣州旗點智能科技有限公司為我和孩子提供此產(chǎn)品星空GD32F303開發(fā)板。收到了星空
    發(fā)表于 10-18 14:15

    【星空GD32F303開發(fā)板試用體驗】開箱+環(huán)境搭建

    https://bbs.elecfans.com/jishu_2179209_1_1.html感謝 發(fā)燒友學(xué)院以及廣州旗點智能科技有限公司為我和孩子提供此產(chǎn)品星空gd32F303開發(fā)板。收到了星空
    發(fā)表于 11-02 15:36

    星空GD32F303開發(fā)板的相關(guān)資料下載

    一、開發(fā)板介紹星空GD開發(fā)板是由旗點科技推出的一款GD32開發(fā)板,板載
    發(fā)表于 12-10 08:27

    GD32f303工程里使用獨立看門狗

    在使用rt-thread studio建立GD32f303工程(使用board里面的f303代碼模板)。建立完畢后,使用Fwdt(獨立看門狗)的時候,在庫文件里面缺少
    發(fā)表于 07-05 11:22

    GD32F303工程中使用獨立看門狗

    在使用rt-thread studio建立GD32f303工程(使用board里面的f303代碼模板)。建立完畢后,使用Fwdt(獨立看門狗)的時候,在庫文件里面缺少
    發(fā)表于 10-11 15:38

    看門狗的基本原理和RV-STAR獨立看門狗FWDGT)的使用方法

    版或 PlatformIO IDE 硬件需求 RV-STAR開發(fā)板 看門狗定時器的基本原理 看門狗定時器實際上一個計數(shù)器,在計數(shù)溢出時會產(chǎn)生一個復(fù)位信號,正常情況下首先給
    發(fā)表于 08-16 08:13

    第11 獨立看門狗

    這一刻的的獨立看門狗實驗以及使用
    發(fā)表于 02-27 16:18 ?1次下載

    GD32H757Z海棠開發(fā)板使用手冊】第七 FWDG-看門狗實驗

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

    GD32F470紫藤開發(fā)板使用手冊】第七 FWDG-看門狗實驗

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

    GD32F303紅楓開發(fā)板使用手冊】第二 GPIO-流水燈實驗

    GD32F303系列MCU最多可支持?112?個通用I/O?引腳(GPIO),分別為?PA0 ~ PA15,?PB0 ~ PB15,?PC0 ~ PC15,PD0 ~ PD15,?PE0
    的頭像 發(fā)表于 05-29 10:02 ?1341次閱讀
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>紅楓</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊</b>】第二<b class='flag-5'>講</b> GPIO-流水燈<b class='flag-5'>實驗</b>

    GD32F303紅楓開發(fā)板使用手冊】第五 FMC-片內(nèi)Flash擦寫讀實驗

    MC即Flash控制器,其提供了片上Flash操作所需要的所有功能,在GD32F303系列MCU中,F(xiàn)lash前256K字節(jié)空間內(nèi),?CPU執(zhí)行指令零等待,具有相同主頻下最快的代碼執(zhí)行效率。FMC也
    的頭像 發(fā)表于 06-02 10:05 ?588次閱讀
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>紅楓</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊</b>】第五<b class='flag-5'>講</b> FMC-片內(nèi)Flash擦寫讀<b class='flag-5'>實驗</b>

    GD32F303紅楓開發(fā)板使用手冊第十 USART-DMA串口收發(fā)實驗

    在前面ADC章節(jié)中,我們介紹了DMA的工作原理,這里就不多做介紹。從GD32F303用戶手冊中可以查到,各串口的TX和RX分別對應(yīng)DMA的不同通道,比如USART0的TX對應(yīng)DMA0的通道3,而RX對應(yīng)DMA0的通道4。
    的頭像 發(fā)表于 06-15 09:54 ?857次閱讀
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>紅楓</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊</b>】<b class='flag-5'>第十</b>六<b class='flag-5'>講</b> USART-DMA串口收發(fā)<b class='flag-5'>實驗</b>

    GD32F303紅楓開發(fā)板使用手冊】第二十 SPI-SPI NAND FLASH讀寫實驗

    通過本實驗主要學(xué)習(xí)以下內(nèi)容: ?SPI通信協(xié)議,參考19.2.1東方紅開發(fā)板使用手冊 ?GD32F303 SPI操作方式,參考19.2.2東方紅
    的頭像 發(fā)表于 06-20 09:50 ?637次閱讀
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>紅楓</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊</b>】第二十<b class='flag-5'>講</b> SPI-SPI NAND FLASH讀寫<b class='flag-5'>實驗</b>