STM32H7 CANFD
一、组成
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相关推荐
- STM32H7的FDCAN
一.介绍 FDCAN(Flexible Data-Rate CAN)是CAN的升级版.特点包括: 1.每帧数据段最大长度由8字节上升到64字节. 2.速度由1Mbps上升到5Mbps,甚至还可以更高. ...
- 浅析STM32H7 FDCAN(一)
一,写在前面 目前STM32H7系列全部支持CAN_FD,现在互联网上的关于STM32 CAN_FD的内容基本没有,寥寥几篇也都是关于滤波器的,所以就决定来研究一下,这篇博客就抛砖引玉了,希望大家看完 ...
- 【STM32H7教程】第91章 STM32H7的FDCAN总线基础知识和HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第91章 STM32H7的FDCAN总线基础知识和 ...
- STM32H7的CAN FD教程笔记
CAN FD(CAN with flexible data-rate)是CAN2.0协议的扩展,CAN-FD由博世开发,并由 ISO 11898-1:2015标准化. 目录 一.CAN FD协议介绍 ...
- 【STM32H7教程】第90章 STM32H7的CAN FD总线之关键知识点整理
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第90章 STM32H7的CAN FD总线之关键知 ...
- STM32H750 更好用的CANFD 用例详解
目录 前言 Message RAM分配 STM32工程搭建 串口配置 100us定时器 FDCAN配置 Bus-Off处理 新消息接收处理 发送处理 使用Xavier配合测试一下 完整工程下载 关于用 ...
- 【STM32H7教程】第92章 STM32H7的FDCAN总线应用之双FDCAN实现(支持经典CAN)
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第92章 STM32H7的FDCAN总线应用之双F ...
- 《安富莱嵌入式周报》第311期:300V可调节全隔离USB PD电源,开源交流负载分析仪,CANFD Trace,6位半多斜率精密ADC设计,开源数学库
周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Pow ...
- STM32H7的Cache和MPU
一.Cache 1.介绍 Cache又分数据缓存D-Cache和指令缓冲I-Cache,STM32H7的数据缓存和指令缓存大小都是16KB.STM32H7主频是400MHz,除了TCM和Cache以4 ...
最新文章
- 阿里巴巴一年投三家AR公司,AR购物或是最终目标
- linux 面包店 多进程,Linux下的多进程编程(一)
- 花5分钟过一遍jar包和war包的区别,以后都不会再迷茫
- Flexible 弹性盒子模型之CSS align-self 属性
- python杂记-读取png图像文件头数据
- python第二章上机实践_第二章上机实践报告
- ubuntu下各个目录的含义
- java map null吗_Java: Map里面的键和值可以为空吗?
- input select 值得绑定与获取
- linux Postfix + dovecot + extmail + extman + mysql
- CCF202104-3 DHCP服务器(100分)【模拟】
- UVA785 LA5281 Grid Colouring【DFS】
- IIS 的安装for xp3
- LumaQQ.NET For Visual Studio 2005 代码下载
- 微信开通状态检测工具
- 七个发布海外媒体稿件的关键点
- 我的小米智能家居系统
- 微信红包数字变化动态图片_微信红包数字动图下载_微信动态图片红包图下载_游戏吧...
- 区块链指南 第2章 区块链基础
- 数字视频的发展从1080i到720p再到1080p
热门文章
- 解决Type interface com.kuang.mapper.UserMapper is not known to the MapperRegistry.的问题
- 使用u-view上传图片
- Conflux伍鸣:用DAG结构提升中本聪共识的吞吐率
- 计算机内区位码默认是几进制,汉字的区位码怎么转换成十六进制?
- 日知录(15):记药盒的串口通信
- 一个屌丝程序猿的人生(一百一十五)
- 5月10日12点,看雪.深信服2021 KCTF春季赛正式开赛!
- DNS污染——domain name的解析被劫持了返回无效的ip
- Springboot2.x使用feign自定义Decoder,Advice
- 2020年10月30日提高组 B 超级蚯蚓