1. 方案概述
本方案基于合宙LuatOS开发平台,使用Air780EPM V1.3开发板实现一个RS485回响程序。该程序的核心功能是:收到什么数据,就发送什么数据,实现数据的双向透明传输。
2. 硬件设计
2.1 硬件资源
| 硬件资源 |
说明 |
| Air780EPM V1.3开发板 |
主控板 |
| RS485收发器 |
开发板集成 |
| USB转RS485模块 |
用于测试 |
| 杜邦线 |
用于连接 |
2.2 硬件接线
| Air780EPM开发板 |
外部设备 |
| 485-A |
RS485-A |
| 485-B |
RS485-B |
| GND |
GND |
2.3 硬件连接图
复制代码
Air780EPM V1.3 USB转RS485模块
+----------------+ +----------------+
| | | |
| 485-A GND |-------| GND 485-A |
| 485-B |-------| 485-B |
| | | |
+----------------+ +----------------+
|
| USB
v
电脑
3. 软件设计
3.1 开发环境
| 软件环境 |
版本/说明 |
| LuatOS |
Air780EPM V2016或更高 |
| Luatools |
最新版本 |
| 串口调试工具 |
SSCOM/LLCOM等 |
3.2 核心功能模块
| 模块 |
功能 |
文件 |
| 串口初始化 |
配置RS485串口参数 |
rs485_echo.lua |
| 数据接收 |
接收RS485总线上的数据 |
rs485_echo.lua |
| 数据发送 |
将接收到的数据原样发送回去 |
rs485_echo.lua |
| 电源管理 |
开启485相关电源 |
rs485_echo.lua |
3.3 流程图
系统初始化
配置485电源
初始化RS485串口
设置接收回调
等待接收数据
接收到数据
读取数据
发送接收到的数据
4. 代码实现
4.1 主程序文件:rs485_echo.lua
lua
复制代码
--[[
@module rs485_echo
@summary RS485回响功能模块
@version 1.0
@date 2026.03.06
@author RS485 Echo Program
@usage
本demo演示的核心功能为:
1.开启RS485串口,配置波特率等参数;
2.设置接收回调函数
3.实现收到什么数据,发送什么数据的回响功能
]]
local uartid = 1 -- RS485使用的串口id
local uart485Pin = 24 -- 用于控制485接收和发送的使能引脚
-- 初始化485相关电源
gpio.setup(1, 1) -- 打开电源(开发板485供电脚是gpio1,用开发板测试需要开机初始化拉高gpio1)
gpio.setup(23, 1) -- 打开上拉电源
local function uart_send_cb(id)
log.info("uart", id , "数据发送完成回调")
end
local function uart_cb(id, len)
local s = ""
repeat
s = uart.read(id, 128) -- 读取缓冲区中的数据,这里设置的一次读最多128字节
if #s > 0 then -- #s 是取字符串的长度
log.info("uart", "receive", id, #s, s)
-- 回响功能:将接收到的数据原样发送回去
uart.write(id, s)
end
until s == ""
end
-- 初始化RS485串口
uart.setup(uartid, 9600, 8, 1, uart.NONE, uart.LSB, 1024, uart485Pin, 0, 20000)
-- 收取数据会触发回调, 这里的"receive" 是固定值
uart.on(uartid, "receive", uart_cb)
-- 发送数据完成会触发回调, 这里的"sent" 是固定值
uart.on(uartid, "sent", uart_send_cb)
log.info("RS485 Echo", "Initialized successfully")
log.info("RS485 Echo", "Baud rate: 9600, Data bits: 8, Stop bits: 1, Parity: None")
log.info("RS485 Echo", "Ready to receive and echo data")
4.2 配置文件:uart_manger.lua
lua
复制代码
--[[
@module uart_manger
@summary 串口功能管理模块
@version 1.0
@date 2026.03.06
@author RS485 Echo Program
@usage
本模块为串口功能管理模块,核心业务逻辑为:根据项目需求,选择并且配置合适的串口功能
]]
-- 根据自己的项目需求,只需要require以下五种中的一种即可;
-- 简易串口,小数据字符串收发
-- require "simple_uart"
-- 大数据收发串口
-- require "high_volume_uart"
-- 485串口 - RS485回响功能
require "rs485_echo"
-- 多串口
-- require "multiple_uart"
-- USB虚拟串口
-- require "usb_uart"
-- 动态切换串口引脚复用
-- require "uart_mux"
5. 测试方法
5.1 硬件连接
- 将Air780EPM V1.3开发板通过TYPE-C USB线连接到电脑
- 将USB转RS485模块连接到电脑
- 按照硬件接线表连接开发板和USB转RS485模块
5.2 软件配置
- 使用Luatools烧录最新的Air780EPM固件
- 将rs485_echo.lua和修改后的uart_manger.lua上传到开发板
- 重启开发板
5.3 测试步骤
- 打开串口调试工具(如SSCOM)
- 选择USB转RS485模块对应的串口
- 配置串口参数:波特率9600,数据位8,停止位1,无校验
- 发送任意数据到开发板
- 观察串口调试工具是否收到相同的数据
- 测试不同长度和类型的数据,验证回响功能的稳定性
5.4 预期结果
复制代码
发送:Hello RS485
接收:Hello RS485
发送:1234567890
接收:1234567890
发送:测试数据
接收:测试数据
6. 注意事项
- 波特率匹配:确保发送端和接收端的波特率一致,本方案使用9600
- 硬件连接:确保485-A和485-B线连接正确,不可反接
- 电源管理:必须初始化gpio1和gpio23,否则485模块可能无法正常工作
- 数据长度:单次接收数据不超过128字节,如需处理更大数据,可修改接收缓冲区大小
- 干扰处理:在工业环境中使用时,建议添加适当的隔离和保护措施
- 接地:确保设备良好接地,减少共模干扰
7. 性能参数
| 参数 |
数值 |
| 波特率 |
9600bps(可根据需要调整) |
| 数据位 |
8位 |
| 停止位 |
1位 |
| 校验位 |
无 |
| 最大单次接收数据 |
128字节 |
| 响应时间 |
<10ms |
| 工作温度 |
-40℃ ~ 85℃ |
8. 扩展功能
- 波特率可配置:可根据实际需求修改波特率参数
- 数据校验:可添加CRC校验等数据完整性检查
- 超时处理:可添加接收超时机制
- 错误处理:可添加错误检测和报告功能
- 多节点通信:可扩展为支持多节点的RS485网络
9. 故障排除
| 问题 |
可能原因 |
解决方案 |
| 无响应 |
电源未初始化 |
检查gpio1和gpio23的初始化 |
| 数据错乱 |
波特率不匹配 |
确保两端波特率一致 |
| 接收不到数据 |
接线错误 |
检查485-A和485-B连接 |
| 发送失败 |
使能引脚配置错误 |
检查uart485Pin参数 |
10. 总结
本RS485回响程序方案基于合宙LuatOS平台和Air780EPM V1.3开发板,实现了简单而可靠的数据回响功能。该方案具有以下特点:
- 简单易用:代码结构清晰,易于理解和修改
- 稳定可靠:基于LuatOS成熟的串口驱动
- 功能完整:实现了完整的RS485收发功能
- 可扩展性强:可根据实际需求进行扩展
该方案适用于需要RS485通信测试、数据透传等场景,为开发人员提供了一个快速实现RS485功能的参考。