Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 27 additions & 7 deletions Src/peripheral/iwdg/iwdg_stm32.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,23 +19,43 @@
extern FDCAN_HandleTypeDef hfdcan1;
#endif // FDCAN1

#ifdef FDCAN2
extern FDCAN_HandleTypeDef hfdcan2;
#endif // FDCAN2

#if defined(FDCAN1) || defined(FDCAN2)
static bool is_bus_off(FDCAN_HandleTypeDef& handle) {
FDCAN_ProtocolStatusTypeDef status{};

if (HAL_FDCAN_GetProtocolStatus(&handle, &status) != HAL_OK) {
return true;
}

return status.BusOff != 0U;
}
#endif

namespace HAL {

void Watchdog::refresh() {
#ifdef HAL_IWDG_MODULE_ENABLED
if (reboot_required) {
return;
}
#endif // HAL_IWDG_MODULE_ENABLED

#if defined(HAL_IWDG_MODULE_ENABLED) && defined(STM32H753xx)
HAL_IWDG_Refresh(&IWDG_HANDLE);
#elif defined(HAL_IWDG_MODULE_ENABLED) && defined(FDCAN1)
if (!__HAL_FDCAN_GET_FLAG(&hfdcan1, FDCAN_FLAG_BUS_OFF)) {
bool can_is_healthy = true;

#ifdef FDCAN1
can_is_healthy = can_is_healthy && !is_bus_off(hfdcan1);
#endif

#ifdef FDCAN2
can_is_healthy = can_is_healthy && !is_bus_off(hfdcan2);
#endif

if (can_is_healthy) {
HAL_IWDG_Refresh(&IWDG_HANDLE);
}
#elif defined(HAL_IWDG_MODULE_ENABLED)
HAL_IWDG_Refresh(&IWDG_HANDLE);
#endif // HAL_IWDG_MODULE_ENABLED
}

Expand Down
Loading