#include "data_packet.h" // CRC16-MODBUS uint16_t Calculate_CRC16(uint8_t *data, uint16_t len) { uint16_t crc = 0xFFFF; for (uint16_t i = 0; i < len; i++) { crc ^= data[i]; for (uint8_t j = 0; j < 8; j++) { if (crc & 0x0001) { crc = (crc >> 1) ^ 0xA001; } else { crc = crc >> 1; } } } return crc; } void PackData(DataPacket_t *packet, int32_t adc1, int32_t adc2, int32_t adc3) { // packet->start_byte = PACKET_START_BYTE; // Incorrect assignment uint32_t start = PACKET_START_BYTE; packet->start_byte[0] = (start >> 24) & 0xFF; // A5 packet->start_byte[1] = (start >> 16) & 0xFF; // A5 packet->start_byte[2] = (start >> 8) & 0xFF; // 5A packet->start_byte[3] = (start) & 0xFF; // 5A // MCU 原生字节序 (小端) packet->adc_data1 = adc1; packet->adc_data2 = adc2; packet->adc_data3 = adc3; // 计算校验和 (只计算 ADC 数据部分) // uint16_t checksum = Calculate_CRC16((uint8_t*)&packet->adc_data1, sizeof(uint32_t) * 3); // packet->checksum = checksum; // 校验和也用小端 // packet->end_byte = PACKET_END_BYTE; }