0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

合宙LuatOS 来源:合宙LuatOS 作者:合宙LuatOS 2025-05-06 14:22 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文聚焦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_ACTIVE:

主动错误状态(一般情况下为该状态);

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函数

wKgZO2gRubeAQdadAAi5_7cGeh4708.png

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)。

示例:

wKgZO2gRufeAQgXYAABNDLe5yuQ955.png

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。

示例:

wKgZPGgRujyACaIsAABSbqIDDqo119.png

3)设置CAN总线工作模式

can.mode(id, mode)

参数:

id:总线ID。

mode:

模式常量(如 can.MODE_NORMAL)。

返回值:boolean。

示例:

wKgZPGgRumOAdFSPAABMWd0g-8Q844.png

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。

示例:

wKgZO2gRupeAI3mCAABNo0Bwtiw035.png

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})。

返回值:无。

示例:

wKgZO2gRusyARjpWAABIg2VwJu0252.png

2)接收CAN消息

can.rx(id)

参数:id:总线ID。

返回值:消息数据(如 {id=0x123, data={0x01, 0x02}})。

示例:

wKgZO2gRuvmAYkeRAABZA62SthM866.png

2.3 状态与事件

1)注册事件回调函数

can.on(id, func)

参数:

id:总线ID。

func:回调函数(参数:id, type, param)。

示例:

wKgZO2gRuzCAbviwAADOxJdoVwI511.png

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 初始化顺序

wKgZPGgRu6GAYfS9AACmhO3XfNE642.png

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,或在回调中及时处理消息。

wKgZPGgRu_uAF6U9AAZu0-Z2mm8812.pngwKgZPGgRvAyAZ3ngAAIqztab9BY129.png

更多最新开发资料详见:www.air780epm.cn

