From b307160ba069ab41488c76668cd1cf60a75fc8c5 Mon Sep 17 00:00:00 2001 From: yelvlab Date: Mon, 23 Dec 2024 16:03:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=9B=9E=E5=8C=85=E6=9E=84?= =?UTF-8?q?=E5=BB=BA=E4=BB=A5=E5=8F=8ACRC=E6=B1=82=E5=92=8C=E6=A3=80?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc/rs485.h | 2 ++ src/rs485.c | 50 +++++++++++++++++++++++++++++++++++++------------- 2 files changed, 39 insertions(+), 13 deletions(-) diff --git a/inc/rs485.h b/inc/rs485.h index d0496b6..a876b16 100644 --- a/inc/rs485.h +++ b/inc/rs485.h @@ -29,5 +29,7 @@ void rs485_config(void); void process_command(char *cmd); uint8_t calculate_crc(uint8_t package_header[3], uint8_t package_data[], size_t data_length); +void eddy_current_value_report(void); +void tempture_value_report(void); #endif //RS485_H \ No newline at end of file diff --git a/src/rs485.c b/src/rs485.c index 5698897..250d068 100644 --- a/src/rs485.c +++ b/src/rs485.c @@ -7,6 +7,9 @@ extern uint32_t g_temperature_uint32; extern uint32_t g_eddy_current_value_uint32; +uint8_t package_header[3] = {0xB5, 0x00, 0x04}; +uint8_t package_data[4] = {0}; + void rs485_config(void) { rcu_periph_clock_enable(RS485_GPIO_RCU); rcu_periph_clock_enable(RS485_RCU); @@ -35,24 +38,17 @@ void rs485_config(void) { } void process_command(char *cmd) { - uint8_t package_header[3] = {0xB5, 0xF0, 0x04}; - uint8_t package_data[4] = {0}; - - package_data[0] = (g_eddy_current_value_uint32 >> 24) & 0xFF; - package_data[1] = (g_eddy_current_value_uint32 >> 16) & 0xFF; - package_data[2] = (g_eddy_current_value_uint32 >> 8) & 0xFF; - package_data[3] = g_eddy_current_value_uint32 & 0xFF; - if (strncmp(cmd, "M1", 2) == 0) { + + + + if (strncmp(cmd, "M12", 3) == 0) { // printf("M1 -=-=- OK!\r\n"); - // printf("EddyCurrent: %lu\r\n", g_eddy_current_value_uint32); - printf("%x%x%x", package_header[0], package_header[1], package_header[2]); - printf("%x%x%x%x", package_data[0], package_data[1], package_data[2], package_data[3]); - printf("%x\r\n", calculate_crc(package_header, package_data, 4)); + eddy_current_value_report(); } else if (strncmp(cmd, "M2", 2) == 0) { // printf("M2 -=-=- OK!\r\n"); - printf("Temperature: %lu\r\n", g_temperature_uint32); + tempture_value_report(); // } else if (strncmp(cmd, "M3", 2) == 0) { // char *param_str = cmd + 2; // Skip "M3" // int param = atoi(param_str + 1); // Skip "S" and convert to integer @@ -80,3 +76,31 @@ uint8_t calculate_crc(uint8_t package_header[3], uint8_t package_data[], size_t return (uint8_t)(crc & 0xFF); } + +void eddy_current_value_report(void) { + package_header[1] = 0xF0; //eddy current + + package_data[0] = (g_eddy_current_value_uint32 >> 24) & 0xFF; + package_data[1] = (g_eddy_current_value_uint32 >> 16) & 0xFF; + package_data[2] = (g_eddy_current_value_uint32 >> 8) & 0xFF; + package_data[3] = g_eddy_current_value_uint32 & 0xFF; + + // printf("EddyCurrent: %x\r\n", g_eddy_current_value_uint32); + printf("%c%c%c", package_header[0], package_header[1], package_header[2]); + printf("%c%c%c%c", package_data[0], package_data[1], package_data[2], package_data[3]); + printf("%c\r\n", calculate_crc(package_header, package_data, 4)); +} + +void tempture_value_report(void) { + package_header[1] = 0xF1; //temperature + + package_data[0] = (g_temperature_uint32 >> 24) & 0xFF; + package_data[1] = (g_temperature_uint32 >> 16) & 0xFF; + package_data[2] = (g_temperature_uint32 >> 8) & 0xFF; + package_data[3] = g_temperature_uint32 & 0xFF; + + // printf("Temperature: %x\r\n", g_temperature_uint32); + printf("%c%c%c", package_header[0], package_header[1], package_header[2]); + printf("%c%c%c%c", package_data[0], package_data[1], package_data[2], package_data[3]); + printf("%c\r\n", calculate_crc(package_header, package_data, 4)); +}