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

发布者:breakthrough3最新更新时间:2024-12-13 来源: elecfans关键字:看门狗实验 手机看文章 扫描二维码
随时随地手机看文章

7.1实验内容

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

  • 独立看门狗的原理

  • 独立看门狗功能介绍

  • 实现独立看门狗功能

7.2实验原理

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

wKgZomY-0tuAXmybAABFzs052pI850.png?imageView2/2/w/1000

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

预分频寄存器(FWDGT_PSC):

wKgaomY9eV-AOG5kAABcFQ1QEEw925.png?imageView2/2/w/1000wKgZomY9eWiAWv51AAFYY6ZfqBc364.png?imageView2/2/w/1000wKgaomY9eY6ASl7jAAFQREG8aQk297.png?imageView2/2/w/1000

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

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

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

重装载寄存器(FWDGT_RLD):

wKgaomY9eYaAVRGMAABaHu93Q8g730.png?imageView2/2/w/1000wKgZomY9eaCAClk4AAJfPNzGgew320.png?imageView2/2/w/1000

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

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

wKgaomY-0xCARvf1AAEstf88zJE142.png?imageView2/2/w/1000

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

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

7.3硬件设计

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


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实验结果


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


关键字:看门狗实验 引用地址:【GD32F470紫藤派开发板使用手册】第七讲 FWDG-看门狗实验

上一篇:【GD32F303红枫派开发板使用手册】第十七讲 USART-中断串口收发实验
下一篇:【GD32H757Z海棠派开发板使用手册】第十讲 USART-中断串口收发实验

推荐阅读最新更新时间:2026-03-19 15:30

GD32F470紫藤开发板使用手册】第七讲 FWDG-看门狗实验
7.1实验内容 通过本实验主要学习以下内容: 独立看门狗的原理 独立看门狗功能介绍 实现独立看门狗功能 7.2实验原理 前面讲到,看门狗的计数值在每一个计数器时钟来的时候减1,那么这个时钟是什么呢,我们来看一下GD32F470的时钟树: 从时钟树可以看到,FWDGT的时钟来源于IRC32K,这是GD32F470的内部时钟,典型的频率值是32KHz。但要注意,这个IRC32K不是直接连到FWDGT计数器的,而是需要经过一个预分频器,这个分频器大小通过FWDGT_PSC进行设定。 预分频寄存器(FWDGT_PSC): 如设定PS 为001b,那么计数器的时钟频率就为32K/8 = 4KHz,即每隔250us计数值减1
[单片机]
【<font color='red'>GD32F470</font><font color='red'>紫藤</font><font color='red'>派</font><font color='red'>开发板</font>使用手册】第七讲 <font color='red'>FWDG</font>-<font color='red'>看门狗</font><font color='red'>实验</font>
stm32独立看门狗实验
//ALIENTEK Mini STM32开发板V1.9范例代码5 //独立看门狗实验 //正点原子@ALIENTEK //技术论坛:www.openedv.com STM32F103RBT6属于中容量版本的mcu 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种情况的发生。看门狗的作用就是在一定时间内(通过定时计数器实现)没有接收喂狗信号(表示 MCU 已经挂了),便实现处理器的自动复位重启(发送复位信号) 。 以下摘自《不完全手册——库函数》文档 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效。这里需要注意独立看门狗的时钟
[单片机]
stm32独立<font color='red'>看门狗</font><font color='red'>实验</font>
STM32单片机(4) 独立看门狗实验
/******************************************************************************* * * 软件功能: 独立看门狗实验 * *******************************************************************************/ #include stm32f10x.h #include delay.h /************************************************* 函数: void RCC_Configuration(void) 功
[单片机]
STM32-独立看门狗原理-实验
独立看门狗原理概述 为什么要看门狗: 在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗”(watchdog) 。 看门狗解决的问题是什么: 在启动正常运行的时候,系统不能复位 在系统跑飞(程序异常执行)的情况,使系统复位,程序重新执行 独立看门狗概述: STM32内置两个看门狗:独立看门狗和窗口看门狗。 两个看门狗提供了更高的安全性,时间的精确性和
[单片机]
STM32入门学习笔记之看门狗实验(下)
14.4.2 窗口看门狗实验 功能:程序一运行使得接在PB5上的LED1亮300ms后关闭,进入死循环。等待WWDG中断的到来,在中断里面,喂狗,并对PE5上的LED2进行翻转操作。可以看到LED2不停的闪烁,LED1只在刚启动的时候闪一下。 (1)在上一个实验的wdg.h文件的函数列表区域添加以下代码。 void WWDG_Init( u8 tr, u8 wr, u8 fprer ) ; //窗口看门狗初始化 (2)在上一个实验的wdg.c文件末尾添加以下代码。 /*************************************************** Name :WWDG_IRQHandler
[单片机]
STM32独立看门狗介绍_STM32单片机独立看门狗实验
  STM32独立看门狗简介   单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种情况的发生。看门狗的作用就是在一定时间内(通过定时计数器实现)没有接收喂狗信号(表示MCU已经挂了),便实现处理器的自动复位重启(发送复位信号)。   STM32的独立看门狗由内部专门的40Khz低速时钟驱动,即使主时钟发生故障,它也仍然有效。这里需要注意独立看门狗的时钟是一个内部RC时钟,所以并不是准确的40Khz,而是在30~60Khz之间的一个可变化的时钟,只是我们在估算的时候,以40Khz的频率来计算,看门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。   涉及的寄存器有:键寄存器
[单片机]
MSP430F5438 看门狗实验
简介: 1,学会在定时器和看门狗模式下操作 WDT,了解 WDT 寄存器的配置 2,编程实现WDT 定时功能,WDT 时钟源来自 ACLK,且 ACLK 无失效来自 XT1 晶体 3,实现功能:250ms 定时,每 250ms LED1 亮灭交替闪烁 1,看门狗介绍 看门狗定时器是一个32位的定时器它可以作为看门狗或定时器使用所有F5XX系列的器件中都有增强型看门狗定时器—WDT_A。 什么是看门狗? 从字面的意思理解,看门狗帮我的系统看门,防止我的系统到处乱跑。在实际嵌入式系统中看门狗也是充当这个角色的。看门狗,简称WDT,很明显它实际上是一个定时器,就如同我们所讲的Timer_A3亦或是Timer_B7系统一样,
[单片机]
MSP430F5438 <font color='red'>看门狗</font><font color='red'>实验</font>
stm32正点原子学习笔记(29)独立看门狗实验
iwdg.c 1 #include iwdg.h 2 3 void iwdg_init(uint8_t IWDG_Prescaler,uint16_t Reload) 4 { 5 IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); 6 IWDG_SetPrescaler(IWDG_Prescaler); 7 IWDG_SetReload(Reload); 8 IWDG_ReloadCounter(); 9 IWDG_Enable(); 10 11 } iwdg.h 1 #ifndef __IWDG_H 2
[单片机]
stm32正点原子学习笔记(29)独立<font color='red'>看门狗</font><font color='red'>实验</font>
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved