@@ -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,28 @@ 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+ .timeout = & g_whalTimeout ,
258+ },
259+ };
260+ #elif defined(BOARD_WATCHDOG_WWDG )
261+ whal_Watchdog g_whalWatchdog = {
262+ WHAL_STM32WB55_WWDG_DEVICE ,
263+
264+ .cfg = & (whal_Stm32wbWwdg_Cfg ) {
265+ .prescaler = WHAL_STM32WB_WWDG_TB_128 ,
266+ .window = 0x7F ,
267+ .counter = 0x7F ,
268+ },
269+ };
270+ #endif
271+
247272void Board_WaitMs (size_t ms )
248273{
249274 uint32_t startCount = g_tick ;
@@ -276,6 +301,14 @@ whal_Error Board_Init(void)
276301 return err ;
277302 }
278303
304+ #ifdef BOARD_WATCHDOG_IWDG
305+ /* Enable LSI osc required by the IWDG */
306+ err = whal_Stm32wbRcc_Ext_EnableLsi (& g_whalClock , 1 );
307+ if (err ) {
308+ return err ;
309+ }
310+ #endif
311+
279312 /* Enable clocks */
280313 for (size_t i = 0 ; i < CLOCK_COUNT ; i ++ ) {
281314 err = whal_Clock_Enable (& g_whalClock , & g_clocks [i ]);
@@ -445,6 +478,13 @@ whal_Error Board_Deinit(void)
445478 return err ;
446479 }
447480
481+ #ifdef BOARD_WATCHDOG_IWDG
482+ err = whal_Stm32wbRcc_Ext_EnableLsi (& g_whalClock , 0 );
483+ if (err ) {
484+ return err ;
485+ }
486+ #endif
487+
448488 err = whal_Clock_Deinit (& g_whalClock );
449489 if (err ) {
450490 return err ;
0 commit comments