STM32H743+CubeMX-计算FDCAN2上的MessageRAMOffset(使两路FDCAN正常工作)

一. 前言

要在STM32H7上使用FDCAN控制器,需要配置很多参数。例如,波特率,CAN模式,工作模式,TXFIFO,RXFIFO,Message RAM Offset等等。今天我想聊聊Message RAM Offset这个“大坑”,这个”坑“只有当你需要同时使用两路FDCAN控制器的时候才会出现。所以,想让STM32H7上的两路FDCAN同时正常工作的话,理解Message RAM Offset是很必要的。
STM32CubeMX1

二. 消息RAM

在《STM32H7x3编程参考手册》上,有介绍FDCAN1与FDCAN2都共用同一块RAM。
RAM
《STM32H7x3编程参考手册》也强调这一块RAM配置的重要性,而且系统也不会帮你检查。
RAM11

三. “错误”配置之同时使用两路FDCAN

3.1 FDCAN1

FDCAN1,WRONG

3.2 FDCAN2

FDCAN2,WRONG

3.3 消息RAM的分布

RAM
在STM32CubeMX上,FDCAN1与FDCAN2的Message RAM Offset都设置为0。这样的话,FDCAN1的消息RAM与FDCAN2的消息RAM重叠在一起了。最终,会导致FDCAN2无法正常接收报文。

四. “正确”配置之同时使用两路FDCAN

4.1 FDCAN1

FDCAN1,RIGHT

4.2 FDCAN2

FDCAN2,RINGHT

4.3 消息RAM的分布

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页能找到。
SRAMCAN
在HAL库也能找到。
HAL

5.2 hfdcan1.msgRam.EndAddress

hfdcan1.msgRam.EndAddress需要用MDK或者IAR在DEBUG模式下才能看到具体的值,因为hfdcan1.msgRam.EndAddress的值跟FDCAN1的配置参数有关,如果改变FDCAN1的配置参数的话,那么hfdcan1.msgRam.EndAddress也很可能变化。
hfdcan1.msgRam.EndAddress

计算过程

FDCAN2的Message RAM Offset = hfdcan1.msgRam.EndAddress - SRAMCAN_BASE , = 0x4000AE14 - 0x4000AC00 , = 0x214.
直接用代码编写公式也是不错的方法。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wallace Zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值