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 | 事件标志组02 - 置位事
- 下一篇: phpStrom编辑器常用功能教程