0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【GD32H757Z海棠派开发板使用手册】第七讲 FWDG-看门狗实验

聚沃科技 2024-05-10 09:37 次阅读
wKgZomYgeJOAUiXJAB6mQrDJGEg027.png

7.1实验内容

通过本实验主要学习以下内容:

  • 独立看门狗的原理
  • 独立看门狗功能介绍
  • 实现独立看门狗功能

7.2实验原理

7.2.1看门狗的原理

一般来说,搭配MCU产品都需要有长期运行的需求,特别像一些工业设备,可能要求运行个几年都不关机,但谁也不能保证在这几年里,MCU里面的代码不出任何问题,更何况自然环境中还存在很多电磁干扰、静电等,都可能会导致MCU出现运行异常的情况,比如程序卡死啦,进入错误状态啦等等,这个时候,我们就可以通过一个非常可爱的外设——看门狗,来帮助MCU从异常状态复位,让程序重新开始从头运行。

看门狗实际上是一个定时器,它的工作原理是:将看门狗定时器的计数器设定一个初始值,看门狗开始运行后,定时器中的计数值会在每一个计数器时钟来的时候减1,如果这个计数值减到0,看门狗就会内部给MCU一个复位信号使MCU复位。所以应用程序中必须每隔一段时间要对看门狗的计数值进行一次重载(看门狗计数器恢复到初始值),这样看门狗的计数器就不会减到0了,而当程序出现卡死的情况时,由于不再对看门狗计数器重载,看门狗就会让MCU复位,使MCU从卡死状态恢复出来。这种工作方式是不是就像一条狗,你要每隔一段时间去喂它,否则它就不给你“看门”了,“看门狗”的名字,就是这么来的。

GD32H757片上有两个看门狗外设——独立看门狗(FWDGT)和窗口看门狗(WWDGT),本章我们只讲独立看门狗。

7.2.2独立看门狗(FWDGT)的时钟

前面讲到,看门狗的计数值在每一个计数器时钟来的时候减1,那么这个时钟是什么呢,我们来看一下GD32H757的时钟树:

wKgZomY9eTmAfNFMAABg30nrbgg563.png

从时钟树可以看到,FWDGT的时钟来源于IRC32K,这是GD32H757的内部时钟,典型的频率值是32KHz。但要注意,这个IRC32K不是直接连到FWDGT计数器的,而是需要经过一个预分频器,这个分频器大小通过FWDGT_PSC进行设定。

预分频寄存器(FWDGT_PSC):

wKgaomY9eV-AOG5kAABcFQ1QEEw925.pngwKgZomY9eWiAWv51AAFYY6ZfqBc364.pngwKgaomY9eY6ASl7jAAFQREG8aQk297.png

如设定PS[2:0]为001b,那么计数器的时钟频率就为32K/8 = 4KHz,即每隔250us计数值减1。

7.2.3独立看门狗(FWDGT)的重装载

说完时钟,我们来说下FWDGT的计数器和重装载。计数器就是按照前面说的,每来一个计数器时钟,计数器减1,而计数器的初始值,来自于重装载寄存器。

重装载寄存器(FWDGT_RLD):

wKgaomY9eYaAVRGMAABaHu93Q8g730.pngwKgZomY9eaCAClk4AAJfPNzGgew320.png

从“描述”中我们可以看出,向FWDGT_CTL写入0xAAAA(即喂狗,详见用户手册FWDGT_CTL寄存器),重装载寄存器中的数值就会自动加载到FWDGT的计数器中。

重装载寄存器(FWDGT_RLD)是一个12位的计数器,这就意味着重装载最大值为65535,再结合上一节的时钟分频,FWDGT设定的最大/最小超时周期见下表:

wKgZomY9ea2AWJemAACCZdb8CSA202.pngwKgZomY9ebKAOeLxAABnxbQ4giQ363.png

注意: 当执行完喂狗reload操作之后,如需要立即进入deepsleep / standby模式时,必须通过软件设置,在reload命令及deepsleep / standby模式命令中间插入(3个以上)IRC32K时钟间隔,否则可能导致喂狗不成功。

7.2.4独立看门狗的使用注意事项

独立看门狗的时钟源来自于IRC32K,这个内部时钟实际上不是非常的准确,所以在设定看门狗重载值和分配器时需要留有一定的余量,防止应用程序由于IRC32K频率偏差而来不及喂狗,导致不必要的MCU复位。

