Arduino_Core_STM32 icon indicating copy to clipboard operation
Arduino_Core_STM32 copied to clipboard

FDCAN bus interrupts are not handled for the STM32G0B1 causing an infinite loop

Open rondlh opened this issue 2 years ago • 1 comments

With my limited understanding I see the following:

The FDCAN implementation on the STM32G0B1 uses interrupt "TIM16_FDCAN_IT0_IRQn", which calls "TIM16_IRQHandler(void)" (in HardwareTimer.cpp). In "timer.h" it says: #define TIM16_IRQHandler TIM16_FDCAN_IT0_IRQHandler.

"TIM16_IRQHandler" should analyze the interrupt source and forward to "HAL_FDCAN_IRQHandler" if the FDCAN bus is the interrupt source so the FDCAN callbacks can be used/called.

Currently TIM16_IRQHandler only processes interrupts triggered by Tim16, so the FDCAN bus callbacks cannot be used, and even worse, the interrupt flag is not cleared causing an infinite loop.

"TIM16_IRQHandler" in HardwareTimer.cpp

void TIM16_IRQHandler(void)
  {
    if (HardwareTimer_Handle[TIMER16_INDEX]) {
      HAL_TIM_IRQHandler(&HardwareTimer_Handle[TIMER16_INDEX]->handle);
    }
  }

rondlh avatar Dec 07 '23 20:12 rondlh

Hi @rondlh right, as we have no official support for FDCAN it is not added. Do not hesitate to provide a PR to implement this.

fpistm avatar Dec 08 '23 08:12 fpistm

Hi @rondlh, I've made a PR to fix this issue, see #2301. If you can test and give us a feedback, it would be very appreciated.

fpistm avatar Mar 11 '24 14:03 fpistm