硬汉嵌入式论坛

 找回密码
 立即注册
查看: 431|回复: 2
收起左侧

[技术讨论] STM32L431单片机看门狗提前溢出

[复制链接]

7

主题

36

回帖

57

积分

初级会员

积分
57
发表于 2023-10-19 09:50:04 | 显示全部楼层 |阅读模式
最近调试项目,发现一个很怪异的问题,配置代码如下:
    uint8_t flag_IWDG_STOP,flag_IWDG_STDBY;

    flag_IWDG_STOP=READ_BIT(FLASH->OPTR, FLASH_OPTR_IWDG_STOP)!=0;
    flag_IWDG_STDBY=READ_BIT(FLASH->OPTR, FLASH_OPTR_IWDG_STDBY)!=0;
    if(flag_IWDG_STOP!=0||flag_IWDG_STDBY!=0)
    {
            HAL_FLASH_Unlock();

            HAL_FLASH_OB_Unlock();

            CLEAR_BIT(FLASH->OPTR, FLASH_OPTR_IWDG_STOP);
        
            CLEAR_BIT(FLASH->OPTR, FLASH_OPTR_IWDG_STDBY);

            SET_BIT(FLASH->CR, FLASH_CR_OPTSTRT);

            FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);

            CLEAR_BIT(FLASH->CR, FLASH_CR_OPTSTRT);

            HAL_FLASH_OB_Launch();
            
          HAL_FLASH_OB_Lock();

          HAL_FLASH_Lock();//
    }

  /* USER CODE END IWDG_Init 1 */
  hiwdg.Instance = IWDG;
  hiwdg.Init.Prescaler = IWDG_PRESCALER_32;
    hiwdg.Init.Window = 5000;  
  hiwdg.Init.Reload = 5000;
  if (HAL_IWDG_Init(&hiwdg) != HAL_OK)
  {
    Error_Handler();
  }
前面红色部分设置在睡眠时冻结看门狗,防止休眠时超时。
下载 (2).png
下面配置看门狗这里有一个问题,5000是不对的,RELOAD值只有12位,最大4095,因此5000低12位其实是904,,32分频,超时超时时间是904ms,实际测试超时在903-910之间,这个是正常的。
但是在外部供电偶尔波动一下再恢复后,看门狗超时复位变成580ms了,配置并没有变(实际测试值580ms复位重启,),重启后复位时间一直会变成580ms,重新刷程序,
jlink复位都没有用,只有把整板断电再上电才会再次恢复到904ms复位重启。



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106749
QQ
发表于 2023-10-19 12:03:09 | 显示全部楼层
这里有个关键的点,你说的这个是不是调试状态看的复位时间。

然后你的板子板子冷启动后正常了。
回复

使用道具 举报

7

主题

36

回帖

57

积分

初级会员

积分
57
 楼主| 发表于 2023-10-23 09:23:48 来自手机 | 显示全部楼层
不是调试状态,就是在外部电压波动后出现的异常状态下,除了外部电源下电再上电,负责不管怎么软复位都不行,通过pa2把lsi时钟输出测量,发现此时lsi时钟异常一直在40k到60k波动,时钟波形占空比不是固定的,一直在变化
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-4 04:18 , Processed in 0.163588 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表