diff options
| author | Bernard Xiong <[email protected]> | 2019-06-26 08:23:58 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2019-06-26 08:23:58 +0800 |
| commit | 0fab1cc691df78c4d69a79e19752eb405e8f3689 (patch) | |
| tree | 05d2cb3607e34157271430f7468e374f2d1317b8 | |
| parent | 2f1ab871381cfd6888c0214693e2580a07fdce05 (diff) | |
| parent | 2460efabaf4ea968de9907458884211623dc5fb1 (diff) | |
Merge pull request #2809 from balanceTWK/stm32_wdt
[bsp][stm32] drv_wdt.c | 完善 stm32 看门狗驱动
| -rw-r--r-- | bsp/stm32/libraries/HAL_Drivers/drv_wdt.c | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_wdt.c b/bsp/stm32/libraries/HAL_Drivers/drv_wdt.c index 473a03a72c..92e5fa6a4f 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_wdt.c +++ b/bsp/stm32/libraries/HAL_Drivers/drv_wdt.c @@ -23,7 +23,7 @@ static rt_watchdog_t watchdog; static rt_err_t wdt_init(rt_watchdog_t *wdt) { hiwdg.Instance = IWDG; - hiwdg.Init.Prescaler = IWDG_PRESCALER_32; + hiwdg.Init.Prescaler = IWDG_PRESCALER_256; hiwdg.Init.Reload = 0x00000FFF; #if defined(SOC_SERIES_STM32F0) || defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32F7) @@ -48,13 +48,43 @@ static rt_err_t wdt_control(rt_watchdog_t *wdt, int cmd, void *arg) break; /* set watchdog timeout */ case RT_DEVICE_CTRL_WDT_SET_TIMEOUT: - hiwdg.Init.Reload = *((rt_uint32_t*)arg); +#if defined(LSI_VALUE) + if(LSI_VALUE) + { + hiwdg.Init.Reload = (*((rt_uint32_t*)arg)) * LSI_VALUE / 256 ; + } + else + { + LOG_E("Please define the value of LSI_VALUE!"); + } +#else + #error "Please define the value of LSI_VALUE!" +#endif + if(hiwdg.Init.Reload > 0xFFF) + { + LOG_E("wdg set timeout parameter too large."); + return -RT_EINVAL; + } if (HAL_IWDG_Init(&hiwdg) != HAL_OK) { LOG_E("wdg set timeout failed."); return -RT_ERROR; } break; + case RT_DEVICE_CTRL_WDT_GET_TIMEOUT: +#if defined(LSI_VALUE) + if(LSI_VALUE) + { + (*((rt_uint32_t*)arg)) = hiwdg.Init.Reload * 256 / LSI_VALUE; + } + else + { + LOG_E("Please define the value of LSI_VALUE!"); + } +#else + #error "Please define the value of LSI_VALUE!" +#endif + break; default: return -RT_ERROR; } |