7.3硬件设计

本实验我们通过海棠派开发板LED1的状态来指示MCU复位情况,用LED2来指示喂狗的情况。

7.4代码解析

在driver_wdgt.c中定义了独立看门狗的配置函数drive_fwdgt_config和喂狗函数Feed_fwdgt:

C
void drive_fwdgt_config(uint16_t reload_value, uint8_t prescaler_div)
{
/* 开启内部32K时钟 */
rcu_osci_on(RCU_IRC32K);
/* 等待时钟ready */
while(SUCCESS != rcu_osci_stab_wait(RCU_IRC32K)){
}
/*配置看门狗参数*/
fwdgt_config(reload_value,prescaler_div);
/*开启看门狗*/
fwdgt_enable();
}

void Feed_fwdgt(void)
{
/* 重装载计数器 */
fwdgt_counter_reload();
}

以下为main函数代码:

C
int main(void)
{
uint8_t i;
driver_init();//delay函数初始化
bsp_led_group_init();//LED初始化
bsp_led_on(&LED1);//点亮LED0
delay_ms(2000); //延时2s
bsp_led_off(&LED1);//熄灭LED0
drive_fwdgt_config(625,FWDGT_PSC_DIV64);//独立看门狗配置
/*闪烁LED1 5次,并每闪烁一次进行喂狗*/
for(i = 0;i<5;i++)
{
delay_ms(500);
bsp_led_toggle(&LED2);
Feed_fwdgt();
printf_log("Feed_fwdgt!/r/n")
}
while (1)
{
}
}

本例程main函数首先进行了延时函数初始化,再初始化LED0和LED1,并将LED0点亮2s钟后熄灭,然后配置独立看门狗时钟预分频为64分频,重载值为1000,即超时时间为625/(32K/64)= 1.25s,再每500ms翻转一次LED1,同时进行喂狗,最后进入while(1)循环。

7.5实验结果

海棠派开发板上电后,LED2灯亮,2s钟后熄灭,随后LED3闪烁5次,再经过一段时间后LED2灯灭,LED1复亮,周而复始。

教程GD32 MCU方案商聚沃科技原创发布,了解更多GD32 MCU教程,关注聚沃科技官网

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6035

    文章

    44554

    浏览量

    634651
  • 嵌入式
    +关注

    关注

    5082

    文章

    19104

    浏览量

    304815
  • 看门狗
    +关注

    关注

    10

    文章

    560

    浏览量

    70789
  • 看门狗喂狗
    +关注

    关注

    0

    文章

    3

    浏览量

    1745
