基于stm32的uart串口modbus通讯协议+源代码+文档说明
# 基于stm32的uart串口modbus通讯协议 # modbus-RTU协议 **Modbus报文帧结构** 一个报文就是一帧数据,一个数据帧就一个报文: 指的是一串完整的指令数据,本质就是一串数据 Modbus协议在串行链路上的报文格式如下所示: | 从机地址 | 功能码 | 数据 | CRC校验 | | :------: | :----: | :-----: | :-----: | | 1 byte | 1 byte | N bytes | 2 bytes | **帧结构 = 从机地址 + 功能吗 + 数据 + 校验** - 从机地址: 每个从机都有唯一地址,占用一个字节,范围0-255,其中有效范围是1-247,其中255是广播地址(广播就是对所有从机发送应答) - 功能码: 占用一个字节,功能码的意义就是,知道这个指令是干啥的,比如你可以查询从机的数据,也可以修改从机的数据,所以不同功能码对应不同功能. - 数据: 根据功能码不同,有不同功能,比方说功能码是查询从机的数据,这里就是查询数据的地址和查询字节数等。 - 校验: 在数据传输过程中可能数据会发生错误,CRC检验检测接收的数据是否正确 # Modbus功能码 **Modbus规定了多个功能,那么为了方便的使用这些功能,我们给每个功能都设定一个功能码,也就是指代码。** Modbus协议同时规定了二十几种功能码,但是常用的只有8种,用于对存储区的读写,如下表所示: | 功能码 | 功能说明 | | :----: | :------------: | | 01H | 读取输出线圈 | | 02H | 读取输入线圈 | | 03H | 读取保持寄存器 | | 04H | 读取输入寄存器 | | 05H | 写入单线圈 | | 06H | 写入单寄存器 | | 0FH | 写入多线圈 | | 10H | 写入多寄存器 | 当然我们用的最多的就是03和06 一个是读取数据,一个是修改数据。 # CRC校验 ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。