前言
最近有客户在 STM32H725 上使用 STM32 SBSFU 软件包。客户发现它移植的 SBSFU在开发时能正常工作,但是部署在现场其他同型号的芯片上,却出现了一部分产品启动不正常的问题。经过将有问题的芯片和开发板带回实验室进行定位,客户发现是由于 SBSFU使用了 IWDG,而 IWDG 即使在同一型号的芯片上,也有着不同的表现。有的能初始化成功,有的却初始化失败。客户担心这是否是芯片所导致的问题。其实,这是一个软件配置的问题,在 HAL 库代码的注释中有着清晰的描述。本文就这一问题给出详细的解释并提出正确的配置方法。
IWDG 初始化代码
IWDG 初始化代码如下。我们重点看下什么地方可能会返回错误。
超时错误的分析
既然出现了超时错误,我们就会怀疑是不是默认的时间太短了。我们查看一下HAL_IWDG_DEFAULT_TIMEOUT 的定义(stm32h7xx_hal_iwdg.c)。
一致性解决方案
LSI_VALUE 作为计算公式中的分母,如果不希望对于每一个芯片都测量然后使用不同的值,应该考虑使用最大超时时间,也就是说应该取最小值 29.4kHZ。我们手工将29.4kHZ 代入公式。
小结
IWDG 不仅仅为 SBSFU 使用,在功能安全中也会被用到。在使用 IWDG 时,要注意IWDG 初始化代码中需要针对同一型号来定制相应的超时值。本文以 STM32H725 为例,给出了一致性的定制值,避免 IWDG 在不同芯片的初始化行为的差异,适合所有使用STM32 IWDG 功能的用户参考。
579