通讯协议 的理解 :
1、通讯协议通俗易懂的理解就是两个设备之间互相 传递信息 大家一起 约定好的一种规则;通讯协议 又分为硬件层协议和 软件层协议,常用的 硬件层协议 如:RS-232、RS-485、CAN、I2C、SPI等 ,硬件层协议好比汽车需要的公路,在通信上负责稳定传输0、1两种基本的二进制数据 ,如两个 MCU 之间进行数据的传输 ,MCU使用 地线和信 线(数据传输过程 会带干扰)的传输方式输出 TTL电平 即 (逻辑0:0V 逻辑 1:5V),RS485发送器 有两条输出信 线(常用是双绞线) ,若 当前接收到逻辑0,则Va>Vb,同理若是接收到逻辑1,则相反,之后,485接收器通过比较两条线的电压高低,输出逻辑0 or 逻辑 1;
2、可以看到RS485可以起到更稳定的传输数据0、1,因为 输出的TTL电平的信 线在传输过程中很容易受到干扰奥;
3、CAN总线的传输原理也是相似的,只不过是 逻辑 1代表两根信 线都是 2.5V,逻辑 0代表一根线为1.5V 一根线为 3.5V;
4、可以看到 不同的硬件层协议其实就是不同的方式去传输逻辑 0、1,不过是相似的,就好比我们的公路,航空路线,水路,其实都是路 ,都是我们交通工具基本的路线载体 ;
5、有了路以后 我们就需要定义规则,就是我们的软件层协议,要画实线、虚线、斑马线,让车子行人遵守交通规则,安全顺畅地在我们的路上行驶 ;例如485单向通信就是单向道,只能在一个方向上传输;而半双工通信则是同一时间不能我发送数据过去同时接收数据 ,要约定主从的通信方式,只能有一个主机,并且通讯前必须由主机主动发起,从机不能主动发送数据,只能接受到主机的命令后,回复主机时 发送数据;
6、主机和从机上电后,都应该处于 接收状态 即监听模式 ;
7、当主机主动发起请求时,需要按照 约定好的数据格式发送数据帧;
8、软件层协议的目的就是 定好大家都需要遵守的交通规矩 ,即大家发送数据接收数据 都相同 的数据格式,无非就是主机需要从机的某些数据(读取)和主机控制从机 做某些事(写入);而Modbus就是一种大家互相传输数据时 预先约定的格式,TCPIP等 也同样 ;
基于 RS485的Modbus协议 :
PC机 与STM32单片机的通信实践:
硬件框架:

1、首先是STM32将端口的TTL电平通过RS485芯片转换后发送 数据 ,然后RS485接收器 接收到数据后转换为TTL电平 后,通过USB协议将数据发送到PC机的Modbus调试精灵上显示;
软件上的准备:
1、创建硬件上精准的1ms定时器,可以由1us分频得到1ms,用于后期计算 一次完整数据帧是否传输完毕 ;
2、打通串口的收发传输 ,即 硬件层 485能否发送接收数据 ,这次实验用的是串口二,并且通过 32IO口的电平设置 485处于 发送或者接收状态,配置串口二的波特率 等,并且结合打断点的方式看变量的值是否与 PC 机发送的值吻合,而32发送的值则可以在 Modbus精灵上显示;
3、可以在从机处理PC机使用modbus发过来的数据,首先是获取到完整的数据帧后 通过从机地址 匹配数据帧是否发给本从机 ,然后取最后两个字节通过高八位*256+第八位的方式de’daoCRC校验码,与数据帧其他字节相加作比较 ,来进行CRC校验,在 校验正确后,可以分别获取功能码如读取寄存器,通过寄存器首地址参数和寄存器地址回调相应的 读取寄存器函数后 ,将数据按 同样的格式打包返回给 主机 ;
谢谢观看,希望自己的读书笔记能让读者回忆或者学习到一些东西!
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!