diff --git a/Core/Src/canlog.c b/Core/Src/canlog.c index 930a3ba..64a1370 100644 --- a/Core/Src/canlog.c +++ b/Core/Src/canlog.c @@ -49,19 +49,11 @@ void CAN_Logger_Init(CAN_HandleTypeDef *hcan1, CAN_HandleTypeDef *hcan2) filter.FilterActivation = ENABLE; filter.SlaveStartFilterBank = 14; - HAL_NVIC_SetPriority(CAN1_RX0_IRQn, 6, 0); - HAL_NVIC_EnableIRQ(CAN1_RX0_IRQn); - - HAL_NVIC_SetPriority(CAN2_RX0_IRQn, 6, 0); - HAL_NVIC_EnableIRQ(CAN2_RX0_IRQn); - filter.FilterBank = 0; if (HAL_CAN_ConfigFilter(hcan1, &filter) != HAL_OK) Error_Handler(); - if (HAL_CAN_Start(hcan1) != HAL_OK) Error_Handler(); filter.FilterBank = 14; if (HAL_CAN_ConfigFilter(hcan2, &filter) != HAL_OK) Error_Handler(); - if (HAL_CAN_Start(hcan2) != HAL_OK) Error_Handler(); } /* END CAN_Logger_Init */ @@ -120,8 +112,13 @@ void vCANListener(void *argument) osMessageQueueId_t queue = (hcan->Instance == CAN1) ? xCAN1RxQueue : xCAN2RxQueue; CanMessage_t message; + if (HAL_CAN_Start(hcan) != HAL_OK) Error_Handler(); HAL_CAN_ActivateNotification(hcan, CAN_IT_RX_FIFO0_MSG_PENDING); + uint32_t irqn = (hcan->Instance == CAN1) ? CAN1_RX0_IRQn : CAN2_RX0_IRQn; + HAL_NVIC_SetPriority(irqn, 6, 0); + HAL_NVIC_EnableIRQ(irqn); + for (;;) { if (osMessageQueueGet(queue, &message, NULL, osWaitForever) == osOK)