STM32F030R8Tx HAL库实现IWDG独立看门狗

11 篇文章 2 订阅
  • 首先准备一个工程并加入RTT打印,RTT打印请参考以下链接

https://blog.csdn.net/mygod2008ok/article/details/106746633

  • 在工程中加入stm32f0xx_hal_iwdg.c文件

  • 在stm32f0xx_hal_conf.h头文件打开HAL_IWDG_MODULE_ENABLED宏

  • 继续接着加入APP_ERROR_CHECK宏,并在此文件的头文件加入sdk_config.h头文件

  • 在main.c中实现IWDG初时化函数

static IWDG_HandleTypeDef IwdgHandle;

/**
*  @brief watch dog initialization
*/
void BSP_wdt_init(uint16_t ms)//输入多少ms喂一次狗
{
  IwdgHandle.Instance = IWDG;
  IwdgHandle.Init.Prescaler = IWDG_PRESCALER_256;//256分频的喂狗时间在6.4-26214.4ms之间
  IwdgHandle.Init.Reload = (5 * ms) / (32); /* 40/256*ms */
  IwdgHandle.Init.Window = IWDG_WINDOW_DISABLE; 
  HAL_StatusTypeDef err_code = HAL_IWDG_Init(&IwdgHandle);
  APP_ERROR_CHECK(err_code);

}

独立看门狗时钟源是40KHz,如果采用256分频,那么1个计数的时间约为6.4毫秒,计算公式如下:

    1个计数看门狗溢出时间(单位毫秒) = 1000/(40000Hz/256分频系数)

则: 

  1个计数 看门狗溢出时间(单位毫秒) = 1000*256/40000

化简为:

     1个计数看门狗溢出时间(单位毫秒) = 32/5

那么5000毫秒的装载值约为781,计算公式如下:

   装载值 = 5000毫秒 / ( 32/5)

则:

装载值 = 5*5000  /  32 

 

 

  • 在main中加入stm_log.h头文件,初时化打印及独立看门狗

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */
  RTT_INIT();
  HAL_Init();
  SystemClock_Config();
  NRF_LOG_INFO("program is reset!"); 
  BSP_wdt_init(5000);
   
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
		
    HAL_Delay(1000);
    NRF_LOG_INFO("main loop");
	
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}
  • 由于没有喂狗,每5000毫秒会产生看门狗复位,运行结果如下

  • 在main中实现喂狗函数,并在主循环中调用

/**
*  @brief watch dog feed
*/
void BSP_wdt_feed(void)
{
    /* Refresh IWDG: reload counter */
	  HAL_StatusTypeDef err_code = HAL_IWDG_Refresh(&IwdgHandle);
    APP_ERROR_CHECK(err_code);
}

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */
	RTT_INIT();
  HAL_Init();
  SystemClock_Config();
  NRF_LOG_INFO("program is reset!"); 
  BSP_wdt_init(5000);
   
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
    BSP_wdt_feed();
    HAL_Delay(1000);
    NRF_LOG_INFO("main loop");
	
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

由于每秒进行喂狗,则不会产生看门狗复位,运行结果如下:

  • 例程下载链接如下

https://download.csdn.net/download/mygod2008ok/12522406

 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风雨依依

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值