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

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

3天内不再提示

【GD32F303红枫派开发板使用手册】第十讲 FWDGT-独立看门狗实验

聚沃科技 2024-06-08 09:45 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

wKgaomZVdiiAfR9BAB3mDFhHnZc972.png

10.1实验内容

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

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

10.2实验原理

10.2.1看门狗的原理

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

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

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

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

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

wKgaomZjtxuATQtwAAA3X2hrBQM233.png

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

预分频寄存器(FWDGT_PSC):

wKgaomY9eV-AOG5kAABcFQ1QEEw925.pngwKgZomY9eWiAWv51AAFYY6ZfqBc364.pngwKgaomY9eY6ASl7jAAFQREG8aQk297.png

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

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

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

重装载寄存器(FWDGT_RLD):

wKgaomY9eYaAVRGMAABaHu93Q8g730.pngwKgZomY9eaCAClk4AAJfPNzGgew320.png

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

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

wKgZomZjt1OAVtiMAAE-5-a5kyg568.png

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

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

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

10.3硬件设计

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

10.4代码解析

10.4.1独立看门狗初始化和喂狗函数

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

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

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

10.4.2main函数实现

以下为main函数代码:

C
int main(void)
{
uint8_t i;
delay_init();//delay函数初始化
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次,并每闪烁一次进行喂狗*/
for(i = 0;i<5;i++)
{
delay_ms(500);
bsp_led_toggle(&LED1);
Feed_fwdgt();
}
while (1)
{
}
}

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

10.5实验结果

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

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

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

    关注

    6074

    文章

    45347

    浏览量

    663843
  • 开发板
    +关注

    关注

    25

    文章

    6139

    浏览量

    113581
  • 独立看门狗
    +关注

    关注

    0

    文章

    26

    浏览量

    4390
  • 看门狗喂狗
    +关注

    关注

    0

    文章

    3

    浏览量

    1847
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

    GD32F303】星空介绍

    一、开发板介绍星空GD开发板是由旗点科技推出的一款GD32开发板,板载
    发表于 09-11 17:55

    【星空GD32F303开发板试用体验】开箱+环境搭建

    本帖最后由 lustao 于 2021-10-19 09:29 编辑 感谢 发烧友学院以及广州旗点智能科技有限公司为我和孩子提供此产品星空GD32F303开发板。收到了星空
    发表于 10-18 14:15

    【星空GD32F303开发板试用体验】开箱+环境搭建

    https://bbs.elecfans.com/jishu_2179209_1_1.html感谢 发烧友学院以及广州旗点智能科技有限公司为我和孩子提供此产品星空gd32F303开发板。收到了星空
    发表于 11-02 15:36

    星空GD32F303开发板的相关资料下载

    一、开发板介绍星空GD开发板是由旗点科技推出的一款GD32开发板,板载
    发表于 12-10 08:27

    GD32f303工程里使用独立看门狗

    在使用rt-thread studio建立GD32f303工程(使用board里面的f303代码模板)。建立完毕后,使用Fwdt(独立看门狗)的时候,在库文件里面缺少
    发表于 07-05 11:22

    GD32F303工程中使用独立看门狗

    在使用rt-thread studio建立GD32f303工程(使用board里面的f303代码模板)。建立完毕后,使用Fwdt(独立看门狗)的时候,在库文件里面缺少
    发表于 10-11 15:38

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

    版或 PlatformIO IDE 硬件需求 RV-STAR开发板 看门狗定时器的基本原理 看门狗定时器实际上一个计数器,在计数溢出时会产生一个复位信号,正常情况下首先给
    发表于 08-16 08:13

    第11 独立看门狗

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

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

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

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

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

    GD32F303红枫开发板使用手册】第二 GPIO-流水灯实验

    GD32F303系列MCU最多可支持 112 个通用I/O 引脚(GPIO),分别为 PA0 ~ PA15, PB0 ~ PB15, PC0 ~ PC15,PD0 ~ PD15, PE0
    的头像 发表于 05-29 10:02 4543次阅读
    【<b class='flag-5'>GD32F303</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>

    GD32F303红枫开发板使用手册】第五 FMC-片内Flash擦写读实验

    MC即Flash控制器,其提供了片上Flash操作所需要的所有功能,在GD32F303系列MCU中,Flash前256K字节空间内, CPU执行指令零等待,具有相同主频下最快的代码执行效率。FMC也
    的头像 发表于 06-02 10:05 2236次阅读
    【<b class='flag-5'>GD32F303</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> FMC-片内Flash擦写读<b class='flag-5'>实验</b>

    GD32F303红枫开发板使用手册第十 USART-DMA串口收发实验

    在前面ADC章节中,我们介绍了DMA的工作原理,这里就不多做介绍。从GD32F303用户手册中可以查到,各串口的TX和RX分别对应DMA的不同通道,比如USART0的TX对应DMA0的通道3,而RX对应DMA0的通道4。
    的头像 发表于 06-15 09:54 2688次阅读
    【<b class='flag-5'>GD32F303</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>六<b class='flag-5'>讲</b> USART-DMA串口收发<b class='flag-5'>实验</b>

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

    通过本实验主要学习以下内容: •SPI通信协议,参考19.2.1东方红开发板使用手册GD32F303 SPI操作方式,参考19.2.2东方红
    的头像 发表于 06-20 09:50 2945次阅读
    【<b class='flag-5'>GD32F303</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> SPI-SPI NAND FLASH读写<b class='flag-5'>实验</b>