RTT-串口与485总线

发布时间:2026/10/5 16:29:22

RTT-串口与485总线 1. UART 是什么UART通用异步收发器是最常用的串行通信接口通过两根线完成全双工通信TX发送线。RX接收线。UART 不需要时钟线通信双方通过约定相同的波特率、数据位、停止位和校验位来保证通信正确。2. UART 一帧数据起始位(0) → 数据位(常用 8 位) → 校验位(可选) → 停止位(1)常见配置为115200、8 数据位、无校验、1 停止位即常说的115200-8-N-1。若两端的波特率、数据位、停止位或校验方式不一致就可能出现乱码或无法通信。3. RT-Thread 串口设备模型应用程序 ↓ I/O 设备管理接口 ↓ UART 驱动框架 ↓ 芯片 UART 驱动 ↓ UART 硬件串口设备通常命名为uart0、uart1、uart2等。应用层通过统一的rt_device_*()接口完成查找、配置、打开、读写和关闭。4. 串口收发模式模式特点轮询实现简单但 CPU 会等待收发完成。中断收到数据时触发中断适合普通异步数据。DMA大块、频繁数据传输时可减少 CPU 占用。打开串口时接收和发送模式只能分别选择一种未指定中断或 DMA 时默认使用轮询。5. 配置并打开串口#define UART_NAME uart2 ​ rt_device_t serial; struct serial_configure config RT_SERIAL_CONFIG_DEFAULT; ​ serial rt_device_find(UART_NAME); if (serial ! RT_NULL) { config.baud_rate BAUD_RATE_9600; config.data_bits DATA_BITS_8; config.stop_bits STOP_BITS_1; config.parity PARITY_NONE; config.bufsz 128; ​ rt_device_control(serial, RT_DEVICE_CTRL_CONFIG, config); rt_device_open(serial, RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM); }代码解析RT_SERIAL_CONFIG_DEFAULT先加载默认配置再按需修改。rt_device_find()获取设备句柄返回RT_NULL表示设备名错误或驱动未注册。rt_device_control()应在open前完成尤其是bufsz中断接收缓冲区会在打开时创建打开后不能动态修改其大小。RT_DEVICE_FLAG_INT_RX选择中断接收RT_DEVICE_FLAG_STREAM会在输出\n前自动补\r便于串口终端换行。6. 中断接收回调通知线程读取static struct rt_semaphore rx_sem; ​ static rt_err_t uart_input(rt_device_t dev, rt_size_t size) { rt_sem_release(rx_sem); return RT_EOK; } ​ static void uart_thread(void *parameter) { char ch; ​ while (1) { while (rt_device_read(serial, -1, ch, 1) ! 1) { rt_sem_take(rx_sem, RT_WAITING_FOREVER); } rt_kprintf(received: %c\n, ch); } } ​ /* 串口打开后初始化同步对象并注册接收通知 */ rt_sem_init(rx_sem, rx_sem, 0, RT_IPC_FLAG_FIFO); rt_device_set_rx_indicate(serial, uart_input);代码解析rt_device_set_rx_indicate()将uart_input()注册给串口驱动。串口收到数据后驱动调用该回调回调中只释放信号量不做耗时处理。接收线程先尝试读取 1 字节若缓冲区没有数据就阻塞等待rx_sem被回调唤醒后再次读取。这样将复杂处理放在线程中避免在中断上下文中阻塞或延时。pos对串口没有意义通常传-1或0。7. RS-485 与 UART 的关系RS-485 是一种适合工业现场的差分通信标准使用 A/B 两根差分线传输数据。它通常通过UART RS-485 收发器芯片实现UART 负责收发字节RS-485 芯片负责将 TTL 电平转换为差分信号。主要特点抗干扰能力强适合工业环境。传输距离可达约 1200m速率与距离成反比。一条总线可连接多个节点。常用两线半双工同一时刻只能发送或接收。长距离总线通常需要在末端加 120Ω 终端电阻以减少信号反射。8. RS-485 方向控制RS-485 芯片常将RE、DE接到同一个 GPIO 控制EN 高电平发送模式 EN 低电平接收模式课件的板级描述中出现了 PA1 与 PB11 两种 EN 引脚信息示例代码使用GET_PIN(A, 1)。实际开发务必以开发板原理图和 BSP 配置为准。#define EN_485 GET_PIN(A, 1) ​ static int rs485_send(void) { char msg[] hello RT-Thread!\r\n; ​ rt_pin_write(EN_485, PIN_HIGH); rt_device_write(uart_485, 0, msg, rt_strlen(msg)); rt_pin_write(EN_485, PIN_LOW); ​ return RT_EOK; }代码解析发送前先将EN_485拉高使收发器切换到发送状态rt_device_write()将字符串写入 UART发送结束后拉低 EN重新进入接收状态。使用课件中的“中断接收、轮询发送”方式时可按此思路处理若改为 DMA 或中断发送不能在调用写接口后立即切回接收应在发送完成回调中再拉低 EN否则最后的数据可能尚未发完。初始化 RS-485 时还需将 EN 配为输出并默认置低rt_pin_mode(EN_485, PIN_MODE_OUTPUT); rt_pin_write(EN_485, PIN_LOW);代码解析PIN_MODE_OUTPUT允许 GPIO 驱动收发器方向引脚初始化为低电平可让设备默认处于接收状态避免上电后长期占用总线。总结UART 负责异步字节收发RS-485 则让 UART 能在远距离、强干扰、多节点环境中稳定通信。RT-Thread 中可将串口接收组织为串口中断 → 接收回调释放信号量 → 接收线程读取并处理数据RS-485 在此基础上额外增加一个方向控制 GPIO发送前切换为发送发送完成后切回接收。
延伸阅读

