串口通讯 IM1281

该博客主要介绍了使用IM1281单向互感计量模块进行Modbus-RTU通讯规约的理解与应用。重点在于校检码的正确配置,通过一系列异或和移位操作计算CRC16值,确保数据传输的准确性。同时,提到了在Arduino和STM32平台上的串口通讯实现。
摘要由CSDN通过智能技术生成

例程为基于IM1281单向互感计量模块,关于 Modbus-RTU通讯规约简要理解。

1、通讯规约应注意校检码正确配置,否则所发送数据 无法被外设接收:

(1) 预置一个 16 位寄存器为 0FFFFH(全 1),称之为 CRC 寄存器。
(2) 把数据帧中的第一个字节的 8 位与 CRC 寄存器中的低字节进行异或运算,结果存回
CRC 寄存器。
(3) 将 CRC 寄存器向右移一位,最高位填以 0,最低位移出并检测。
(4) 如果最低位为 0:重复第三步(下一次移位);如果最低位为 1:将 CRC 寄存器与一
个预设的固定值(0A001H)进行异或运算。
(5) 重复第三步和第四步直到 8 次移位。这样处理完了一个完整的八位。
(6) 重复第 2 步到第 5 步来处理下一个八位,直到所有的字节处理结束。
(7) 最终 CRC 寄存器的值就是 CRC16 的值。

2、在arduino串口通讯中,读取/发送数据时以字节为单位,即8位二进制数,使用Serial.read()uchar val[num]; Serial.write(val.num);即可实现。

/*
* Title:    <基于IM1281的简单通讯>
* description:
* @author:  fateszs
* @data:    2017.11.28
*
*/
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX
unsigned char USART_RX_BUF[7]={0x00,0x00,0x00,0x00 ,0x00 ,0x00,0x00};
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值