STM32H743+CubeMX-计算FDCAN2上的MessageRAMOffset(使两路FDCAN正常工作)
文章目录
- 一. 前言
- 二. 消息RAM
- 三. “错误”配置之同时使用两路FDCAN
- 3.1 FDCAN1
- 3.2 FDCAN2
- 3.3 消息RAM的分布
- 四. “正确”配置之同时使用两路FDCAN
- 4.1 FDCAN1
- 4.2 FDCAN2
- 4.3 消息RAM的分布
- 五. 计算FDCAN2的Message RAM Offset
- 5.1 SRAMCAN_BASE
- 5.2 hfdcan1.msgRam.EndAddress
- 计算过程
一. 前言
要在STM32H7上使用FDCAN控制器,需要配置很多参数。例如,波特率,CAN模式,工作模式,TXFIFO,RXFIFO,Message RAM Offset等等。今天我想聊聊Message RAM Offset这个“大坑”,这个”坑“只有当你需要同时使用两路FDCAN控制器的时候才会出现。所以,想让STM32H7上的两路FDCAN同时正常工作的话,理解Message RAM Offset是很必要的。
二. 消息RAM
在《STM32H7x3编程参考手册》上,有介绍FDCAN1与FDCAN2都共用同一块RAM。
《STM32H7x3编程参考手册》也强调这一块RAM配置的重要性,而且系统也不会帮你检查。
三. “错误”配置之同时使用两路FDCAN
3.1 FDCAN1
3.2 FDCAN2
3.3 消息RAM的分布
在STM32CubeMX上,FDCAN1与FDCAN2的Message RAM Offset都设置为0。这样的话,FDCAN1的消息RAM与FDCAN2的消息RAM重叠在一起了。最终,会导致FDCAN2无法正常接收报文。
四. “正确”配置之同时使用两路FDCAN
4.1 FDCAN1
4.2 FDCAN2
4.3 消息RAM的分布
按照这样去设置两路FDCAN的Message RAM Offset的话,就能正常工作了。FDCAN1与FDCAN2各有自己的消息RAM了。
这里还有一个疑问,FDCAN2的Message RAM Offset为什么要设置0x214呢?依据是什么?接着,就要从SRAMCAN_BASE与hfdcan1.msgRam.EndAddress入手了。
五. 计算FDCAN2的Message RAM Offset
5.1 SRAMCAN_BASE
SRAMCAN_BASE的值是0x4000AC00,在《STM32H7x3编程参考手册》的第103页能找到。
在HAL库也能找到。
5.2 hfdcan1.msgRam.EndAddress
hfdcan1.msgRam.EndAddress需要用MDK或者IAR在DEBUG模式下才能看到具体的值,因为hfdcan1.msgRam.EndAddress的值跟FDCAN1的配置参数有关,如果改变FDCAN1的配置参数的话,那么hfdcan1.msgRam.EndAddress也很可能变化。
计算过程
FDCAN2的Message RAM Offset = hfdcan1.msgRam.EndAddress - SRAMCAN_BASE , = 0x4000AE14 - 0x4000AC00 , = 0x214.
直接用代码编写公式也是不错的方法。
STM32H743+CubeMX-计算FDCAN2上的MessageRAMOffset(使两路FDCAN正常工作)相关推荐
- RTX5 | STM32H743+CubeMX+RTX5+两路FDCAN驱动+CANopen协议
一.前言 百度网盘: 链接:https://pan.baidu.com/s/1NEccCy1S-Z5FhcInQOTzfA 提取码:fddg RTX5 | STM32H743+CubeMX+RTX5+ ...
- RTX5 | STM32H743+CubeMX+RTX5+两路FDCAN模板
百度网盘: 链接:https://pan.baidu.com/s/15dy_YsLAaNDRZ7rPNUmtlA 提取码:0xm9 测试硬件:硬石科技的STM32H743工控板 CubeMX的版本:6 ...
- STM32H743+CubeMX-双路FDCAN同时工作的终极方案(裸机)
文章目录 一.前言 二.CubeMX 2.1.RCC 2.2.Clock Configuration 2.3.CORTEX_M7 2.4.DEBUG 2.5.FDCAN1 2.6.倒回去配置一个FDC ...
- STM32H743+CubeMX-两路FDCAN同时工作的终极方案(RTX5)
文章目录 一.前言 二.CubeMX 2.1.Clock Configuration 2.2.FDCAN1 FDCAN2 三.代码 3.1.添加BSP fdcan.c 3.3.main.c 四.调试F ...
- 时序图如何表现分支_静态时序分析圣经翻译计划——第五章:延迟计算 (上)...
本章节介绍了用于布局前后时序验证的基于单元(cell-based)的设计的延迟计算(delay calculation). ● 前几章重点介绍了对互连线和单元库的建模,单元和互连线建模技术可用于获得设 ...
- Michael Jordan在“21世纪的计算大会”上的主题演讲:大数据的分治和统计推断
演讲人:Michael Jordan博士 美国加州大学伯克利分校电气工程与计算机系.统计学系教授 美国科学院(NAS).美国工程院(NAE).美国文理科学院(AAAS)院士 演讲标题:Divide-a ...
- 数字化转型:当光子计算遇上金融领域
原标题为[光子计算在金融领域的研究应用--聚焦"光子金融科技"新方向] 作者 | 吴永飞 王彦博 沈亦晨 杨璇 光子计算作为前沿尖端技术之一,近年来蓬勃发展.逐步成熟,目前已基本具 ...
- AWS计算云上下载代码命令 git clone url
AWS计算云上下载代码命令 git clone url https://blog.csdn.net/qq_42672770/article/details/81317778
- php 计算两点时间距离,PHP计算地球上两点之间的距离(示例详解)
给定经度和纬度,求地球上两点之间的距离.首先我们需要了解该问题的解决思路,然后再用PHP代码来实现计算. 此问题可以用半正矢(haversine)公式求解: 大圆距离或正交距离是球面(或地球表面)上两 ...
最新文章
- CNN----卷积为何能提取图像特征
- 黑马程序员_Java面向对象_包
- 销售订单的行项目里条件的增强
- C语言写300k文件大概多少行,为什么 DELPHI 编译出的程序一般的来说至少都有300k呢?...
- Linux有关Shell变量的笔记
- oracle undo段的作用,Oracle数据库中Undo数据段的作用及类型
- [转载] 山楂树之恋——01-03
- Java 并发编程ReentrantLock--源码解析(底层AQS实现)
- 人赚钱多少的本质区别在于:出售自己时间的方法不同
- 罗技G29方向盘与Unity的连接交互
- VS2015自定义编程背景
- C# DataGridView 冻结列或行
- 计算机怎么执行程序代码,代码如何运行?
- Java8新特性 方法引用(四)
- CTF-web-秋名山老司机
- 轻松解决夜神逍遥模拟器模拟器等模拟器无法连接问题
- 高级篇之使用ENC编码器实现USBCam摄像头竖屏直播的方法
- Leetcode_121_Best Time to Buy and Sell Stock
- 【机器学习】1-机器学习的分类及重要概念
- 服务器重启后,docker安装的mysql怎么重启