前言
最近有客戶在 STM32H725 上使用 STM32 SBSFU 軟件包??蛻舭l(fā)現(xiàn)它移植的 SBSFU在開發(fā)時(shí)能正常工作,但是部署在現(xiàn)場(chǎng)其他同型號(hào)的芯片上,卻出現(xiàn)了一部分產(chǎn)品啟動(dòng)不正常的問題。經(jīng)過將有問題的芯片和開發(fā)板帶回實(shí)驗(yàn)室進(jìn)行定位,客戶發(fā)現(xiàn)是由于 SBSFU使用了 IWDG,而 IWDG 即使在同一型號(hào)的芯片上,也有著不同的表現(xiàn)。有的能初始化成功,有的卻初始化失敗??蛻魮?dān)心這是否是芯片所導(dǎo)致的問題。其實(shí),這是一個(gè)軟件配置的問題,在 HAL 庫代碼的注釋中有著清晰的描述。本文就這一問題給出詳細(xì)的解釋并提出正確的配置方法。
IWDG 初始化代碼
IWDG 初始化代碼如下。我們重點(diǎn)看下什么地方可能會(huì)返回錯(cuò)誤。
超時(shí)錯(cuò)誤的分析
既然出現(xiàn)了超時(shí)錯(cuò)誤,我們就會(huì)懷疑是不是默認(rèn)的時(shí)間太短了。我們查看一下HAL_IWDG_DEFAULT_TIMEOUT 的定義(stm32h7xx_hal_iwdg.c)。
一致性解決方案
LSI_VALUE 作為計(jì)算公式中的分母,如果不希望對(duì)于每一個(gè)芯片都測(cè)量然后使用不同的值,應(yīng)該考慮使用最大超時(shí)時(shí)間,也就是說應(yīng)該取最小值 29.4kHZ。我們手工將29.4kHZ 代入公式。
小結(jié)
IWDG 不僅僅為 SBSFU 使用,在功能安全中也會(huì)被用到。在使用 IWDG 時(shí),要注意IWDG 初始化代碼中需要針對(duì)同一型號(hào)來定制相應(yīng)的超時(shí)值。本文以 STM32H725 為例,給出了一致性的定制值,避免 IWDG 在不同芯片的初始化行為的差異,適合所有使用STM32 IWDG 功能的用戶參考。