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

STM32 MP1 CANFD设置

[复制链接]
STMCU小助手 发布时间:2022-10-2 23:45
AutoRetransmission 设置为enable 可以防止通讯速度过快时丢包
8a48c4c682fd4c7db2a467cc4eb5607d.png

下图所示的TxBuffersNbr 和 TxFifoQueueElmtsNbr 貌似是共享32个地址的,两者加起来不能超过32

f55c94af006e4dad8ca4afae18f95003.png

1.设置硬件参数(引脚,时钟)
1.1 启用FDCAN1,并设置参数

启用FDCAN后参数设置如下:
设置FDCAN引脚,手头板子tx rx分别为PH13 PI9

f595497037214aa8be39a4e2e2de92d5.png

设置参数

b32e89d27eba4adaae2d166016b40a00.png

其中elmets Size因为采用classicmode 所以选用8bytes,注意 buffers nbr MP157rx和tx最多有32个buffer,offset貌似不设置也没事

时钟设置

5bb9e3f56ed24aec87253d86d2059907.png

1.2启用FDCAN
首先可以设置过滤器,随后启动FDCAN

  1. /*##-1 Configure the FDCAN filters ########################################*/
  2.   /* Configure standard ID reception filter to Rx FIFO 0 */
  3.   sFilterConfig.IdType = FDCAN_STANDARD_ID;
  4.   sFilterConfig.FilterIndex = 0;
  5.   sFilterConfig.FilterType = FDCAN_FILTER_MASK;
  6.   sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
  7.   sFilterConfig.FilterID1 = 0x444;
  8.   sFilterConfig.FilterID2 = 0x555;
  9.   if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig) != HAL_OK)
  10.   {
  11.     Error_Handler();
  12.   }

  13.   /* Configure extended ID reception filter to Rx FIFO 1 */
  14.   sFilterConfig.IdType = FDCAN_EXTENDED_ID;
  15.   sFilterConfig.FilterIndex = 0;
  16.   sFilterConfig.FilterType = FDCAN_FILTER_MASK;
  17.   sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO1;
  18.   sFilterConfig.FilterID1 = 0x1111111;
  19.   sFilterConfig.FilterID2 = 0x2222222;
  20.   if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig) != HAL_OK)
  21.   {
  22.     Error_Handler();
  23.   }

  24.   /*##-2 Start FDCAN controller (continuous listening CAN bus) ##############*/
  25.   if (HAL_FDCAN_Start(&hfdcan1) != HAL_OK)
  26.   {
  27.     Error_Handler();
  28.   }
  29.   /* USER CODE END 2 */
复制代码

发送数据

  1.   /*##-3 Transmit messages ##################################################*/
  2.   /* Add message to Tx FIFO */
  3.   TxHeader.Identifier = 0x444;
  4.   TxHeader.IdType = FDCAN_STANDARD_ID;
  5.   TxHeader.TxFrameType = FDCAN_DATA_FRAME;
  6.   TxHeader.DataLength = FDCAN_DLC_BYTES_8;
  7.   TxHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
  8.   TxHeader.BitRateSwitch = FDCAN_BRS_ON;
  9.   TxHeader.FDFormat = FDCAN_FD_CAN;
  10.   TxHeader.TxEventFifoControl = FDCAN_STORE_TX_EVENTS;
  11.   TxHeader.MessageMarker = 0x52;
  12.   if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &TxHeader, TxData0) != HAL_OK)
  13.   {
  14.     Error_Handler();
  15.   }
复制代码

等待发送完成

  1.   /* Check transmission occurred before timeout */
  2.   while(HAL_FDCAN_IsTxBufferMessagePending(&hfdcan1, FDCAN_TX_BUFFER0 | FDCAN_TX_BUFFER1 | FDCAN_TX_BUFFER2) != 0)
  3.   {
  4.     if((HAL_GetTick() - Tickstart) > TX_FAST_TIMEOUT)
  5.     {
  6.       Error_Handler();
  7.       break;
  8.     }
  9.   }
复制代码

查询接收到的can数据

  1.   while(HAL_FDCAN_GetRxFifoFillLevel(&hfdcan1, FDCAN_RX_FIFO0) != 1)
  2.   {
  3.     if((HAL_GetTick() - Tickstart) > RX_FAST_TIMEOUT)
  4.     {
  5.       Error_Handler();
  6.       break;
  7.     }
  8.   }
复制代码

获取数据

  1.   if (HAL_FDCAN_GetRxMessage(&hfdcan1, FDCAN_RX_FIFO0, &RxHeader, RxData) != HAL_OK)
  2.   {
  3.     Error_Handler();
  4.   }
复制代码

————————————————
版权声明:少侠来一本秘籍吧


收藏 评论0 发布时间:2022-10-2 23:45

举报

0个回答

所属标签

相似分享

官网相关资源

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