一、组成

FDCAN1, FDCAN2, CANRAM

二、CANRAM 组成

11 位滤波器、 29 位滤波器、 RX FIFO0、 RX FIFO1、 RX 缓冲区、 TX FIFO、 TX 缓冲区、 触发存储器

三、配置(完整代码见官方例程)

1、选择通道        hfdcan.Instance = FDCANx;

2、选择协议        hfdcan.Init.FrameFormat = FDCAN_FRAME_FD_BRS;

3、选择模式        hfdcan.Init.Mode = FDCAN_MODE_NORMAL;

4、是否重发        hfdcan.Init.AutoRetransmission = ENABLE;

5、是否暂停        hfdcan.Init.TransmitPause = DISABLE;

6、异常处理        hfdcan.Init.ProtocolException = ENABLE;

7、时钟相关        hfdcan.Init.NominalPrescaler = 0x1; /* tq = NominalPrescaler x (1/fdcan_ker_ck) */
  hfdcan.Init.NominalSyncJumpWidth = 0x8;
  hfdcan.Init.NominalTimeSeg1 = 0x1F; /* NominalTimeSeg1 = Propagation_segment + Phase_segment_1 */
  hfdcan.Init.NominalTimeSeg2 = 0x8;

8、硬件协议相关        hfdcan.Init.DataPrescaler = 0x1;
  hfdcan.Init.DataSyncJumpWidth = 0x4;
  hfdcan.Init.DataTimeSeg1 = 0x5; /* DataTimeSeg1 = Propagation_segment + Phase_segment_1 */
  hfdcan.Init.DataTimeSeg2 = 0x4;

9、内存分布        hfdcan.Init.MessageRAMOffset = 0;

每个通道,都可以配置  CANRAM 组成中每个的 起始地址 和 结束地址,且顺序无关,但不能通过HAL库API实现,因为HAL库API FDCAN_CalcultateRamBlockAddresses 按如下顺序组织:

11 位滤波器、 29 位滤波器、 RX FIFO0、 RX FIFO1、 RX 缓冲区、 TX FIFO、 TX 缓冲区、 触发存储器,具体代码如下:

hfdcan->msgRam.StandardFilterSA = SRAMCAN_BASE + (hfdcan->Init.MessageRAMOffset * 4U);
  hfdcan->msgRam.ExtendedFilterSA = hfdcan->msgRam.StandardFilterSA + (hfdcan->Init.StdFiltersNbr * 4U);
  hfdcan->msgRam.RxFIFO0SA = hfdcan->msgRam.ExtendedFilterSA + (hfdcan->Init.ExtFiltersNbr * 2U * 4U);
  hfdcan->msgRam.RxFIFO1SA = hfdcan->msgRam.RxFIFO0SA + (hfdcan->Init.RxFifo0ElmtsNbr * hfdcan->Init.RxFifo0ElmtSize * 4U);
  hfdcan->msgRam.RxBufferSA = hfdcan->msgRam.RxFIFO1SA + (hfdcan->Init.RxFifo1ElmtsNbr * hfdcan->Init.RxFifo1ElmtSize * 4U);
  hfdcan->msgRam.TxEventFIFOSA = hfdcan->msgRam.RxBufferSA + (hfdcan->Init.RxBuffersNbr * hfdcan->Init.RxBufferSize * 4U);
  hfdcan->msgRam.TxBufferSA = hfdcan->msgRam.TxEventFIFOSA + (hfdcan->Init.TxEventsNbr * 2U * 4U);
  hfdcan->msgRam.TxFIFOQSA = hfdcan->msgRam.TxBufferSA + (hfdcan->Init.TxBuffersNbr * hfdcan->Init.TxElmtSize * 4U);

即只是偏移了而已,除非自己重写或改HAL库代码;

10、CANRAM 组成中每个的 起始地址 和 结束地址

11 位滤波器 个数         hfdcan.Init.StdFiltersNbr = 1;
  29 位滤波器 个数        hfdcan.Init.ExtFiltersNbr = 0;
  RX FIFO0 个数           hfdcan.Init.RxFifo0ElmtsNbr = 2;
  RX FIFO0  大小          hfdcan.Init.RxFifo0ElmtSize = FDCAN_DATA_BYTES_8;
  RX FIFO1 个数           hfdcan.Init.RxFifo1ElmtsNbr = 0;
  RX 缓冲区 个数          hfdcan.Init.RxBuffersNbr = 0;
  TX FIFO 个数             hfdcan.Init.TxEventsNbr = 0;
  TX 缓冲区 个数          hfdcan.Init.TxBuffersNbr = 0;
   TX 大小                     hfdcan.Init.TxElmtSize = FDCAN_DATA_BYTES_8;

四、接收配置

滤波器类型        sFilterConfig.IdType = FDCAN_STANDARD_ID;
  滤波器编号        sFilterConfig.FilterIndex = 0;
  滤波器类型        sFilterConfig.FilterType = FDCAN_FILTER_MASK;
  匹配存储位置     sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
  匹配 ID               sFilterConfig.FilterID1 = 0x111;
  匹配 ID               sFilterConfig.FilterID2 = 0x7FF;
  增加滤波器        HAL_FDCAN_ConfigFilter(&hfdcan, &sFilterConfig);

