本文聚焦Air780EPM的CAN通信能力,結合LuatOS實時操作系統,從底層驅動到應用層協議,詳細拆解如何實現工業級CAN總線數據傳輸,助力開發者快速落地項目。
最新資料詳見:https://docs.openluat.com/air780epm/luatos/api/core/can/
一、Can操作庫常量定義
1.1 CAN工作模式常量
can.MODE_NORMAL:
正常工作模式;
can.MODE_LISTEN:
監聽模式(僅接收,不發送);
can.MODE_TEST:
自測模式(自收自發);
can.MODE_SLEEP:
休眠模式。
1.2 CAN狀態常量
can.STATE_STOP:
停止工作狀態;
主動錯誤狀態(一般情況下為該狀態);
can.STATE_PASSIVE:
被動錯誤狀態(總線上錯誤較多時進入,但仍可正常收發);
can.STATE_BUSOFF:
離線狀態(總線錯誤非常多,不能收發,需手動退出);
can.STATE_LISTEN:
監聽狀態(選擇監聽模式時進入);
can.STATE_TEST:
自收自發狀態(選擇自測模式時進入);
can.STATE_SLEEP:
休眠狀態(選擇休眠模式時進入)。
1.3 回調消息類型常量
can.CB_MSG:
有新數據寫入緩存;
can.CB_TX:
數據發送完成(需通過param判斷成功/失敗);
can.CB_ERR:
錯誤報告(param為錯誤碼);
can.CB_STATE:
總線狀態變更,后續param參數是新的狀態,也可以用can.state讀出。
1.4 幀格式常量
can.EXT:擴展幀;
can.STD:標準幀。
二、Can操作庫API函數
2.1 初始化與配置
1)初始化CAN總線
can.init(id, rx_message_cache_max)
參數:
id:總線ID(0表示can0,1表示can1,通常默認為0)。
rx_message_cache_max:接收緩存消息數最大值(默認使用平臺值)。
返回值:boolean(成功返回true,失敗返回false)。
示例:
2)配置CAN總線的波特率及時序參數
can.timing(id, br, PTS, PBS1, PBS2, SJW)
參數:
id:總線ID。
br:波特率(默認1Mbps)。
PTS:
傳播時間段(范圍1~8,默認5)。
PBS1:
相位緩沖段1(范圍1~8,默認4)。
PBS2:
相位緩沖段2(范圍2~8,默認3)。
SJW:
同步補償寬度(范圍1~4,默認2)。
返回值:boolean。
示例:
3)設置CAN總線工作模式
can.mode(id, mode)
參數:
id:總線ID。
mode:
模式常量(如 can.MODE_NORMAL)。
返回值:boolean。
示例:
4)設置消息過濾規則
can.filter(id, dual_mode, ACR, AMR)
參數:
id:總線ID。
dual_mode:是否啟用雙濾波模式。
ACR:接受代碼寄存器(過濾 ID 值)。
AMR:接受掩碼寄存器(掩碼值)。
返回值:boolean。
注意:具體實現依賴硬件特性。
5)設置CAN節點ID及類型can.node(id, node_id, id_type)
參數:
id:總線ID。
node_id:節點 ID。
id_type:ID 類型(can.EXT或can.STD)。
返回值:boolean。
示例:
2.2 數據與收發
1)發送CAN消息
can.tx(id, msg_id, id_type, RTR, need_ack, data)
參數:
id:總線ID。
msg_id:消息ID。
id_type:
幀類型(can.EXT 或 can.STD)。
RTR:
是否為遠程傳輸請求(true/false)。
need_ack:
是否需要應答(true/false)。
data:
數據(數組,如 {0x01, 0x02})。
返回值:無。
示例:
2)接收CAN消息
can.rx(id)
參數:id:總線ID。
返回值:消息數據(如 {id=0x123, data={0x01, 0x02}})。
示例:
2.3 狀態與事件
1)注冊事件回調函數
can.on(id, func)
參數:
id:總線ID。
func:回調函數(參數:id, type, param)。
示例:
2)獲取當前總線狀態
can.state(id)
參數:id:總線ID。
返回值:狀態常量(如 can.STATE_ACTIVE)。
3)停止指定總線can.stop(id)
參數:id:總線ID。
4)重置總線(恢復默認配置)can.reset(id)
參數:id:總線ID。
5)反初始化總線can.deinit(id)
參數:id:總線ID。
6)啟用/禁用調試信息輸出can.debug(on_off)
參數:on_off(布爾值)。
三、CAN開發相關注意事項
3.1 初始化順序
3.2 消息發送與接收
使用can.tx發送消息,確保參數正確;通過can.rx拉取消息,或在回調中處理can.CB_MSG。
3.3 狀態監控
定期檢查can.state,處理離線狀態(can.STATE_BUSOFF);錯誤回調can.CB_ERR,需記錄param錯誤碼。
3.4 調試與性能
啟用can.debug(true) 輸出底層日志;接收緩存rx_message_cache_max需根據需求調整,避免消息丟失。
3.5 常見問題
如何解決can.STATE_BUSOFF離線狀態?
需先調用can.reset(id)恢復總線,再重新初始化配置。
如何確保消息發送成功?
通過can.CB_TX回調判斷發送結果,或檢查返回值(若API支持)。
如何處理高頻率消息接收?
增大rx_message_cache_max,或在回調中及時處理消息。
更多最新開發資料詳見:www.air780epm.cn
今天的內容就分享到這里了~
審核編輯 黃宇
-
CAN通信
+關注
關注
5文章
97瀏覽量
18296 -
總線通信
+關注
關注
0文章
59瀏覽量
11973 -
LuatOS
+關注
關注
0文章
91瀏覽量
2160
發布評論請先 登錄
COD監測革新!Air780EPM一站式替代STM32+4G模組的物聯網方案 ~

如何解決Air780EPM開發中的調試難題?深度解析高效調試方法

大公開!用Air780EPM重構水質COD監測,替代STM32+4G模組的技術路徑

快速開發實戰——4路低功耗ADC接口,Air780EPM二次開發必看!

從零開始:Air780EPM與LuatOS的硬件與軟件配置全解析

血淚教訓總結:Air780EPM的LuatOS二次開發——OneWire協議調試注意事項

新手必看!4G模組Air780EPM——GPIO的設計說明

干貨預警!4G模組:Air780EPM其他硬件接口

手把手教你!4G模組Air780EPM——GPIO的設計說明

快速上手!4G模組Air780EPM的供電設計以及選型推薦

Air780EPM 模塊串口電路設計硬件指導

4G模組Air780EPM的開機啟動及外圍電路設計!

初學者必看!4G模組Air780EPM的開機啟動及外圍電路設計

評論