@@ -59,6 +59,9 @@ static const whal_Stm32wbRcc_Clk g_clocks[] = {
5959 {WHAL_STM32WB55_RNG_CLOCK },
6060 {WHAL_STM32WB55_AES1_CLOCK },
6161 {WHAL_STM32WB55_I2C1_CLOCK },
62+ #ifdef BOARD_WATCHDOG_WWDG
63+ {WHAL_STM32WB55_WWDG_CLOCK },
64+ #endif
6265};
6366#define CLOCK_COUNT (sizeof(g_clocks) / sizeof(g_clocks[0]))
6467
@@ -244,6 +247,27 @@ whal_Crypto g_whalCrypto = {
244247 },
245248};
246249
250+ #ifdef BOARD_WATCHDOG_IWDG
251+ whal_Watchdog g_whalWatchdog = {
252+ WHAL_STM32WB55_IWDG_DEVICE ,
253+
254+ .cfg = & (whal_Stm32wbIwdg_Cfg ) {
255+ .prescaler = WHAL_STM32WB_IWDG_PR_32 ,
256+ .reload = 100 ,
257+ },
258+ };
259+ #elif defined(BOARD_WATCHDOG_WWDG )
260+ whal_Watchdog g_whalWatchdog = {
261+ WHAL_STM32WB55_WWDG_DEVICE ,
262+
263+ .cfg = & (whal_Stm32wbWwdg_Cfg ) {
264+ .prescaler = WHAL_STM32WB_WWDG_TB_128 ,
265+ .window = 0x7F ,
266+ .counter = 0x7F ,
267+ },
268+ };
269+ #endif
270+
247271void Board_WaitMs (size_t ms )
248272{
249273 uint32_t startCount = g_tick ;
@@ -276,6 +300,14 @@ whal_Error Board_Init(void)
276300 return err ;
277301 }
278302
303+ #ifdef BOARD_WATCHDOG_IWDG
304+ /* Enable LSI osc required by the IWDG */
305+ err = whal_Stm32wbRcc_Ext_EnableLsi (& g_whalClock , 1 );
306+ if (err ) {
307+ return err ;
308+ }
309+ #endif
310+
279311 /* Enable clocks */
280312 for (size_t i = 0 ; i < CLOCK_COUNT ; i ++ ) {
281313 err = whal_Clock_Enable (& g_whalClock , & g_clocks [i ]);
@@ -445,6 +477,13 @@ whal_Error Board_Deinit(void)
445477 return err ;
446478 }
447479
480+ #ifdef BOARD_WATCHDOG_IWDG
481+ err = whal_Stm32wbRcc_Ext_EnableLsi (& g_whalClock , 0 );
482+ if (err ) {
483+ return err ;
484+ }
485+ #endif
486+
448487 err = whal_Clock_Deinit (& g_whalClock );
449488 if (err ) {
450489 return err ;
0 commit comments