CAN总线技术 | 数据链路层01 - CAN报文的组成
文章目錄
- 一、前言
- 二、數據幀 - 標準幀與拓展幀
- 三、遠程幀 - 標準幀與拓展幀
- 四、應用程序如何控制發送標準幀還是拓展幀?
一、前言
CAN報文幀有5種類型,其中數據幀最常用。遠程幀很少使用的原因是它基于客戶端-服務器的通訊模型(說白了就是一問一答)。
錯誤幀,過載幀,幀間隔不需要應用程序控制。例如使用STM32H743開發CAN程序,不需要使用應用程序發送錯誤幀,過載幀,幀間隔,這些CAN報文幀都由STM32H743芯片內部的CAN控制器決定是否需要發送。說白了就是由硬件控制,不需要編寫軟件。
數據幀,遠程幀由應用程序控制。使用過STM32芯片開發CAN程序的同學都知道,讓CAN控制器發送CAN報文之前需要填寫一個結構體,結構體的內容如下:
當成員變量TxFrameType = FDCAN_DATA_FRAME時,CAN控制器發送數據幀。當成員變量TxFrameType = FDCAN_REMOTE_FRAME時,CAN控制器發送遠程幀。
二、數據幀 - 標準幀與拓展幀
從下圖看到,數據幀 = 幀起始 + 仲裁段 + 控制端 + 數據段 + CRC段 + ACK段 + 幀結束
數據幀可以繼續分為標準幀與拓展幀,區別在幀的ID段長度不一樣。標準幀的ID是11位,拓展幀的ID是29位。
三、遠程幀 - 標準幀與拓展幀
從下看到,遠程幀 = 幀起始 + 仲裁段 + 控制段 + CRC段 + ACK段 + 幀結束
遠程幀也可以繼續細分為標準幀與拓展幀,區別在幀的ID段長度不一樣。標準幀的ID是11位,拓展幀的ID是29位。
此外,數據幀與遠程幀的區別在于數據幀有數據段,遠程幀沒有數據段。遠程幀的作用是請求另外的CAN節點發送數據,發送遠程幀的CAN節點不需要發送數據(是請求數據),所以遠程幀不需要數據段。
四、應用程序如何控制發送標準幀還是拓展幀?
回到CAN控制器的發送結構體上,如下圖所示:
當成員變量IdType = FDCAN_STANDARD_ID時,CAN控制器發送標準幀。當成員變量IdType = FDCAN_EXTENDED_ID時,CAN控制器發送拓展幀。
在stm32h7xx_hal_fdcan.h找到相應的宏定義。
總結
以上是生活随笔為你收集整理的CAN总线技术 | 数据链路层01 - CAN报文的组成的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 本地计算机上的mysql80服务启动后停
- 下一篇: 栅格单元值的选取方法_计算机求解微分方程