硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1317|回复: 3
收起左侧

[技术讨论] STM32G0B1CB FDCAN外环模式正常,正常模式发送失败,那个地方有问题

[复制链接]

38

主题

91

回帖

205

积分

高级会员

积分
205
发表于 2022-7-1 16:28:19 | 显示全部楼层 |阅读模式
STM32G0B1CB单片机FDCAN1,速率为100k,帧格式为Classic modeFDCAN设置外环模式时,收发数据一致,同时CAN数据分析义可以正常接收到数据;
FDCAN设置为正常模式时,发送失败,提示HAL_FDCAN_ERROR_FIFO_FULL错误,请各位专家帮忙分析,那个地方有问题相关代码如下:
static void MX_FDCAN1_Init(void)
{
  hfdcan1.Instance = FDCAN1;
  hfdcan1.Init.ClockDivider = FDCAN_CLOCK_DIV1;
  hfdcan1.Init.FrameFormat = FDCAN_FRAME_CLASSIC;
  hfdcan1.Init.Mode = FDCAN_MODE_NORMAL; // FDCAN_MODE_EXTERNAL_LOOPBACK 外环回模式正常
  hfdcan1.Init.AutoRetransmission = ENABLE;
  hfdcan1.Init.TransmitPause = ENABLE;
  hfdcan1.Init.ProtocolException = DISABLE;
  hfdcan1.Init.NominalPrescaler = 10; // FDCAN1时钟为48m
  hfdcan1.Init.NominalSyncJumpWidth = 1;
  hfdcan1.Init.NominalTimeSeg1 = 32;
  hfdcan1.Init.NominalTimeSeg2 = 15;
  hfdcan1.Init.DataPrescaler = 10;
  hfdcan1.Init.DataSyncJumpWidth = 1;
  hfdcan1.Init.DataTimeSeg1 = 32;
  hfdcan1.Init.DataTimeSeg2 = 15;
  hfdcan1.Init.StdFiltersNbr = 0;
  hfdcan1.Init.ExtFiltersNbr = 1;
  hfdcan1.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;
  if (HAL_FDCAN_Init(&hfdcan1) != HAL_OK)
  {
    Error_Handler();
  }
}
int main(void)
{
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_FDCAN1_Init();

  sFilterConfig.IdType = FDCAN_EXTENDED_ID;
  sFilterConfig.FilterIndex = 0;
  sFilterConfig.FilterType = FDCAN_FILTER_MASK;
  sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
  sFilterConfig.FilterID1 = 0x00000000;
  sFilterConfig.FilterID2 = 0x00000000;
  if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig) != HAL_OK)
  {
    Error_Handler();
  }

  /* Configure global filter:
     Filter all remote frames with STD and EXT ID
     Reject non matching frames with STD ID and EXT ID */
  if (HAL_FDCAN_ConfigGlobalFilter(&hfdcan1, FDCAN_REJECT, FDCAN_REJECT, FDCAN_FILTER_REMOTE, FDCAN_FILTER_REMOTE) != HAL_OK)
  {
    Error_Handler();
  }

  /* Start the FDCAN module */
  if (HAL_FDCAN_Start(&hfdcan1) != HAL_OK)
  {
    Error_Handler();
  }     

  TxData[0] = 0x31;
  TxData[1] = 0x32;
  TxData[2] = 0x33;
  TxData[3] = 0x34;
  TxData[4] = 0x35;
  TxData[5] = 0x36;
  TxData[6] = 0x37;
  TxData[7] = 0x38;
  TxHeader.Identifier = 0x11223344;
  TxHeader.IdType = FDCAN_EXTENDED_ID;
  TxHeader.TxFrameType = FDCAN_DATA_FRAME;
  TxHeader.DataLength = FDCAN_DLC_BYTES_8;
  TxHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
  TxHeader.BitRateSwitch = FDCAN_BRS_OFF;
  TxHeader.FDFormat = FDCAN_CLASSIC_CAN;
  TxHeader.TxEventFifoControl = FDCAN_STORE_TX_EVENTS;
  TxHeader.MessageMarker = 0;
  while (1)
  {
      if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &TxHeader, TxData) != HAL_OK)
      {
        //Error_Handler();
      }
      HAL_Delay(1000);

      /* Wait transmissions complete */
      while (HAL_FDCAN_GetTxFifoFreeLevel(&hfdcan1) != 3) {}

      /*##-4 Receive messages ###################################################*/
      /* Check one message is received in Rx FIFO 0 */
      if(HAL_FDCAN_GetRxFifoFillLevel(&hfdcan1, FDCAN_RX_FIFO0) != 1)
      {
        //Error_Handler();
      }

      /* Retrieve message from Rx FIFO 0 */
      if (HAL_FDCAN_GetRxMessage(&hfdcan1, FDCAN_RX_FIFO0, &RxHeader, RxData) != HAL_OK)
      {
        //Error_Handler();
      }

      /* Compare payload to expected data */
      if ((TxData[7] == RxData[7]) && (TxHeader.Identifier == RxHeader.Identifier))
      {
        memset(RxData,0,sizeof(RxData));
        memset(&RxHeader,0,sizeof(RxHeader));
      }
  }
}


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107077
QQ
发表于 2022-7-2 10:32:02 | 显示全部楼层
帮顶,参数有点多,看不出什么问题来。
回复

使用道具 举报

38

主题

91

回帖

205

积分

高级会员

积分
205
 楼主| 发表于 2022-7-22 15:07:25 | 显示全部楼层
eric2013 发表于 2022-7-2 10:32
帮顶,参数有点多,看不出什么问题来。

有可能是硬件问题,有没有可以参考的FDCAN硬件设计原理图?
回复

使用道具 举报

38

主题

91

回帖

205

积分

高级会员

积分
205
 楼主| 发表于 2022-9-30 17:02:38 | 显示全部楼层
问题已解决,是can收发器有问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-17 07:56 , Processed in 0.153908 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表