文章目录

  • 一. 前言
  • 二. 消息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正常工作)相关推荐

  1. RTX5 | STM32H743+CubeMX+RTX5+两路FDCAN驱动+CANopen协议

    一.前言 百度网盘: 链接:https://pan.baidu.com/s/1NEccCy1S-Z5FhcInQOTzfA 提取码:fddg RTX5 | STM32H743+CubeMX+RTX5+ ...

  2. RTX5 | STM32H743+CubeMX+RTX5+两路FDCAN模板

    百度网盘: 链接:https://pan.baidu.com/s/15dy_YsLAaNDRZ7rPNUmtlA 提取码:0xm9 测试硬件:硬石科技的STM32H743工控板 CubeMX的版本:6 ...

  3. STM32H743+CubeMX-双路FDCAN同时工作的终极方案(裸机)

    文章目录 一.前言 二.CubeMX 2.1.RCC 2.2.Clock Configuration 2.3.CORTEX_M7 2.4.DEBUG 2.5.FDCAN1 2.6.倒回去配置一个FDC ...

  4. STM32H743+CubeMX-两路FDCAN同时工作的终极方案(RTX5)

    文章目录 一.前言 二.CubeMX 2.1.Clock Configuration 2.2.FDCAN1 FDCAN2 三.代码 3.1.添加BSP fdcan.c 3.3.main.c 四.调试F ...

  5. 时序图如何表现分支_静态时序分析圣经翻译计划——第五章:延迟计算 (上)...

    本章节介绍了用于布局前后时序验证的基于单元(cell-based)的设计的延迟计算(delay calculation). ● 前几章重点介绍了对互连线和单元库的建模,单元和互连线建模技术可用于获得设 ...

  6. Michael Jordan在“21世纪的计算大会”上的主题演讲:大数据的分治和统计推断

    演讲人:Michael Jordan博士 美国加州大学伯克利分校电气工程与计算机系.统计学系教授 美国科学院(NAS).美国工程院(NAE).美国文理科学院(AAAS)院士 演讲标题:Divide-a ...

  7. 数字化转型:当光子计算遇上金融领域

    原标题为[光子计算在金融领域的研究应用--聚焦"光子金融科技"新方向] 作者 | 吴永飞 王彦博 沈亦晨 杨璇 光子计算作为前沿尖端技术之一,近年来蓬勃发展.逐步成熟,目前已基本具 ...

  8. AWS计算云上下载代码命令 git clone url

    AWS计算云上下载代码命令 git clone url https://blog.csdn.net/qq_42672770/article/details/81317778

  9. php 计算两点时间距离,PHP计算地球上两点之间的距离(示例详解)

    给定经度和纬度,求地球上两点之间的距离.首先我们需要了解该问题的解决思路,然后再用PHP代码来实现计算. 此问题可以用半正矢(haversine)公式求解: 大圆距离或正交距离是球面(或地球表面)上两 ...

最新文章

  1. CNN----卷积为何能提取图像特征
  2. 黑马程序员_Java面向对象_包
  3. 销售订单的行项目里条件的增强
  4. C语言写300k文件大概多少行,为什么 DELPHI 编译出的程序一般的来说至少都有300k呢?...
  5. Linux有关Shell变量的笔记
  6. oracle undo段的作用,Oracle数据库中Undo数据段的作用及类型
  7. [转载] 山楂树之恋——01-03
  8. Java 并发编程ReentrantLock--源码解析(底层AQS实现)
  9. 人赚钱多少的本质区别在于:出售自己时间的方法不同
  10. 罗技G29方向盘与Unity的连接交互
  11. VS2015自定义编程背景
  12. C# DataGridView 冻结列或行
  13. 计算机怎么执行程序代码,代码如何运行?
  14. Java8新特性 方法引用(四)
  15. CTF-web-秋名山老司机
  16. 轻松解决夜神逍遥模拟器模拟器等模拟器无法连接问题
  17. 高级篇之使用ENC编码器实现USBCam摄像头竖屏直播的方法
  18. Leetcode_121_Best Time to Buy and Sell Stock
  19. 【机器学习】1-机器学习的分类及重要概念
  20. 服务器重启后,docker安装的mysql怎么重启

热门文章

  1. MetaModelEngine:域模型定义
  2. 江山控股附属斥资3.02亿收购云阳新能源发电100%股权并偿债
  3. javascript中依赖属性(Dependency Property)的实现
  4. 10个简单步骤,完全理解SQL
  5. 懵逼的字节跳动一面、二面凉经~
  6. 为自己的p2psearcher理想而努力地奋斗
  7. 声明变量baijq的HTML5同时
  8. [超简单]C++如何使用MySQL数据库
  9. WDM驱动程序入门(3)——安装步骤
  10. 程序员6年换了8份工作,工资从4.5K涨到40K,网友问:谁敢要你?