CAFE

한국직업능력교육원

[스크랩] [ARM 실습 59] CAN1 LoopBack Interrupt Test-4

작성자송명규|작성시간26.06.23|조회수5 목록 댓글 0

 

// 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;

   }

}

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