当前位置: 首页 > news >正文

3.5T静默分帧,CRC16校验:Modbus-RTU帧结构解析

短文标题:3.5T静默分帧,CRC16校验:Modbus-RTU帧结构解析

你有没有想过一个问题:Modbus-RTU数据帧没有固定的帧头,接收方怎么知道一帧从哪里开始、到哪里结束?靠“沉默”来分帧。协议规定:两个字节之间的间隔超过3.5个字符时间,就认为上一帧结束,下一帧开始。

3.5T(3.5字符时间)怎么算?以9600bps、8N1(10位/字符,1起始+8数据+1停止)为例:

  • 1位时间 = 1/9600 ≈ 104µs
  • 1字符时间 = 10 × 104µs ≈ 1.04ms
  • 3.5T = 3.5 × 1.04ms ≈ 3.64ms

IDLE中断检测帧结束,USART的IDLE标志在总线空闲超过1字符时间时置1,可配合软件定时器测量更精确的3.5T,或直接用IDLE中断触发帧结束标志(工程实践中通常足够)。

void USART2_IRQHandler(void)

{

if (__HAL_UART_GET_FLAG(&huart2, UART_FLAG_IDLE)) {

__HAL_UART_CLEAR_IDLEFLAG(&huart2);

// 帧接收完成

frame_received = 1;

}

}

Modbus-RTU帧结构

  • 地址:从机地址(1~247),0为广播地址
  • 功能码:03读保持寄存器、06写单个寄存器、05写线圈
  • 数据:寄存器地址、数量、写入值
  • CRC16:从地址到数据区末尾,低字节在前

常用功能码

DMA+IDLE接收变长帧

// 配置DMA接收

HAL_UART_Receive_DMA(&huart2, rx_buffer, BUFFER_SIZE);

// IDLE中断中处理

void USART2_IRQHandler(void)

{

if (__HAL_UART_GET_FLAG(&huart2, UART_FLAG_IDLE)) {

__HAL_UART_CLEAR_IDLEFLAG(&huart2);

HAL_UART_DMAStop(&huart2);

uint16_t len = BUFFER_SIZE - __HAL_DMA_GET_COUNTER(huart2.hdmarx);

// len就是这一帧的长度,处理数据

HAL_UART_Receive_DMA(&huart2, rx_buffer, BUFFER_SIZE);

}

}

这个故事的启示,Modbus-RTU没有帧头,用“静默”分帧——3.5T就是它的“句号”。CRC16保数据完整,一个bit错都不同。学会解析帧结构,Modbus通信不再神秘。写在最后,Modbus-RTU帧结构就四部分:地址区分设备,功能码定操作,数据传内容,CRC保安全。


(本文灵感源于于振南《新概念ARM32单片机》教程第4.16节、第4.17节。)

觉得有用?点赞、转发,让更多人看懂Modbus-RTU的帧结构。

http://www.cnnetsun.cn/news/3740338.html

相关文章:

  • SBUS协议解析:从串行通信原理到航模遥控实战应用
  • 《P10722 [GESP202406 六级] 二叉树》
  • 智能车环岛处理:基于状态机与动态圆弧跟踪的鲁棒控制方案
  • 如何快速解决Windows游戏乱码问题:Locale Remulator系统区域语言模拟器终极指南
  • 电子系统设计实战:从硬件到Windows客户端软件开发全流程解析
  • 告别论文内耗✨一个OKBIYE搞定毕业全流程
  • OpenClaw智能体框架:金融分析中的自主决策系统
  • Pyperclip:Python跨平台剪贴板操作库的原理、应用与实战
  • 免焊接四相五线步进驱动板:从原理到实战应用指南
  • 智能眼镜实时翻译开发:Android音频流处理与镜片显示技术
  • 7月模型量化路线图——从INT8 AWQ到FP8混合精度演进路径
  • 8 月技术阅读清单:值得精读的论文、博客与开源项目
  • BFS算法实战:矩阵扩散问题的多语言实现与核心思想解析
  • 游戏DAU和MAU怎么分析:核心逻辑、执行步骤与关键指标
  • 华为MetaERP Oracle EBS Fusion PA 项目模块 · 全核算场景汇总分析我已按 6 大类、17 个业务场景、23 条会计分录​ 为你系统梳理完毕,并生成一个深色主题的 HT
  • 虚拟同步发电机VSG控制技术解析与Simulink建模实践
  • 2025年AI写作工具横评:DeepSeek导出Word,谁才是真正的“格式救星”?
  • VRChat虚拟角色动画与手势控制开发全流程指南
  • 双靶点 CAR-T+GD2 CAR-T:破解脑胶质瘤复发困局
  • 三拓化学:涂料防沉剂厂商,布局华南广东等地区,赋能工业材料升级
  • 现代C++有限元框架Feel++:从数学公式到高性能并行计算的工程实践
  • OpenClaw Windows安装教程2026,Win 10/Win 11图文
  • JAXBench TPU内核优化:深度学习框架性能调优实战指南
  • 免费在线 PDF 翻译工具实测:整份文档一键翻译,格式完全保留
  • AI时代程序员如何通过专注与坚持提升技术竞争力
  • 游戏引擎中Avatar骨骼映射的实现架构与细节
  • 掌握 Agent 记忆管理:从入门到进阶,收藏这份大模型面试攻略
  • PyTorch深度学习实战:5个核心方法从0到1构建神经网络
  • 21.Day21:进军殿堂 —— 发布到 Splunkbase 官方应用插件库
  • Scrapy爬虫中文乱码解决方案:使用chardet库动态检测编码