打印
[应用相关]

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

[复制链接]
1017|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
晓伍|  楼主 | 2021-9-4 15:45 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
一. 前言
要在STM32H7上使用FDCAN控制器,需要配置很多参数。例如,波特率,CAN模式,工作模式,TXFIFO,RXFIFO,Message RAM Offset等等。今天我想聊聊Message RAM Offset这个“大坑”,这个”坑“只有当你需要同时使用两路FDCAN控制器的时候才会出现。所以,想让STM32H7上的两路FDCAN同时正常工作的话,理解Message RAM Offset是很必要的。



使用特权

评论回复
沙发
晓伍|  楼主 | 2021-9-4 15:46 | 只看该作者
二. 消息RAM

在《STM32H7x3编程参考手册》上,有介绍FDCAN1与FDCAN2都共用同一块RAM。


《STM32H7x3编程参考手册》也强调这一块RAM配置的重要性,而且系统也不会帮你检查。


使用特权

评论回复
板凳
晓伍|  楼主 | 2021-9-4 15:47 | 只看该作者
三. “错误”配置之同时使用两路FDCAN3.1 FDCAN1


使用特权

评论回复
地板
晓伍|  楼主 | 2021-9-4 15:47 | 只看该作者
3.2 FDCAN2


使用特权

评论回复
5
晓伍|  楼主 | 2021-9-4 15:48 | 只看该作者
3.3 消息RAM的分布


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


使用特权

评论回复
6
晓伍|  楼主 | 2021-9-4 15:49 | 只看该作者
四. “正确”配置之同时使用两路FDCAN4.1 FDCAN1


使用特权

评论回复
7
晓伍|  楼主 | 2021-9-4 15:50 | 只看该作者
4.2 FDCAN2


使用特权

评论回复
8
晓伍|  楼主 | 2021-9-4 15:52 | 只看该作者
4.3 消息RAM的分布

按照这样去设置两路FDCAN的Message RAM Offset的话,就能正常工作了。FDCAN1与FDCAN2各有自己的消息RAM了。

这里还有一个疑问,FDCAN2的Message RAM Offset为什么要设置0x214呢?依据是什么?接着,就要从SRAMCAN_BASE与hfdcan1.msgRam.EndAddress入手了。



使用特权

评论回复
9
晓伍|  楼主 | 2021-9-4 15:53 | 只看该作者
五. 计算FDCAN2的Message RAM Offset5.1 SRAMCAN_BASE

SRAMCAN_BASE的值是0x4000AC00,在《STM32H7x3编程参考手册》的第103页能找到。


在HAL库也能找到。


使用特权

评论回复
10
晓伍|  楼主 | 2021-9-4 15:54 | 只看该作者
5.2 hfdcan1.msgRam.EndAddress
hfdcan1.msgRam.EndAddress需要用MDK或者IAR在DEBUG模式下才能看到具体的值,因为hfdcan1.msgRam.EndAddress的值跟FDCAN1的配置参数有关,如果改变FDCAN1的配置参数的话,那么hfdcan1.msgRam.EndAddress也很可能变化。


使用特权

评论回复
11
晓伍|  楼主 | 2021-9-4 15:55 | 只看该作者
计算过程

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

4113

帖子

1

粉丝