Skip to main content
Graduate
December 10, 2025
Solved

No CAN TX interrupt

  • December 10, 2025
  • 1 reply
  • 71 views

I've attempted to get an interrupt when one of the three CAN transmit mailboxes empties. In MX:

avidroneg_0-1765403742178.png

It generated:

 /* CAN interrupt Init */
 HAL_NVIC_SetPriority(CAN_TX_IRQn, 0, 0);
 HAL_NVIC_EnableIRQ(CAN_TX_IRQn);
 HAL_NVIC_SetPriority(CAN_RX0_IRQn, 0, 0);
 HAL_NVIC_EnableIRQ(CAN_RX0_IRQn);
 HAL_NVIC_SetPriority(CAN_RX1_IRQn, 0, 0);
 HAL_NVIC_EnableIRQ(CAN_RX1_IRQn);
 HAL_NVIC_SetPriority(CAN_SCE_IRQn, 0, 0);
 HAL_NVIC_EnableIRQ(CAN_SCE_IRQn);

 

I am using the HAL method HAL_CAN_AddTxMessage. This method seems to be working because I see CAN data on the wire. However, I never get an interrupt. I have a breakpoint on this function:

void CAN_TX_IRQHandler(void)
{
 /* USER CODE BEGIN CAN_TX_IRQn 0 */

 /* USER CODE END CAN_TX_IRQn 0 */
 HAL_CAN_IRQHandler(&hcan);
 /* USER CODE BEGIN CAN_TX_IRQn 1 */

 /* USER CODE END CAN_TX_IRQn 1 */
}

 

and it never gets there. Why might this be?

    This topic has been closed for replies.
    Best answer by Karl Yamashita

    More than likely you didn't activate the notification

     

    if (HAL_CAN_ActivateNotification(msg->hcan, CAN_IT_RX_FIFO0_MSG_PENDING | CAN_IT_TX_MAILBOX_EMPTY) != HAL_OK)
    {
    	Error_Handler();
    }

     

     

    1 reply

    Graduate II
    December 11, 2025

    More than likely you didn't activate the notification

     

    if (HAL_CAN_ActivateNotification(msg->hcan, CAN_IT_RX_FIFO0_MSG_PENDING | CAN_IT_TX_MAILBOX_EMPTY) != HAL_OK)
    {
    	Error_Handler();
    }