[其他ST产品] 实战经验 | 使用STiROT后看门狗意外复位问题分析

[复制链接]
64|17
STM新闻官 发表于 2026-7-15 23:12 | 显示全部楼层 |阅读模式
01问题描述
客户使用STM32H573用于他们的产品,主要是要用到STiROT功能。但客户反馈,在APP中有用到看门狗,不开STiROT的时候,一切正常。但是,一旦开启STiROT时,则会导致看门狗复位。
02问题分析
为了重现问题,在STM32H573-DK板上通过STM32CubeMx生成一个STiROT工程,其main函数如下所示:
  1. int main(void){
  2. /* USER CODE BEGIN 1 */uint8_t Timer = 0;uint32_t ResetCnt = 0;/* USER CODE END 1 */
  3. /* MCU Configuration--------------------------------------------------------*/
  4. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();
  5. __HAL_FLASH_PREFETCH_BUFFER_ENABLE();
  6. /* Configure The Vector Table address */SCB->VTOR = 0xC000400;/* !!! To boot in a secure way, ST_IROT has configured and activated the Memory Protection UnitIn order to keep a secure environment execution, you should reconfigure the MPU to make it compatible with your applicationIn this example, MPU is disabled */HAL_MPU_Disable();HAL_MPU_Disable_NS();
  7. /* USER CODE BEGIN Init */HAL_ICACHE_Disable();/* USER CODE END Init */
  8. /* Configure the system clock */SystemClock_Config();/* GTZC initialisation */MX_GTZC_S_Init();
  9. /* USER CODE BEGIN SysInit */
  10. /* USER CODE END SysInit */
  11. /* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();
  12. //打印看门狗相关寄存器内容printf("IWDG1-PR:0x%x,RLR:0x%x,WINR:0x%x,SR:0x%x\r\n",hiwdg.Instance->PR,hiwdg.Instance->RLR,hiwdg.Instance->WINR,hiwdg.Instance->SR);MX_IWDG_Init();/* USER CODE BEGIN 2 */
  13. HAL_IWDG_Refresh(&hiwdg); //喂狗//再次打印看门狗相关寄存器内容printf("IWDG2-PR:0x%x,RLR:0x%x,WINR:0x%x,SR:0x%x\r\n",hiwdg.Instance->PR,hiwdg.Instance->RLR,hiwdg.Instance->WINR,hiwdg.Instance->SR);HAL_IWDG_Refresh(&hiwdg); //再次喂狗if (__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST) != 0x00u){printf("IWDG reset.\r\n");}__HAL_RCC_CLEAR_RESET_FLAGS();HAL_IWDG_Refresh(&hiwdg);printf("Clear reset flag.\r\n");HAL_IWDG_Refresh(&hiwdg);/* USER CODE END 2 */
  14. /* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE */
  15. /* USER CODE BEGIN 3 */HAL_IWDG_Refresh(&hiwdg);HAL_Delay(500);HAL_GPIO_TogglePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin);
  16. HAL_IWDG_Refresh(&hiwdg);HAL_Delay(500);HAL_GPIO_TogglePin(LED_ORANGE_GPIO_Port, LED_ORANGE_Pin);
  17. HAL_IWDG_Refresh(&hiwdg);HAL_Delay(500);HAL_GPIO_TogglePin(LED_RED_GPIO_Port, LED_RED_Pin);
  18. HAL_IWDG_Refresh(&hiwdg);HAL_Delay(500);HAL_GPIO_TogglePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin);}/* USER CODE END 3 */}