HAL_FDCAN_GetRxMessage(&hfdcan, FDCAN_RX_FIFO0, &RxHeader, RxData);

五、发送配置

ID                TxHeader.Identifier = 0x111;
  ID 类型        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_ON;
  协议类型     TxHeader.FDFormat = FDCAN_FD_CAN;
  发送控制     TxHeader.TxEventFifoControl = FDCAN_NO_TX_EVENTS;
  发送标记     TxHeader.MessageMarker = 0;

HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan, &TxHeader, &TxData[0]);

六、空间分配合法性

        特别注意:具体的划分由软件编写者自行决定,检查,硬件和HAL库不管是否合适。

STM32H7 CANFD相关推荐

  1. STM32H7的FDCAN

    一.介绍 FDCAN(Flexible Data-Rate CAN)是CAN的升级版.特点包括: 1.每帧数据段最大长度由8字节上升到64字节. 2.速度由1Mbps上升到5Mbps,甚至还可以更高. ...

  2. 浅析STM32H7 FDCAN(一)

    一,写在前面 目前STM32H7系列全部支持CAN_FD,现在互联网上的关于STM32 CAN_FD的内容基本没有,寥寥几篇也都是关于滤波器的,所以就决定来研究一下,这篇博客就抛砖引玉了,希望大家看完 ...

  3. 【STM32H7教程】第91章 STM32H7的FDCAN总线基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第91章       STM32H7的FDCAN总线基础知识和 ...

  4. STM32H7的CAN FD教程笔记

    CAN FD(CAN with flexible data-rate)是CAN2.0协议的扩展,CAN-FD由博世开发,并由 ISO 11898-1:2015标准化. 目录 一.CAN FD协议介绍 ...

  5. 【STM32H7教程】第90章 STM32H7的CAN FD总线之关键知识点整理

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第90章       STM32H7的CAN FD总线之关键知 ...

  6. STM32H750 更好用的CANFD 用例详解

    目录 前言 Message RAM分配 STM32工程搭建 串口配置 100us定时器 FDCAN配置 Bus-Off处理 新消息接收处理 发送处理 使用Xavier配合测试一下 完整工程下载 关于用 ...

  7. 【STM32H7教程】第92章 STM32H7的FDCAN总线应用之双FDCAN实现(支持经典CAN)

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第92章       STM32H7的FDCAN总线应用之双F ...

  8. 《安富莱嵌入式周报》第311期:300V可调节全隔离USB PD电源,开源交流负载分析仪,CANFD Trace,6位半多斜率精密ADC设计,开源数学库

    周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Pow ...

  9. STM32H7的Cache和MPU

    一.Cache 1.介绍 Cache又分数据缓存D-Cache和指令缓冲I-Cache,STM32H7的数据缓存和指令缓存大小都是16KB.STM32H7主频是400MHz,除了TCM和Cache以4 ...

最新文章

  1. 阿里巴巴一年投三家AR公司,AR购物或是最终目标
  2. linux 面包店 多进程,Linux下的多进程编程(一)
  3. 花5分钟过一遍jar包和war包的区别,以后都不会再迷茫
  4. Flexible 弹性盒子模型之CSS align-self 属性
  5. python杂记-读取png图像文件头数据
  6. python第二章上机实践_第二章上机实践报告
  7. ubuntu下各个目录的含义
  8. java map null吗_Java: Map里面的键和值可以为空吗?
  9. input select 值得绑定与获取
  10. linux Postfix + dovecot + extmail + extman + mysql
  11. CCF202104-3 DHCP服务器(100分)【模拟】
  12. UVA785 LA5281 Grid Colouring【DFS】
  13. IIS 的安装for xp3
  14. LumaQQ.NET For Visual Studio 2005 代码下载
  15. 微信开通状态检测工具
  16. 七个发布海外媒体稿件的关键点
  17. 我的小米智能家居系统
  18. 微信红包数字变化动态图片_微信红包数字动图下载_微信动态图片红包图下载_游戏吧...
  19. 区块链指南 第2章 区块链基础
  20. 数字视频的发展从1080i到720p再到1080p

热门文章

  1. 解决Type interface com.kuang.mapper.UserMapper is not known to the MapperRegistry.的问题
  2. 使用u-view上传图片
  3. Conflux伍鸣:用DAG结构提升中本聪共识的吞吐率
  4. 计算机内区位码默认是几进制,汉字的区位码怎么转换成十六进制?
  5. 日知录(15):记药盒的串口通信
  6. 一个屌丝程序猿的人生(一百一十五)
  7. 5月10日12点,看雪.深信服2021 KCTF春季赛正式开赛!
  8. DNS污染——domain name的解析被劫持了返回无效的ip
  9. Springboot2.x使用feign自定义Decoder,Advice
  10. 2020年10月30日提高组 B 超级蚯蚓