今天的内容就分享到这里了~

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • CAN通信
    +关注

    关注

    5

    文章

    106

    浏览量

    18946
  • 总线通信
    +关注

    关注

    0

    文章

    66

    浏览量

    12254
  • LuatOS
    +关注

    关注

    0

    文章

    171

    浏览量

    2748
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    LuatOS选型指南:基于Air780EPM的32/64位性能实测分析

    面对32位与64位LuatOS固件的选择难题,本文通过在Air780EPM开发板上的实际测试,详细解析两者在整数处理能力、浮点数精度以及系统性能方面的差异,结合应用场景给出专业建议,助力开发者实现
    的头像 发表于 02-25 18:05 302次阅读
    <b class='flag-5'>LuatOS</b>选型指南:基于<b class='flag-5'>Air780EPM</b>的32/64位性能实测分析

    一文搞懂Air780EPM的NTP通信LuatOS脚本开发教程

     想在Air780EPM上用LuatOS实现NTP时间同步?这篇教程将用最通俗的方式讲解实现原理与代码实现,让你快速掌握关键技能。 一、NTP通信概述   1.1 NTP 网络时间协议(英语
    的头像 发表于 09-30 18:19 2316次阅读
    一文搞懂<b class='flag-5'>Air780EPM</b>的NTP<b class='flag-5'>通信</b>:<b class='flag-5'>LuatOS</b>脚本开发教程

    Air780EPM嵌入式开发:LuatOS的MQTT通信实践

    通过LuatOS脚本在Air780EPM开发板上实现MQTT通信,是物联网设备开发中高效且便捷的解决方案。 一、MQTT 协议详解   1.1 什么是 MQTT? MQTT(Messa
    的头像 发表于 09-30 16:11 1996次阅读
    <b class='flag-5'>Air780EPM</b>嵌入式开发:<b class='flag-5'>LuatOS</b><b class='flag-5'>下</b>的MQTT<b class='flag-5'>通信</b>实践

    实战Air780EPM:构建4G共享网关,服务WiFi与有线设备!

    通过多网融合技术将不同类型的通信网络(4G、以太网)整合在一起,从而形成统一、高效、互操作性强的网络系统。 本文基于 Air780EPM 模块,通过 4G 移动网络为 以太网设备提供统一的上网接入服务
    的头像 发表于 09-30 16:03 1462次阅读
    实战<b class='flag-5'>Air780EPM</b>:构建4G共享网关,服务WiFi与有线设备!

    Air780EPM开发板NTP对时教程:LuatOS脚本开发入门指南

    通过简单的LuatOS脚本,Air780EPM即可实现NTP时间同步。本指南从零开始,带你掌握嵌入式设备联网校时的核心方法。 一、NTP通信概述 1.1 NTP 网络时间协议(英语:Network
    的头像 发表于 09-30 16:01 1325次阅读
    <b class='flag-5'>Air780EPM</b>开发板NTP对时教程:<b class='flag-5'>LuatOS</b>脚本开发入门指南

    LuatOS嵌入式开发实战:Air780EPM与MQTT通信

     本教程聚焦于LuatOSAir780EPM开发板上的应用,演示如何通过脚本实现MQTT协议通信,助力物联网设备快速联网。 一、MQTT 协议详解   1.1 什么是 MQTT? MQTT
    的头像 发表于 09-29 18:10 670次阅读
    <b class='flag-5'>LuatOS</b>嵌入式开发实战:<b class='flag-5'>Air780EPM</b>与MQTT<b class='flag-5'>通信</b>

    Air780EPM开发板FTP功能实战:LuatOS嵌入式开发全解析

    本文深入讲解Air780EPM模组LuatOS环境的FTP应用开发,涵盖AT指令配置、网络连接与文件传输流程,助你高效完成嵌入式通信项目
    的头像 发表于 09-29 15:37 633次阅读
    <b class='flag-5'>Air780EPM</b>开发板FTP功能实战:<b class='flag-5'>LuatOS</b>嵌入式开发全<b class='flag-5'>解析</b>

    LuatOS Air780EPM 开发板 HTTP 教程:原理讲解与项目实操!

    本篇教程将系统介绍 LuatOS Air780EPM 在 HTTP 通信中的应用,从请求机制到响应解析,配合完整代码演示,让你轻松实现设备端
    的头像 发表于 09-26 20:36 1224次阅读
    <b class='flag-5'>LuatOS</b> <b class='flag-5'>Air780EPM</b> 开发板 HTTP 教程:原理讲解与项目实操!

    Air8101多网融合战略升级:Air780EPM模块助力4G联网落地

    在物联网通信技术持续迭代的背景Air8101通过战略级模块外挂——Air780EPM,正式迈入4G联网时代。多网融合架构的完善,使设备在复杂环境中仍能保持高速、稳定的数据传输性能,
    的头像 发表于 06-23 16:53 705次阅读
    <b class='flag-5'>Air</b>8101多网融合战略升级:<b class='flag-5'>Air780EPM</b>模块助力4G联网落地

    优化你的设计:Air780EPM场景化ADC硬件电路指南!

    提升ADC性能需从场景需求出发。本文针对Air780EPM在数据采集中的常见挑战,如噪声抑制、动态范围适配等,提供场景化的优化方案与电路设计建议,助力打造高性价比的硬件系统。 最近有工程师朋友问
    的头像 发表于 06-13 18:02 1058次阅读
    优化你的设计:<b class='flag-5'>Air780EPM</b>场景化ADC硬件电路指南!

    Air780EPM — ADC硬件电路设计:场景化优化与实践!

    不同应用场景对ADC电路的要求差异明显,Air780EPM的设计需针对性优化。本文通过实例解析电源滤波、信号隔离等关键技术,阐述如何根据具体场景需求打造高性能的硬件电路方案。 最近有工程师朋友问
    的头像 发表于 06-11 14:40 797次阅读
    <b class='flag-5'>Air780EPM</b> — ADC硬件电路设计:场景化优化与实践!

    解锁Air780EPM:N种GPIO操控LED的实战技巧!

    在物联网项目中,灵活使用Air780EPM的GPIO控制LED至关重要。本文将展示实现方式,涵盖硬件配置与软件编程,满足不同场景需求。 今天特别分享基于Air780EPM的GPIO控制LED实现方案
    的头像 发表于 05-28 16:56 1073次阅读
    解锁<b class='flag-5'>Air780EPM</b>:N种GPIO操控LED的实战技巧!

    COD监测革新!Air780EPM一站式替代STM32+4G模组的物联网方案 ~

    通过将4G通信、COD数据处理与低功耗控制集成于Air780EPM芯片,本方案彻底颠覆STM32+外置模组的松散架构。实测显示,设备启动时间从STM32
    的头像 发表于 05-21 16:51 682次阅读
    COD监测革新!<b class='flag-5'>Air780EPM</b>一站式替代STM32+4G<b class='flag-5'>模组</b>的物联网<b class='flag-5'>方案</b> ~

    如何解决Air780EPM开发中的调试难题?深度解析高效调试方法

    Air780EPM项目开发中,调试效率往往直接影响进度。面对代码报错、逻辑漏洞等常见痛点,开发者亟需一套系统化的方法论。本文将揭秘实战中验证的调试技巧,助您快速定位问题并优化代码流程。
    的头像 发表于 05-17 10:46 887次阅读
    如何解决<b class='flag-5'>Air780EPM</b>开发中的调试难题?<b class='flag-5'>深度</b><b class='flag-5'>解析</b>高效调试方法

    大公开!用Air780EPM重构水质COD监测,替代STM32+4G模组的技术路径

    方案采用Air780EPM单芯片替代STM32+4G模组,集成COD传感器驱动、数据加密与4G通信功能。 水质COD(化学需氧量)监控是评估水体有机污染程度的核心手段,涉及多种技术、
    的头像 发表于 05-16 15:34 754次阅读
    大公开!用<b class='flag-5'>Air780EPM</b>重构水质COD监测,替代STM32+4G<b class='flag-5'>模组</b>的技术路径