ST意法半导体
直播中

徐胤

7年用户 1072经验值
私信 关注
[问答]

F0上的CANBUS无法接收要怎么处理?

我正在定制 PCB 上使用 STM32F072CB 设备。 从这个 STM32 example 开始工作
我只想实现一个基本的环回测试。但是我似乎没有收到任何数据。
HAL_CAN_Init()调用成功
HAL_CAN_Start()调用成功
HAL_CAN_ActivateNotification(&hcan, CAN_IT_RX_FIFO0_MSG_PENDING) 被成功调用并且在收到任何消息时应该调用 HAL_CAN_RxFifo0MsgPendingCallback()。
然后我从 HAL_CAN_AddTxMessage() 传输一条基本消息,我可以看到它已从 HAL_CAN_TxMailbox0CompleteCallback() 完成。
但是仍然没有产生接收中断。
  • static void MX_CAN_Init(void)
  • {
  •   hcan.Instance = CAN;
  •   hcan.Init.Prescaler = 8;
  •   hcan.Init.Mode = CAN_MODE_SILENT_LOOPBACK;
  •   hcan.Init.SyncJumpWidth = CAN_SJW_1TQ;
  •   hcan.Init.TimeSeg1 = CAN_BS1_5TQ;
  •   hcan.Init.TimeSeg2 = CAN_BS2_6TQ;
  •   hcan.Init.TimeTriggeredMode = DISABLE;
  •   hcan.Init.AutoBusOff = DISABLE;
  •   hcan.Init.AutoWakeUp = DISABLE;
  •   hcan.Init.AutoRetransmission = ENABLE;
  •   hcan.Init.ReceiveFifoLocked = DISABLE;
  •   hcan.Init.TransmitFifoPriority = DISABLE;
  •   if (HAL_CAN_Init(&hcan) != HAL_OK)
  •   {
  •     Error_Handler();
  •   }
  •   /* USER CODE BEGIN CAN_Init 2 */
  •   if (HAL_CAN_Start(&hcan) != HAL_OK)
  •   {
  •     /* Start Error */
  •     Error_Handler();
  •   }
  •   if (HAL_CAN_ActivateNotification(&hcan, CAN_IT_RX_FIFO0_MSG_PENDING) != HAL_OK)
  •   {
  •     /* Notification Error */
  •     Error_Handler();
  •   }
  •   /* USER CODE END CAN_Init 2 */
  • }
  • void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) {
  •         if (HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &RxHeader, RxData) == HAL_OK)
  •                 CANprocess();
  • }
  • void CAN_TX_Echo_Test() {
  •         TxData[0] = 0xbe;
  •         TxData[1] = 0xef;
  •         /* Start the Transmission process */
  •         if (HAL_CAN_AddTxMessage(&hcan, &TxHeader, TxData, &TxMailbox) != HAL_OK) {
  •                 /* Transmission request Error */
  •                 Error_Handler();
  •         }
  • }








回帖(1)

何思婷

2023-2-1 15:17:57
您必须设置并启用一些 rx 过滤器。
举报

更多回帖

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