// CAN RX 인터럽트 콜백 함수
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
{
if (hcan->Instance == CAN1) // 수신은 CAN1만 수신 CAN2로부터 인터럽트가 왔을 때
{
if (HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &RxHeader, RxData) == HAL_OK)
{
// 수신 데이터 RxData 처리
can_rx_end_flag = 1; // can1
}
}
else if(hcan->Instance == CAN2)
{
can_rx_end_flag = 2; // can2
}
}
while (1)
{
CAN1_Tx();
HAL_Delay(1000);
if(rx_end_flag == 1)
{
printf("CAN1 RX ID: 0x%03lX, DLC: %lu, Data: ", RxHeader.StdId, (uint32_t)RxHeader.DLC);
printf("CAN1 RX = %s\r\n", RxData);
memset(RxData, 0, sizeof(RxData));
rx_end_flag = 0;
}
else if(rx_end_flag == 2)
{
printf("CAN2 RX ID: 0x%03lX, DLC: %lu, Data: ", RxHeader.StdId, (uint32_t)RxHeader.DLC);
printf("CAN2 RX = %s\r\n", RxData);
memset(RxData, 0, sizeof(RxData));
rx_end_flag = 0;
}
}