ESP32学习笔记-CRC16_Modbus校验

本文介绍了如何在单片机开发中使用Modbus-RTU协议并通过CRC16库计算数据包的CRC校验码,展示了CRC校验码的生成和拆分过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面

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校验码,并将高低位进行拆分打印。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值