你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32N6750DK开发板测评 FDCAN通信测试

[复制链接]
短笛君 发布时间:2025-3-31 01:08

4ed5a141338946e4d26e6dbeec1d250.png

首先根据N6570DK的拓展引脚 在外设中打开FDCAN外设

ceb6ee55804df697c72b96e2aa3cc11.png

可以看到FDCAN相比于传统的CAN 具有更多的配置,但是有一部分是我们用不到的 我们可以忽略掉

f10e4433453dccf5c3c45eb4de94d33.png

图中位CAN2.0B和CAN-FD的差异

首先最大的一个就是传输速度的差异 CAN-FD最高速度可以做到8Mbps 而CAN2.0速度仅为1Mbps

其次就是帧长度 CANFD的帧数据段长度可以做到64bit 传统CAN只能8bit

CanFD新增了FDF、BRS、ESI位

FDF:表示 CAN 报文还是 CAN-FD 报文;BRS:表示位速率转换,该位隐性时,速率可变(即 BSR 到 CRC 使用转换速率传输),该位为显性时,以正常的 CAN-FD 总线速率传输(恒定速率);ESI:表示发送节点状态。

CANFD可以向下兼容CAN2.0 但是CAN2.0不能发送FD报文

控制器配置

9e8a1c619f72f59f8ed4e2fe4087e01.png

首先要选择工作模式 要把控制器配置为Classic Mode 这样才能配合外设发送报文

其次是时钟分频系数 以及采样点计算 can推荐的采样点一般设定到75%-85%左右 过高过低或者都会有问题

最后就是波特率的计算 设定为1Mbps

外设配置代码


static void MX_FDCAN1_Init(void)
{

  /* USER CODE BEGIN FDCAN1_Init 0 */

  /* USER CODE END FDCAN1_Init 0 */

  /* USER CODE BEGIN FDCAN1_Init 1 */

  /* USER CODE END FDCAN1_Init 1 */
  hfdcan1.Instance = FDCAN1;
  hfdcan1.Init.ClockDivider = FDCAN_CLOCK_DIV1;
  hfdcan1.Init.FrameFormat = FDCAN_FRAME_CLASSIC;
  hfdcan1.Init.Mode = FDCAN_MODE_NORMAL;
  hfdcan1.Init.AutoRetransmission = ENABLE;
  hfdcan1.Init.TransmitPause = ENABLE;
  hfdcan1.Init.ProtocolException = DISABLE;
  hfdcan1.Init.NominalPrescaler = 1;
  hfdcan1.Init.NominalSyncJumpWidth = 16;
  hfdcan1.Init.NominalTimeSeg1 = 63;
  hfdcan1.Init.NominalTimeSeg2 = 16;
  hfdcan1.Init.DataPrescaler = 1;
  hfdcan1.Init.DataSyncJumpWidth = 4;
  hfdcan1.Init.DataTimeSeg1 = 5;
  hfdcan1.Init.DataTimeSeg2 = 4;
  hfdcan1.Init.StdFiltersNbr = 1;
  hfdcan1.Init.ExtFiltersNbr = 0;
  hfdcan1.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;
  if (HAL_FDCAN_Init(&hfdcan1) != HAL_OK)
  {
    Error_Handler();
  }

还有发送配置

static void FDCAN_Config(void)
{
  FDCAN_FilterTypeDef sFilterConfig;

  /* Configure Rx filter */
  sFilterConfig.IdType = FDCAN_STANDARD_ID;
  sFilterConfig.FilterIndex = 0;
  sFilterConfig.FilterType = FDCAN_FILTER_MASK;
  sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
  sFilterConfig.FilterID1 = 0x0;
  sFilterConfig.FilterID2 = 0x7FF;
  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();
  }

  if (HAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0) != HAL_OK)
  {
    Error_Handler();
  }

  /* Prepare Tx Header */
  TxHeader.Identifier = 0x205;
  TxHeader.IdType = FDCAN_STANDARD_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_NO_TX_EVENTS;
  TxHeader.MessageMarker = 0;
}

完成以上两个配置 只需要在Txbuffer里面填充数据就可以发送出去了

发送数据前 一定要确认好CAN PHY连接完好以及120Ohm电阻并联到上面 否则会出现各种问题!!!

3cb7bb5275f0784e70d9282233d848f.png

使用CAN分析仪就可以接收到N6570发送的数据了 ID为0x205 8bit数据

收藏 评论0 发布时间:2025-3-31 01:08

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版