收藏 人收藏

    评论

    相关推荐

    GD32开发实战指南(基础篇) 第17章 看门狗

    开发环境: MDK:Keil 5.30 开发板GD32F207I-EVAL MCU:GD32F207IK GD32 有两个
    的头像 发表于 06-03 16:00 1.1w次阅读
    <b class='flag-5'>GD</b>32<b class='flag-5'>开发</b>实战指南(基础篇) 第17章 <b class='flag-5'>看门狗</b>

    GD32H757Z海棠开发板使用手册】第十三讲 SDIO-SD卡读写实验

    通过本实验主要学习以下内容: •USB协议基本原理 •GD32H7xx USBHS的使用 •虚拟键盘的协议原理及使用
    的头像 发表于 06-06 11:26 1880次阅读
    【<b class='flag-5'>GD32H757Z</b><b class='flag-5'>海棠</b><b class='flag-5'>派</b><b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>】第十三讲 SDIO-SD卡读写<b class='flag-5'>实验</b>

    YL-51开发板使用手册

    YL-51开发板使用手册,YL-51开发板使用手册YL-51开发板使用手册YL-51
    发表于 05-10 16:31 21次下载

    51开发板使用手册

    51开发板使用手册,感兴趣的小伙伴们可以瞧一瞧。
    发表于 11-23 15:45 11次下载

    第11 独立看门狗

    这一刻的的独立看门狗实验以及使用
    发表于 02-27 16:18 1次下载

    GD32】GD32设置看门狗

    芯片:GD32F350 运行在8M目标:启动芯片看门狗,定时喂狗流程1.初始化看门狗时钟2.配置看门狗3.定时喂狗1.初始化看门狗时钟启动用
    发表于 12-02 15:36 16次下载
    【<b class='flag-5'>GD</b>32】<b class='flag-5'>GD</b>32设置<b class='flag-5'>看门狗</b>

    KC705开发板英文使用手册

    KC705开发板英文使用手册
    发表于 11-01 10:19 5次下载

    iTOP-3399开发板使用手册大更新

    iTOP-3399开发板使用手册大更新
    的头像 发表于 12-10 15:46 1354次阅读
    iTOP-3399<b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>大更新

    GD32H757Z海棠开发板使用手册】第二 GPIO-按键查询检测实验

    2.1实验内容通过本实验主要学习以下内容:GPIO输入功能原理;按键查询输入检测原理;2.2实验原理2.2.1GPIO输入功能原理GD32H7XX系列MCUGPIO输入配置结构如下图所
    的头像 发表于 04-17 10:42 725次阅读
    【<b class='flag-5'>GD32H757Z</b><b class='flag-5'>海棠</b><b class='flag-5'>派</b><b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>】第二<b class='flag-5'>讲</b> GPIO-按键查询检测<b class='flag-5'>实验</b>

    GD32H757Z海棠开发板使用手册】第五 PMU-低功耗实验

    PMU即电源管理单元,其内部结构下图所示,由该图可知,GD32H7XX系列MCU具有三个电源域,包括VDD/VDDA电源域、0.9V电源域以及电池备份域,其中,VDD /VDDA域由电源直接供电
    的头像 发表于 04-20 09:32 998次阅读
    【<b class='flag-5'>GD32H757Z</b><b class='flag-5'>海棠</b><b class='flag-5'>派</b><b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>】第五<b class='flag-5'>讲</b> PMU-低功耗<b class='flag-5'>实验</b>

    GD32F470紫藤开发板使用手册第七 FWDG-看门狗实验

    通过本实验主要学习以下内容: 独立看门狗的原理 独立看门狗功能介绍 实现独立看门狗功能
    的头像 发表于 05-11 10:13 1105次阅读
    【<b class='flag-5'>GD</b>32F470紫藤<b class='flag-5'>派</b><b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>】<b class='flag-5'>第七</b><b class='flag-5'>讲</b> <b class='flag-5'>FWDG-</b><b class='flag-5'>看门狗</b><b class='flag-5'>实验</b>

    GD32H757Z海棠开发板使用手册】第八 ADC-规则组多通道采样实验

    通过本实验主要学习以下内容: ADC的简介 GD32FH757 ADC工作原理 DMA和DMAMUX的原理 规则组多通道循环采样
    的头像 发表于 05-14 09:39 626次阅读
    【<b class='flag-5'>GD32H757Z</b><b class='flag-5'>海棠</b><b class='flag-5'>派</b><b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>】第八<b class='flag-5'>讲</b> ADC-规则组多通道采样<b class='flag-5'>实验</b>

    GD32H757Z海棠开发板使用手册】第九 USART-printf打印实验

    通过本实验主要学习以下内容: •串口简介 •GD32H757串口工作原理 •使用printf打印信息
    的头像 发表于 05-15 11:39 712次阅读
    【<b class='flag-5'>GD32H757Z</b><b class='flag-5'>海棠</b><b class='flag-5'>派</b><b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>】第九<b class='flag-5'>讲</b> USART-printf打印<b class='flag-5'>实验</b>

    GD32H757Z海棠开发板使用手册】第十一讲 SPI-SPI NOR FLASH读写实验

    通过本实验主要学习以下内容: •SPI简介 •GD32H7 SPI简介 •SPI NOR FLASH——GD25Q128ESIGR简介 •使用GD32H7 SPI接口实现对
    的头像 发表于 06-04 11:42 985次阅读
    【<b class='flag-5'>GD32H757Z</b><b class='flag-5'>海棠</b><b class='flag-5'>派</b><b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>】第十一讲 SPI-SPI NOR FLASH读写<b class='flag-5'>实验</b>

    GD32F303红枫开发板使用手册】第二十 SPI-SPI NAND FLASH读写实验

    通过本实验主要学习以下内容: •SPI通信协议,参考19.2.1东方红开发板使用手册GD32F303 SPI操作方式,参考19.2.2东方红
    的头像 发表于 06-20 09:50 886次阅读
    【<b class='flag-5'>GD</b>32F303红枫<b class='flag-5'>派</b><b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>】第二十<b class='flag-5'>讲</b> SPI-SPI NAND FLASH读写<b class='flag-5'>实验</b>