STM32F103 CubeIDE的独立看门狗IWDG(基于已有项目或工程添加WatchDog)

一: 前言

很多例程都是基于开发板从一个新工程开始,在实际应用中,那STM32 如何基于当前的项目和工程添加看门狗功能? 本文以独立看门狗为例,演示如何添加应用看门狗功能。

二: 简介

看门狗是一种特殊功能的计时器。

主要作用:

程序不能正常复位,通过看门狗发出的复位信号来复位

程序跑飞或者陷入死循环等异常情况,看门狗发出复位信号,让程序重新执行,恢复正常执行顺序

STM32 有两个看门狗,独立看门狗和窗口看门狗。 独立看门狗 (IWDG) 由专用的内部低速时钟 (LSI) 驱动,即使主时钟发生故障它也仍然有效。

三:实现

打开cubemx配置,选中IWDG,选择Activated,并配置好刷新时间。

时间计算方式:

例:如果PSC = 64, RLR = 3125,正常情况下f(iwdg) = 40khz, 那么溢出时间t = 5s。

四:代码

添加文件:

Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_iwdg.h

Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_ll_iwdg.h

Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_iwdg.c

stm32f1xx_hal_conf.h
#define HAL_IWDG_MODULE_ENABLED

main.c

IWDG_HandleTypeDef hiwdg;
static void MX_IWDG_Init(void);
 MX_IWDG_Init();

 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE;
 RCC_OscInitStruct.LSIState = RCC_LSI_ON;

static void MX_IWDG_Init(void)
{

  /* USER CODE BEGIN IWDG_Init 0 */

  /* USER CODE END IWDG_Init 0 */

  /* USER CODE BEGIN IWDG_Init 1 */

  /* USER CODE END IWDG_Init 1 */
  hiwdg.Instance = IWDG;
  hiwdg.Init.Prescaler = IWDG_PRESCALER_64;
  hiwdg.Init.Reload = 3125;
  if (HAL_IWDG_Init(&hiwdg) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN IWDG_Init 2 */

  /* USER CODE END IWDG_Init 2 */

}

最后,在主循环或定时器中定时刷新看门狗。

HAL_IWDG_Refresh(&hiwdg);

五:总结

   设计时应避免对看门狗的过度依赖,应在系统设计和软件编程中尽量避免异常的发生,但在外设很多,频繁通信,环境干扰大等情况下可以加上以避免程序卡死。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值