STM32+看门狗使用心得

本文详细介绍了在STM32微控制器中使用看门狗的重要性及其工作机制。看门狗可以防止因软件错误导致的系统停滞,通过独立看门狗(IWDG)实现对MCU的监控,在主时钟故障情况下仍能保持工作,确保系统稳定运行。

STM32 + 看门狗

看门狗介绍

实际的MCU应用系统中,由于常常会受到来自外界的某些干扰,有可能造成程序跑飞而进入死循环,从而导致整个系统的陷入停滞状态并且不会自动回复到可控的工作状态。所以出于对MCU运行的安全考虑,便引入了一种专门复位监控电路WatchDog,俗称看门狗。看门狗电路所起的作用是一旦MCU运行出现故障,就强制对MCU进行硬件复位。

独立看门狗 (IWDG)

此器件具有一个嵌入式看门狗外设,具有安全性高、定时准确及使用灵活的优点。此独立看门狗外设可检测并解决由软件错误导致的故障,并在计数器达到给定的超时值时触发系统复位。
独立看门狗 (IWDG) 由其专用低速时钟 (LSI) 驱动,因此即便在主时钟发生故障时仍然保持工作状态。
IWDG 最适合应用于需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的应用

IWDG 主要特性

  • 自由运行递减计数器
  • 时钟由独立 RC 振荡器提供(可在待机和停止模式下运行)
  • 复位条件 – 当递减计数器值小于 0x000时复位(如果看门狗已激活) – 在窗口之外重载递减计数器时复位(如果看门狗已激活)

配置

#ifdef WATCH_DOG_ENABLE
IWDG_HandleTypeDef hiwdg;
void MX_IWDG1_Init(void)
{
        hiwdg.Instance = IWDG;
        hiwdg.Init.Prescaler = IWDG_PRESCALER_256;
        hiwdg.Init.Window = 4095;
        hiwdg.Init.Reload = 4095;

        if (HAL_IWDG_Init(&hiwdg) != HAL_OK) {
                while (1) {
                }
        }
}

static struct rt_timer wdg_refresh_timer;
static void wdg_timeout(void *arg)
{
        HAL_IWDG_Refresh(&hiwdg);
}
rt_err_t wdg_start(void)
{
        MX_IWDG1_Init();
        rt_timer_init(&wdg_refresh_timer, "wdg_timer", wdg_timeout, NULL,
                      RT_TICK_PER_SECOND, RT_TIMER_FLAG_PERIODIC | RT_TIMER_FLAG_SOFT_TIMER);
        rt_timer_start(&wdg_refresh_timer);
        return RT_EOK;
}
#endif
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值