// // Created by dell on 24-11-29. // #ifndef RS485_H #define RS485_H #include "gd32e23x_it.h" #include "gd32e23x.h" #include "systick.h" #include #include #include #include #include /******************************************************************************/ #define RS485_RCU RCU_USART0 #define RS485_GPIO_RCU RCU_GPIOA #define RS485_GPIO_PORT GPIOA #define RS485_TX_PIN GPIO_PIN_2 #define RS485_RX_PIN GPIO_PIN_3 #define RS485_PHY USART0 #define RS485_BAUDRATE 115200U #define RS485_EN_PIN GPIO_PIN_4 /******************************************************************************/ #define RX_BUFFER_SIZE 32 #define US_IR_PACKAGE_HEADER 0xD5 #define US_IR_BOARD_TYPE 0x04 #define US_IR_PACKAGE_LENGTH 0x02 /******************************************************************************/ typedef enum { VALIDATION_SUCCESS = 0, VALIDATION_CRC_ERROR = 1, VALIDATION_HEADER_ERROR = 2, VALIDATION_TYPE_ERROR = 4, VALIDATION_LENGTH_ERROR = 8 } validation_result_t; /******************************************************************************/ void rs485_config(void); void process_command(uint8_t* cmd, size_t length); uint8_t calculate_crc(uint8_t data[], uint8_t data_length); validation_result_t validate_package_crc(uint8_t* data, uint8_t data_length); validation_result_t validate_package_header(uint8_t* data); validation_result_t validate_package_type(uint8_t* data); validation_result_t validate_data_length(uint8_t* data); void ultrasonic_distance_value_report(void); void mlx90614_tempture_value_report(void); #endif //RS485_H