本文聚焦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文章
100浏览量
18793 -
总线通信
+关注
关注
0文章
61浏览量
12174 -
LuatOS
+关注
关注
0文章
134浏览量
2567
发布评论请先 登录
一文搞懂Air780EPM的NTP通信:LuatOS脚本开发教程
Air780EPM嵌入式开发:LuatOS下的MQTT通信实践
实战Air780EPM:构建4G共享网关,服务WiFi与有线设备!
LuatOS嵌入式开发实战:Air780EPM与MQTT通信
LuatOS Air780EPM 开发板 HTTP 教程:原理讲解与项目实操!
优化你的设计:Air780EPM场景化ADC硬件电路指南!
Air780EPM — ADC硬件电路设计:场景化优化与实践!
解锁Air780EPM:N种GPIO操控LED的实战技巧!
血泪教训总结:Air780EPM的LuatOS二次开发——OneWire协议调试注意事项
新手必看!4G模组Air780EPM——GPIO的设计说明
干货预警!4G模组:Air780EPM其他硬件接口
手把手教你!4G模组Air780EPM——GPIO的设计说明
快速上手!4G模组Air780EPM的供电设计以及选型推荐
Air780EPM 模块串口电路设计硬件指导
4G模组Air780EPM的开机启动及外围电路设计!

深度解析Air780EPM模组:LuatOS下CAN总线通信的完整方案!
评论