[STM32] STM32H743II单片机独立看门狗不看门问题

[复制链接]
3673|6
天命风流 发表于 2025-10-28 10:47 | 显示全部楼层 |阅读模式
我使用的是STM32H743II单片机,启动独立看门狗后,有时能复位重启,有时不能,配置如下,愁了好久都没解决,求各路大神指教!!!



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 天命风流 发表于 2025-10-29 09:36 | 显示全部楼层
dffzh 发表于 2025-10-29 10:30 | 显示全部楼层
本帖最后由 dffzh 于 2025-10-29 10:32 编辑

可以加个while死循环的代码,然后仿真运行看下,当看门狗超时时间到了以后,看门狗外设的相关寄存器值是否变成了正常的值?查看寄存器值可以有效排查问题。
看下能的时候和不能的时候,查看一下看门狗计数器值是多少,不能复位的时候,这个值应该没有超过预设值,也许是程序哪里还在正常喂狗呢。
dffzh 发表于 2025-10-29 13:39 | 显示全部楼层
或者把看门狗相关的代码发一份出来,我来同步帮你看下。
 楼主| 天命风流 发表于 2025-10-29 13:46 | 显示全部楼层
dffzh 发表于 2025-10-29 13:39
或者把看门狗相关的代码发一份出来,我来同步帮你看下。

IWDG_HandleTypeDef hiwdg1;

/* IWDG1 init function */
void MX_IWDG1_Init(void)
{

  /* USER CODE BEGIN IWDG1_Init 0 */

  /* USER CODE END IWDG1_Init 0 */

  /* USER CODE BEGIN IWDG1_Init 1 */

  /* USER CODE END IWDG1_Init 1 */
  hiwdg1.Instance = IWDG1;
  hiwdg1.Init.Prescaler = IWDG_PRESCALER_32;
  hiwdg1.Init.Window = 4095;
  hiwdg1.Init.Reload = 4095;
  if (HAL_IWDG_Init(&hiwdg1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN IWDG1_Init 2 */

  /* USER CODE END IWDG1_Init 2 */

}


//以上是看门狗的初始化
 楼主| 天命风流 发表于 2025-10-29 13:47 | 显示全部楼层
dffzh 发表于 2025-10-29 13:39
或者把看门狗相关的代码发一份出来,我来同步帮你看下。

HAL_StatusTypeDef HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg)
{
  /* Reload IWDG counter with value defined in the reload register */
  __HAL_IWDG_RELOAD_COUNTER(hiwdg);

  /* Return function status */
  return HAL_OK;
}

//以上是喂狗函数
 楼主| 天命风流 发表于 2025-10-29 13:51 | 显示全部楼层
dffzh 发表于 2025-10-29 13:39
或者把看门狗相关的代码发一份出来,我来同步帮你看下。

我在做测试的时候每次都能重启,但在别人运行仪器时偶尔会出现死机不能重启的情况。测试的方法是,只在一个线程里喂狗,在其它线程挂起喂狗的线程。结果是测试几十次,都可以重启。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

92

主题

1180

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部