数码之家

 找回密码
 立即注册
搜索
查看: 685|回复: 0

[Arduino] 刚学arduino用gpt写了一个计算crc5的程序大家看看怎么样

[复制链接]
发表于 2023-8-8 08:16:41 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
以下是一个使用Arduino ESP32编写的程序,将字节序列(55 AA 40 05 00 00)的最后一个字节从00递增到99,计算每个字节序列的CRC5/ITU校验值,并通过串口输出:

  1. #include <HardwareSerial.h>



  2. HardwareSerial Serial2(2); // 使用硬件串口2



  3. // CRC5/ITU多项式:x^5 + x^2 + 1

  4. const uint8_t CRC5_POLY = 0x05;



  5. uint8_t crc5_itu(const uint8_t *data, size_t len) {

  6.   uint8_t crc = 0;



  7.   for (size_t i = 0; i < len; i++) {

  8.     crc ^= data[i];

  9.     for (uint8_t j = 0; j < 8; j++) {

  10.       if (crc & 0x80) {

  11.         crc = (crc << 1) ^ CRC5_POLY;

  12.       } else {

  13.         crc <<= 1;

  14.       }

  15.     }

  16.   }



  17.   return crc & 0x1F; // 只保留低5位

  18. }



  19. void setup() {

  20.   Serial2.begin(9600); // 设置串口波特率为9600

  21. }



  22. void loop() {

  23.   // 定义要发送的字节序列

  24.   byte dataToSend[] = {0x55, 0xAA, 0x40, 0x05, 0x00, 0x00};



  25.   for (uint8_t i = 0; i <= 99; i++) {

  26.     dataToSend[5] = i; // 更新最后一个字节



  27.     // 计算CRC5/ITU校验值

  28.     byte crc = crc5_itu(dataToSend, sizeof(dataToSend));



  29.     // 将校验值添加到字节序列末尾

  30.     byte dataWithCRC[sizeof(dataToSend) + 1];

  31.     memcpy(dataWithCRC, dataToSend, sizeof(dataToSend));

  32.     dataWithCRC[sizeof(dataToSend)] = crc;



  33.     // 通过串口发送字节序列

  34.     Serial2.write(dataWithCRC, sizeof(dataWithCRC));



  35.     delay(1000); // 每隔1秒发送一次

  36.   }

  37. }
复制代码
我们在`loop()`函数中添加了一个循环,用于将字节序列的最后一个字节从00递增到99。在每次迭代中,我们更新字节序列的最后一个字节,然后计算新字节序列的CRC5/ITU校验值,并将其添加到字节序列的末尾。最后,我们使用`Serial2.write()`函数将包含校验值的字节序列发送出去。程序每隔1秒发送一次字节序列。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-28 21:58 , Processed in 0.171601 second(s), 11 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表