单片机
返回首页

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

2024-12-13 来源:elecfans

7.1实验内容

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

  • 独立看门狗的原理

  • 独立看门狗功能介绍

  • 实现独立看门狗功能

7.2实验原理

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

wKgZomY-0tuAXmybAABFzs052pI850.png

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

预分频寄存器(FWDGT_PSC):

wKgaomY9eV-AOG5kAABcFQ1QEEw925.pngwKgZomY9eWiAWv51AAFYY6ZfqBc364.pngwKgaomY9eY6ASl7jAAFQREG8aQk297.png

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

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

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

重装载寄存器(FWDGT_RLD):

wKgaomY9eYaAVRGMAABaHu93Q8g730.pngwKgZomY9eaCAClk4AAJfPNzGgew320.png

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

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

wKgaomY-0xCARvf1AAEstf88zJE142.png

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复亮,周而复始。


进入单片机查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

  • 直播回放: Microchip Timberwolf™ 音频处理器在线研讨会

  • 基于灵动MM32W0系列MCU的指夹血氧仪控制及OTA升级应用方案分享

精选电路图
  • 1瓦线性调频增强器

  • 家用电器遥控器

  • 12V 转 28V DC-DC 变换器(基于 LM2585)

  • 红外开关

  • DS1669数字电位器

  • HA1377 桥式放大器 BCL 电容 17W(汽车音频)

    相关电子头条文章