发布时间:2026/8/12 17:35:34
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/8/12 17:30:33

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

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

2026/8/12 17:30:33

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

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

2026/8/12 17:30:33

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

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

2026/8/12 18:30:39

Linux--并发必懂:可重入、线程安全与死锁深度梳理

并发必懂:可重入、线程安全与死锁深度梳理(提质优化完整版) 前言 写多线程代码时,经常碰到几个高频问题: 函数并发调用结果错乱,分不清是线程不安全还是不可重入;给全局变量套上 volatile &…

2026/8/12 18:30:39

120.SAP Open SQL 性能优化与 FOR ALL ENTRIES 生产避坑

摘要 SAP系统作为企业级ERP的行业标准,其技术栈以ABAP语言为核心。本文从理工科视角出发,摒弃碎片化知识罗列,以模块化思维拆解SAP开发体系。文章聚焦于ABAP的数据库访问机制、内表操作、面向对象编程以及性能调优四大核心模块,通过严谨的逻辑推导和可直接运行的完整代码示…

2026/8/12 18:30:39

Word表格粘贴自动适应页面宽度与文本换行全攻略

这次我们来看一个在Word文档处理中非常实际的问题:将外部表格粘贴到Word时,如何让它自动适应页面宽度并实现文本换行。这不仅是排版美观的需求,更是提升文档编辑效率的关键技巧。 很多人在从Excel、网页或其他文档复制表格到Word时&#xff…

2026/8/12 18:30:39

STM32开发必备:ST-Link V2调试器硬件连接与软件配置全攻略

1. 从零开始:为什么你需要一个ST-Link V2? 如果你刚开始接触STM32,或者正准备从51单片机、Arduino转向这个更强大的32位微控制器世界,那么你遇到的第一个、也是最关键的一个“拦路虎”,很可能就是如何把写好的程序代码…

2026/8/12 18:30:39

Flutter命令行工具darted_cli适配鸿蒙OS开发指南

1. 项目背景与核心价值在跨平台开发领域,Flutter已经成为移动端开发的主流选择之一。而darted_cli作为Flutter生态中优秀的命令行工具库,能够帮助开发者快速构建美观且功能强大的终端应用。随着鸿蒙系统的快速发展,如何让现有Flutter生态工具…

2026/8/12 10:37:12

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/12 5:35:25

当 LLM 遇见大文档:主流开源项目如何处理上下文超限

从 Agentic Loop 到 Repo Map,七种策略与六类陷阱引言:128K vs 10MB 的硬冲突 2026 年的 LLM 上下文窗口已达到 128K ~ 1M token(≈ 0.5MB ~ 4MB 文本),但 LLM 想要处理的真实数据规模远远超过这个量级:真实…

2026/8/12 9:34:08

Ubuntu 23.10中双击运行.sh文件的完整指南:从权限原理到桌面配置

1. 项目概述:从一次“双击”引发的权限探索在Ubuntu桌面环境下,我们习惯了双击运行那些带有.exe后缀的Windows程序安装包,但当你拿到一个以.sh结尾的Shell脚本文件时,满怀期待地双击它,却很可能只看到一个文本编辑器窗…

2026/8/12 9:34:08

NumPy条件索引实战:np.where与np.argwhere高效数据筛选指南

1. 从一次数据筛选的“笨办法”说起 前几天,我帮一个刚入行的数据分析师同事看代码,他正在处理一批传感器数据,需要找出所有温度超过阈值的数据点,然后进行后续分析。我一看他的实现,好家伙,一个 for 循环…

2026/8/12 9:34:08

基于Docker与Selenium Grid构建高可用浏览器自动化测试环境

1. 项目概述:为什么需要容器化的浏览器自动化?在软件开发和测试领域,浏览器自动化早已不是新鲜事。无论是日常的UI回归测试、数据抓取,还是复杂的业务流程模拟,Selenium都是我们绕不开的利器。然而,但凡在团…

2026/8/10 11:20:30

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/11 17:06:59

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/11 3:05:11

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…