ST意法半导体
直播中

杨火亭

7年用户 989经验值
擅长:控制/MCU
私信 关注
[问答]

求助,使用STM32F4如何区分接收到哪个CANBUS的消息?

我有一个 STM32F403ZH Nucleo 板,它连接到三个独立的 CAN 通道。我希望能够在任何通道上接收相同的消息(相同的标识符、波特率等),并让微控制器能够确定它来自哪个通道,以便以不同的方式处理它。这将使我的三个相同的设备不必重新编程即可发送具有不同标识符的消息。
我一直在查看参考手册,但我认为这是不可能的。3 个不同的 CAN 控制器都向主控制器发送相同的中断。当消息被发送到 FIFO 时,或当主控制器从 FIFO 接收消息时,不会存储哪个 CAN 控制器发送中断或接收消息的痕迹。我可以通过将它们输出到不同的 FIFO 而不是三个来区分两个通道。如果有人知道一种方法,那么我很乐意听到它。谢谢你。









回帖(1)

吴思锋

2023-2-2 10:48:15
您需要比较 CAN 实例


  • void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
  • {
  •         if(hcan->Instance == hcan1.Instance)
  •         {
  •                 if(HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &can1_header, can1_data) != HAL_OK)
  •                 {
  •                         // error handler
  •                 }
  •         }
  •         else if(hcan->Instance == hcan2.Instance)
  •         {
  •                 if(HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &can2_header, can2_data) != HAL_OK)
  •                 {
  •                         // error handler
  •                 }
  •         }
  • }
举报

更多回帖

发帖
×
20
完善资料,
赚取积分