蓝桥杯嵌入式定时器深入学习笔记(三)看门狗

3.看门狗定时器:

介绍:看门狗定时器原理上来说也是一个逐级递减的定时器,给他设置一个定时值,它会逐渐递减,递减到0后就会进行芯片复位,在看门狗定时器还没到达0时重新给他赋值的这个操作就叫喂狗。配置cubemx时,这个IWDG和WWDG就是看门狗的意思。

为什么会有两个看门狗呢,下面就是对两条小狗子的介绍,大黄,大黑哈哈哈哈哈哈

WWDG(Windows 窗户)是窗台看门狗,大黑你丫给我好好看家,如果超时没喂狗,会触发中断  IWDG(independence 独立)是独立看门狗,如果超时,它会直接进行芯片复位(程序重启)

 既然看门狗是一个递减的定时器,那他的周期,时钟来源等一些玩意是咋来的呢

时钟来源:

WWDG由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。(听不懂听不懂,我们下面一步步来看就行)

IWDG由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。

关于时钟内容可以看我的博客的关于时钟树的学习内容

IWDG和WWDG的使用场景如下所示:

总结:

  • IWDG 适用于 需要高可靠性和独立性 的应用,如 电池供电系统、远程监控、低功耗应用,并且不依赖主系统时钟。

  • WWDG 适用于 实时性要求高的应用,如 嵌入式实时控制系统、机器人控制、通信系统,特别是在系统必须在特定窗口时间内喂狗,否则会触发复位的场合。

 既然是定时器,它在实现自己功能的时候这个功能实现时间也是需要的,它有一个超时时间,超过超时时间后MPU会复位,和我的蠢狗电脑一样。

超时时间计算公式:

重载值:定时器的计数器最大值,可以在 IWDG_RLR 寄存器中进行配置。该寄存器包含了定时器的重载值,最大值为 4095

窗口值:窗口值是用于 WWDG(窗口看门狗)中的参数,而 IWDG 没有窗口值这个参数。

PR(预分频器): 预分频器的作用是通过对 LSI 时钟源进行分频,来改变定时器的计数速度

欧克我们开始正式的实操部分 

深入一点可以用寄存器写函数实现喂狗,上面的是重启看门狗实现喂狗

#include "stm32g4xx.h"  // 引入 STM32G4 的头文件(根据实际情况可以调整)

void IWDG_Config(void);  // IWDG 配置函数声明
void IWDG_Feed(void);    // IWDG 喂狗函数声明

int main(void)
{
    // 初始化系统时钟、外设等,具体根据实际系统初始化代码写

    // 配置 IWDG
    IWDG_Config();

    while (1)
    {
        // 程序主循环,执行其他任务
        // 在这里你可以执行任何业务逻辑

        // 定期喂狗,防止系统复位
        IWDG_Feed();

        // 延时 500 毫秒(这里可以模拟执行其他任务)
        for (int i = 0; i < 500000; i++);

        // 你也可以在这里执行其他业务逻辑,比如读取传感器、控制外设等
    }
}

// 配置 IWDG 定时器
void IWDG_Config(void)
{
    // 1. 解锁 IWDG 寄存器,允许配置
    IWDG->KR = 0x5555;  // 写入 0x5555 解锁 IWDG

    // 2. 设置 IWDG 的预分频器值(PR 寄存器),这里设为 3
    // 预分频值为 3 => 分频因子为 2^3 = 8
    IWDG->PR = 0x03;  // 设置预分频器值,值为 3(即 2^3 = 8)

    // 3. 设置 IWDG 的重载值(RLR 寄存器),这里设为 2000
    // 重载值 = 2000,这个值决定了超时时间
    IWDG->RLR = 2000;  // 设置重载值,最大值为 4095

    // 4. 启动 IWDG
    IWDG->KR = 0xCCCC;  // 启动 IWDG,开始计数

    // 配置完成,IWDG 会根据设置的超时时间开始计数
}

// 定期喂狗,防止系统复位
void IWDG_Feed(void)
{
    // 每次喂狗时,写入 0xAAAA 向 IWDG 看门狗重载计数器,防止复位
    IWDG->KR = 0xAAAA;  // 写入 0xAAAA 来喂狗,重置定时器
}

 这是另外一个喂狗的方法,通过给狗的计数值重新变个值,上面的情景就是用于防止系统卡死的,如果系统卡死或者外部中断导致该函数无法正常运行以及死锁,我们的系统会重启重新复位。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值