写在前面
Modbus一个工业上常用的通讯协议、一种通讯约定。
Modbus协议包括RTU、ASCII、TCP。
单片机与设备进行RS485通讯,大部分使用的是MODBUS-RTU通讯协议。
开发板通过串口发送MODBUS-RTU报文,CRC校验码是一道绕不开的门槛。
安装CRC库
测试代码
#include "CRC16.h" //加载库
uint8_t arr[6] = { 0x01, 0x06, 0x00, 0x42, 0x01, 0xF4 }; //定义数据包
//创建对象
CRC16 crc(CRC16_MODBUS_POLYNOME,
CRC16_MODBUS_INITIAL,
CRC16_MODBUS_XOR_OUT,
CRC16_MODBUS_REV_IN,
CRC16_MODBUS_REV_OUT);
void setup()
{
//启用串口
Serial.begin(9600);
//加载数据包
crc.add(arr,sizeof(arr));
//计算
uint16_t a = crc.calc();
//拆分
uint8_t bb[2];
//高8位
bb[0] = (a >> 8) & 0XFF;
//低8位
bb[1] = a & 0XFF;
//打印高8位
Serial.println(bb[0], HEX);
//打印高8位
Serial.println(bb[1], HEX);
}
void loop()
{
}
总结
本示例通过调用CRC库,生成数据包的CRC校验码,并将高低位进行拆分打印。