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

MODBUS-RTU协议主机和从机代码STM32 包含2个程序代码,主机和从机(我代码最容易看懂)

MODBUS-RTU协议主机和从机代码STM32 包含2个程序代码,主机和从机(我代码最容易看懂) 基于温度传感器DS18B20的MODBUS-RTU从机 主机发送指令:01 03 20 00 00 01 8F CA 从机收到指令返回温度数据 06指令修改Add通信地址/站号和波特率 主机代码,主动发03指令读其它设备数据并把返回用数码管显示 程序代码包含:stm32单片机(stm32f103vet6) 我的代码是最容易看懂的 很多人想要很多功能号 实现原理就是用if判断数据帧有点区别,所以学会一条功能号,其它自然会了 4位595数码管模块显示

直接上干货,咱们用STM32F103VET6玩转MODBUS-RTU通讯。先看从机代码怎么处理温度数据——DS18B20的数值直接塞进MODBUS数据帧,简单粗暴有效。

从机接收处理核心代码:

if(usRxBuffer[1] == 0x03) //功能码判断 { if(memcmp(&usRxBuffer[2],"\x20\x00\x00\x01",4)==0) //寄存器地址校验 { temp = DS18B20_GetTemp(); //获取温度值 usSndBuffer[3] = temp >> 8; //拆分高字节 usSndBuffer[4] = temp & 0xFF; //低字节 CRC16(usSndBuffer,5); //生成CRC校验码 Send_Data(usSndBuffer,7); //发送7字节数据包 } }

这里用memcmp直接匹配地址比逐字节判断更省事。温度数据用16位整数传输,注意DS18B20采集时记得放大10倍处理小数位。

改地址和波特率的功能码06实现更带劲:

case 0x06: if(usRxBuffer[4] == 0x00 && usRxBuffer[5] == 0xC0) //特定写入值触发修改 { DeviceAddr = usRxBuffer[2]; //新设备地址 UART1_BaudRate = 38400; //切换波特率 USART_Init(...); //重新初始化串口 } break;

这种暗号式修改方式适合快速调试,实际应用建议做成可配置参数。

主机代码这边,数码管显示和MODBUS查询得配合好:

void MODBUS_Query(void) { static uint8_t query[8] = {0x01,0x03,0x20,0x00,0x00,0x01,0x00,0x00}; CRC16(query,6); //动态生成校验码 USART_Send(query,8); //发送查询指令 HAL_Delay(200); //等待从机响应 } //数码管显示用移位寄存器驱动 void Show_Temp(int temp) { uint8_t codes[4]; codes[0] = SEG_CODE[temp/1000]; //千位 codes[1] = SEG_CODE[(temp%1000)/100] | 0x80; //百位带小数点 codes[2] = SEG_CODE[(temp%100)/10]; //十位 codes[3] = SEG_CODE[temp%10]; //个位 HC595_Send(codes,4); //串行输出到595 }

注意温度显示时百位的小数点处理,这里用了或运算直接点亮最高位。595驱动时序要卡准,建议用SPI硬件加速。

功能码扩展其实就那回事,比如想加个05功能码控制继电器:

if(usRxBuffer[1] == 0x05) { uint16_t coil_addr = (usRxBuffer[2]<<8) | usRxBuffer[3]; if(coil_addr == 0x0001) //指定线圈地址 { RELAY = (usRxBuffer[4] == 0xFF) ? 1 : 0; //强制置位/复位 } }

看到没?核心就是判断功能码后处理对应地址数据。MODBUS协议层搞定后,业务逻辑随便加。

最后提醒:调试时先用USB转485工具监视数据帧,用十六进制模式查看原始报文。遇到CRC校验错误别慌,八成是字节超时没处理好,调整定时器参数比死磕代码更有效。

http://www.jsqmd.com/news/234696/

相关文章:

  • 深入探讨C#三菱FX编程口协议RS422圆口,推荐测试工具及相关资料
  • 被局域网卡脖子的 WPS?用cpolar这样设置,在哪都能改文档
  • 西门子YH33无负压供水系统一拖三及一拖三加一程序图解
  • 基于ABAQUS和Comsol的盾构隧道有限元整体模型:结构抗震、承载性、防水性、稳定性分析
  • 分类模型效果对比表:实测5大方案显存与精度关系
  • AutoGLM-Phone-9B核心优势揭秘|附手机端AI推理部署实战案例
  • AI智能实体侦测服务核心优势解析|高精度+高亮显示
  • 超越商用API的轻量翻译模型|HY-MT1.5-1.8B实测分享
  • 直接上干货,先扔个QPSK星座图代码镇楼
  • 工控圈的老铁们注意了!今天给大家扒一扒某神秘大佬流出的三菱系PLC源码干货。先看这个FX1N的底层代码,实测支持四轴脉冲输出不是吹的,直接上硬核验证
  • 重构工作流:平台型产品经理如何用 AI 极速生成设计与原型?
  • 单相逆变器的效率仿真
  • 保护隐私数据:分类模型本地化训练+云端推理方案
  • 手把手教学:AI万能分类器部署教程,云端GPU开箱即用
  • 分类模型数据增强:云端自动化扩增实战教程
  • 中文文本正负向识别新选择|集成Web界面的StructBERT情感分析镜像
  • FX3U PLC v10.0与V10.51源代码及设计图
  • 三菱FX3U一拖二玩转台达温控器
  • 分类器效果保障:云端A/B测试最佳实践
  • COMSOL针-针电极空气流注放电模型分享
  • 强烈安利10个AI论文软件,专科生毕业论文轻松搞定!
  • Mac用户福音:云端GPU完美运行AI万能分类器
  • PDF智能提取全攻略|基于PDF-Extract-Kit快速实现布局与公式识别
  • 从云端到终端:AutoGLM-Phone-9B实现低延迟多模态推理
  • 基于AutoGLM-Phone-9B的移动端推理优化|从剪枝量化到缓存解码
  • 手机也能跑大模型?AutoGLM-Phone-9B让多模态推理触手可及
  • 分类模型数据漂移:云端监控与自适应训练
  • HY-MT1.5大模型镜像优势解析|媲美商业API的开源之选
  • 面向企业级应用的翻译解决方案|基于HY-MT1.5大模型镜像实践
  • 三菱PlC程序大型项目QCPU+QD77MS16 项目说明如下: 1.宝贝包含一套完整的电气开...