更多相关文章

2026/9/29 6:28:46

大厂的 GPU 为什么比你利用率高一倍?动态调度底层原理

GPU 动态调度全解:为啥你显卡常年 30% 利用率,大厂轻松干到 70% 一、整体简介绝大多数个人、小团队部署模型都是静态绑卡调度,任务启动直接独占整张 GPU,哪怕只占用三四成算力,剩余资源完全闲置,日常 GPU 利用率常年卡在 30%~40%。 而字节、月之暗面、阿里这类大厂依靠分…

2026/10/5 15:49:19

养生16字诀:构建健康底层操作系统,实现万法皆药

1. 先搞清楚“养生16字诀”到底在说什么 看到“养生16字诀万法皆药”这个标题,很多人第一反应可能是“这又是哪个玄乎的养生理论”。我最初也这么想,但仔细琢磨和实践后发现,它其实是一个高度概括、极具操作性的日常健康管理框架。它解决的核…

2026/9/30 12:14:21

国产 AI 卡和英伟达到底差在哪?从底层架构给你讲明白

最近国产 AI 卡的消息越来越多,昇腾、寒武纪、天数智芯,各种名字满天飞。 很多人有个疑问:国产 AI 卡和英伟达 H200 到底差在哪?是算力差?显存差?还是软件差? 今天不从营销参数讲,从底层架构、硬件特性、真实负载表现三个维度,给你讲明白差距到底在哪,差多少,哪些场…

2026/10/5 23:03:20

MRAM与PIC18F85J50工业数据记录方案:SPI驱动与掉电保护实战

1. 项目缘起与整体设计思路工业现场的数据记录仪、PLC 扩展模块、智能变送器这类设备,有一个绕不开的刚需:频繁写、随时读、断电不能丢。传统方案里,EEPROM 写次数有限(百万级),FRAM 容量小价格高&#xff…

2026/10/5 23:03:20

基于PIC18F87K22与MRAM的工业级SPI数据存储方案

1. 项目缘起与整体设计思路工业现场的数据记录仪、PLC 扩展模块、智能电表、车载黑匣子这类设备,有一个共同的痛点:掉电不能丢数据,写入还要够快够频繁。传统方案里,EEPROM 擦写寿命只有百万次量级,写入速度慢到毫秒级…

2026/10/5 23:03:20

工业嵌入式存储选型:MRAM与PIC18F85J50 SPI驱动实战

1. 为什么在工业现场我会优先考虑 MRAM 而不是 EEPROM做嵌入式这行十几年,存储方案选型这件事上我踩过的坑比写过的驱动还多。早些年做工业数据采集终端,板子上清一色挂 EEPROM,比如 24C 系列,便宜、好买、驱动简单,I2…

2026/10/5 6:32:56

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/4 0:01:02

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/5 17:38:27

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