硬汉嵌入式论坛

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

[CAN/FDCAN] FDCAN通信问题

[复制链接]

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2025-11-10 13:34:13 | 显示全部楼层 |阅读模式
本帖最后由 wjmmmm 于 2025-11-10 13:39 编辑

请教下各位大哥,我想用PCANView跟stm32h7b0通信,但是一直不能成功。
如下

pcanview设置1

pcanview设置1

2.png
固件设置如下,输入时钟是120Mhz,

  hfdcan1.Instance = FDCAN1;
  hfdcan1.Init.FrameFormat = FDCAN_FRAME_FD_BRS;
  hfdcan1.Init.Mode = FDCAN_MODE_NORMAL;
  hfdcan1.Init.AutoRetransmission = ENABLE;
  hfdcan1.Init.TransmitPause = DISABLE;
  hfdcan1.Init.ProtocolException = DISABLE;
  hfdcan1.Init.NominalPrescaler = 15;
  hfdcan1.Init.NominalSyncJumpWidth = 2;
  hfdcan1.Init.NominalTimeSeg1 = 5;
  hfdcan1.Init.NominalTimeSeg2 = 2;
  hfdcan1.Init.DataPrescaler = 6;
  hfdcan1.Init.DataSyncJumpWidth = 1;
  hfdcan1.Init.DataTimeSeg1 = 7;
  hfdcan1.Init.DataTimeSeg2 = 2;
  hfdcan1.Init.MessageRAMOffset = 0;
  hfdcan1.Init.StdFiltersNbr = 1;
  hfdcan1.Init.ExtFiltersNbr = 0;
  hfdcan1.Init.RxFifo0ElmtsNbr = 8;
  hfdcan1.Init.RxFifo0ElmtSize = FDCAN_DATA_BYTES_64;
  hfdcan1.Init.RxFifo1ElmtsNbr = 0;
  hfdcan1.Init.RxFifo1ElmtSize = FDCAN_DATA_BYTES_64;
  hfdcan1.Init.RxBuffersNbr = 0;
  hfdcan1.Init.RxBufferSize = FDCAN_DATA_BYTES_64;
  hfdcan1.Init.TxEventsNbr = 0;
  hfdcan1.Init.TxBuffersNbr = 0;
  hfdcan1.Init.TxFifoQueueElmtsNbr = 16;
  hfdcan1.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;
  hfdcan1.Init.TxElmtSize = FDCAN_DATA_BYTES_64;


void CANBUS_SERIAL_Init(uint8_t addr)
{
  FDCAN_FilterTypeDef sFilterConfig;

  HAL_FDCAN_Stop(&hfdcan1);
  HAL_FDCAN_DeactivateNotification(&hfdcan1, FDCAN_IT_RX_FIFO0_NEW_MESSAGE | FDCAN_IT_TX_FIFO_EMPTY);

  /* Configure the FDCAN Filter */
  sFilterConfig.IdType = FDCAN_STANDARD_ID;
  sFilterConfig.FilterIndex = 0;
  sFilterConfig.FilterType = FDCAN_FILTER_MASK;
  sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
  sFilterConfig.FilterID1 = 0;
  sFilterConfig.FilterID2 = 0;

  if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig) != HAL_OK)
  {
    /* Filter configuration Error */
    Error_Handler();
  }


  HAL_FDCAN_EnableISOMode(&hfdcan1);

  if (HAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_RX_FIFO0_NEW_MESSAGE | FDCAN_IT_TX_FIFO_EMPTY, 0) != HAL_OK)
  {
    /* Notification Error */
    Error_Handler();
  }
  
    if (HAL_FDCAN_Start(&hfdcan1) != HAL_OK)
  {
    /* Start Error */
    Error_Handler();
  }
}


pcanview连接后,status是ok
3.png
发送帧后status也是ok的,但是不能进入HAL_FDCAN_RxFifo0Callback回调函数,pcanview也没有receive。
发几次帧后status就会变成error passive
4.png

这是什么问题啊大哥们




回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119430
QQ
发表于 2025-11-10 15:07:10 | 显示全部楼层
CANFD本身主频时钟别配到120M,太高了,推荐一般20,40或者80M

可以直接使用我这个帖子配套的例子测试下

基于STM32H7的双CANFD通信案例(2022-06-30)
https://forum.anfulai.cn/forum.p ... 3449&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2025-11-10 17:19:58 | 显示全部楼层
eric2013 发表于 2025-11-10 15:07
CANFD本身主频时钟别配到120M,太高了,推荐一般20,40或者80M

可以直接使用我这个帖子配套的例子测试下 ...

哥,我降到跟pcanview一样的80m还是不进回调。哥我这没您这些硬件,测试不了您给的例子。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119430
QQ
发表于 2025-11-11 11:06:35 | 显示全部楼层
wjmmmm 发表于 2025-11-10 17:19
哥,我降到跟pcanview一样的80m还是不进回调。哥我这没您这些硬件,测试不了您给的例子。

这个没关系,主要是使用CAN的配置文件就行。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-22 03:42 , Processed in 0.043894 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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