STM32H743+CubeMX-计算FDCAN2上的MessageRAMOffset(使两路FDCAN正常工作)
文章目錄
- 一. 前言
- 二. 消息RAM
- 三. “錯(cuò)誤”配置之同時(shí)使用兩路FDCAN
- 3.1 FDCAN1
- 3.2 FDCAN2
- 3.3 消息RAM的分布
- 四. “正確”配置之同時(shí)使用兩路FDCAN
- 4.1 FDCAN1
- 4.2 FDCAN2
- 4.3 消息RAM的分布
- 五. 計(jì)算FDCAN2的Message RAM Offset
- 5.1 SRAMCAN_BASE
- 5.2 hfdcan1.msgRam.EndAddress
- 計(jì)算過(guò)程
一. 前言
要在STM32H7上使用FDCAN控制器,需要配置很多參數(shù)。例如,波特率,CAN模式,工作模式,TXFIFO,RXFIFO,Message RAM Offset等等。今天我想聊聊Message RAM Offset這個(gè)“大坑”,這個(gè)”坑“只有當(dāng)你需要同時(shí)使用兩路FDCAN控制器的時(shí)候才會(huì)出現(xiàn)。所以,想讓STM32H7上的兩路FDCAN同時(shí)正常工作的話(huà),理解Message RAM Offset是很必要的。
二. 消息RAM
在《STM32H7x3編程參考手冊(cè)》上,有介紹FDCAN1與FDCAN2都共用同一塊RAM。
《STM32H7x3編程參考手冊(cè)》也強(qiáng)調(diào)這一塊RAM配置的重要性,而且系統(tǒng)也不會(huì)幫你檢查。
三. “錯(cuò)誤”配置之同時(shí)使用兩路FDCAN
3.1 FDCAN1
3.2 FDCAN2
3.3 消息RAM的分布
在STM32CubeMX上,FDCAN1與FDCAN2的Message RAM Offset都設(shè)置為0。這樣的話(huà),FDCAN1的消息RAM與FDCAN2的消息RAM重疊在一起了。最終,會(huì)導(dǎo)致FDCAN2無(wú)法正常接收?qǐng)?bào)文。
四. “正確”配置之同時(shí)使用兩路FDCAN
4.1 FDCAN1
4.2 FDCAN2
4.3 消息RAM的分布
按照這樣去設(shè)置兩路FDCAN的Message RAM Offset的話(huà),就能正常工作了。FDCAN1與FDCAN2各有自己的消息RAM了。
這里還有一個(gè)疑問(wèn),FDCAN2的Message RAM Offset為什么要設(shè)置0x214呢?依據(jù)是什么?接著,就要從SRAMCAN_BASE與hfdcan1.msgRam.EndAddress入手了。
五. 計(jì)算FDCAN2的Message RAM Offset
5.1 SRAMCAN_BASE
SRAMCAN_BASE的值是0x4000AC00,在《STM32H7x3編程參考手冊(cè)》的第103頁(yè)能找到。
在HAL庫(kù)也能找到。
5.2 hfdcan1.msgRam.EndAddress
hfdcan1.msgRam.EndAddress需要用MDK或者IAR在DEBUG模式下才能看到具體的值,因?yàn)閔fdcan1.msgRam.EndAddress的值跟FDCAN1的配置參數(shù)有關(guān),如果改變FDCAN1的配置參數(shù)的話(huà),那么hfdcan1.msgRam.EndAddress也很可能變化。
計(jì)算過(guò)程
FDCAN2的Message RAM Offset = hfdcan1.msgRam.EndAddress - SRAMCAN_BASE , = 0x4000AE14 - 0x4000AC00 , = 0x214.
直接用代碼編寫(xiě)公式也是不錯(cuò)的方法。
總結(jié)
以上是生活随笔為你收集整理的STM32H743+CubeMX-计算FDCAN2上的MessageRAMOffset(使两路FDCAN正常工作)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: RTX5 | 事件标志组02 - 置位事
- 下一篇: phpStrom编辑器常用功能教程