如上代码,在不开启STiROT时一切运行正常。而在开启STiROT,按照STiRoT的要求Provisioning后,其打印如下所示:
210676a57a349a4e69.png
从打印信息可知已经重现了问题现象,MCU一直在复位。
分析此打印信息,我们可得到如下信息:
1. 第二次打印看门狗寄存器的过程中触发了看门狗复位。这确认了看门狗复位事件发生在运行用户代码时,而不是运行STiROT期间。
2. 但是在第二次打印看门狗寄存器内容之前,刚刚执行了喂狗动作,看起来此时喂狗动作并没有生效。
3. 作为对比,相同的代码,在不开启STiROT时则一切正常。这说明此问题确实与STiROT相关。
4. 另外,对于时间参数。我有修改过,即使时间参数进行延时,结果还是会有看门狗复位现象。此问题看起来跟时间参数并无多大关系。
整个现象给人的感觉就是喂狗函数HAL_IWDG_Refresh()异常,此函数似乎并没生效。
通过和内部产品部门的专家沟通,发现STiROT对看门狗实施了写保护的嫌疑最大。为了确认怀疑,在代码中对看门狗初始化之前,先执行一次关闭写保护:
  1. hiwdg.Instance = IWDG;__HAL_IWDG_START(&hiwdg);IWDG_ENABLE_WRITE_ACCESS(&hiwdg); //允许写HAL_Delay(1); //在这里需要加点延时MX_IWDG_Init(); //再初始化看门狗…
如此修改后,则一切又恢复正常了。
问题解决!
03后述
虽然在MX_IWDG_Init()函数内部也会做使能写的动作,但是经过测试,如果不额外添加代码,并不能工作。不排除将来HAL库更新版本后会解决此问题,不过在此之前,则可将此文档所描述的方法作为一种参考。

 楼主| STM新闻官 发表于 2026-7-15 23:13 | 显示全部楼层
lihuami 发表于 2026-7-22 08:24 | 显示全部楼层
硬件时钟误差是否可能引发误复位?
pmp 发表于 2026-7-22 11:53 | 显示全部楼层
优先使用 DMA 传输数据,减少 ISR 驻留时间。
phoenixwhite 发表于 2026-7-22 15:54 | 显示全部楼层
如果发现喂狗失败,可以尝试重新初始化IWDG或执行其他恢复措施。
nomomy 发表于 2026-7-22 16:08 | 显示全部楼层
HAL 库 IWDG 初始化缺少硬件同步等待时序,解锁操作无法稳定生效。
uytyu 发表于 2026-7-22 17:39 | 显示全部楼层
不开启STiROT,应用程序中的看门狗工作正常。
wengh2016 发表于 2026-7-22 19:10 | 显示全部楼层
同时启用 LSI 和 LSE,通过软件切换保证看门狗时钟可靠性。
mollylawrence 发表于 2026-7-22 21:06 | 显示全部楼层
看门狗复位是否必然意味着代码逻辑错误?
vivilyly 发表于 2026-7-22 21:39 | 显示全部楼层
STiROT的保护,该操作实际上并未生效
hilahope 发表于 2026-7-24 18:11 | 显示全部楼层
STiROT机制和当前版本HAL库的兼容性小概率问题
bestwell 发表于 2026-7-25 13:06 | 显示全部楼层
必须通过检查IWDG的状态寄存器来确认喂狗操作是否真正成功。
10299823 发表于 2026-7-25 13:49 | 显示全部楼层
看门狗复位事件发生在用户代码运行阶段,并非STiROT启动流程内
deliahouse887 发表于 2026-7-25 14:57 | 显示全部楼层
IWDG计数器仍在递减直至超时复位。
mattlincoln 发表于 2026-7-25 17:46 | 显示全部楼层
适用高安全等级产品,外设全程由安全域管控。
averyleigh 发表于 2026-7-25 19:16 | 显示全部楼层
任务调度与看门狗喂养如何平衡优先级?
xixi2017 发表于 2026-7-31 10:37 | 显示全部楼层
STM32H5 全系(H573、H523 等),ST 官方专门发布 LAT1682 文档定位该故障STMCU
wanduzi 发表于 2026-8-2 10:54 | 显示全部楼层
核心是STiROT 启动流程、时钟约束、安全权限、启动耗时、向量表 / 初始化时序五大维度冲突,结合 ST 官方文档 LAT1682、芯片勘误手册拆解全量原因、定位方法、整改方案。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:意法半导体(中国)投资有限公司
简介:您的嵌入式应用将得益于意法半导体领先的产品架构、技术、多源产地和全方位支持。意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器。

1625

主题

2134

帖子

25

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