/* * uart.h * * Created on: May 14, 2025 * Author: cc */ #ifndef MCU_DRIVER_INC_UART_H_ #define MCU_DRIVER_INC_UART_H_ #include "ch564.h" #define MCU485_EN1_H GPIOD_SetBits(GPIO_Pin_21) #define MCU485_EN1_L GPIOD_ResetBits(GPIO_Pin_21) #define MCU485_EN2_H GPIOB_SetBits(GPIO_Pin_15) #define MCU485_EN2_L GPIOB_ResetBits(GPIO_Pin_15) #define UART_COMMBUSY_IDLE_Flag 0x00 #define UART_COMMBUSY_RECV_Flag 0x01 #define UART_COMMBUSY_SEND_Flag 0x02 #define Recv_2400_TimeOut 10 //ms #define Recv_9600_TimeOut 5 //ms #define Recv_115200_TimeOut 3 //ms #define Recv_512000_TimeOut 3 //ms #define USART_BUFFER_SIZE 512 typedef uint8_t (*Uart_prt)(uint8_t * ,uint16_t ); typedef uint8_t (*Uart_set_prt)(uint32_t ); typedef enum { UART_0, UART_1, UART_2, UART_3, UART_MAX, }UART_IDX; typedef struct{ uint8_t RecvBuffer[USART_BUFFER_SIZE]; uint8_t deal_buff[USART_BUFFER_SIZE]; uint8_t ackBuffer[USART_BUFFER_SIZE]; uint8_t SendBuffer[USART_BUFFER_SIZE]; uint8_t SendCount; //总发送次数 uint8_t SendCnt; //当前发送次数 uint8_t CommBusy; //通讯繁忙状态 uint8_t Receiving; uint8_t sn; uint8_t pc_addr; uint8_t cmd; uint8_t appFlag; uint8_t writeFlag; uint8_t ChangeBaudFlag; //切换波特率标志位 uint16_t RecvLen; uint16_t deal_len; uint16_t ackLen; uint16_t SendLen; //发送长度 uint32_t CommBaud; //通讯波特率 - 切换波特率时使用 uint32_t ackValidity; //数据的有效期 uint32_t SendValidDuration; //发送有效时长 uint32_t SendValidTick; //发送有效时间戳 uint32_t SendInterval; //发送间隔 uint32_t SendTick; //发送时间戳 uint32_t RecvTimeout; uint32_t RecvIdleTiming; uint32_t SendIdleTick; //等待空闲时间戳 Uart_prt send_data_cf; Uart_set_prt set_baud_cf; }UART_t; extern UART_t g_uart_0; extern UART_t g_uart_2; void UARTx_Init(UART_IDX uart_id, uint32_t buad); void Set_Uart_recvTimeout(UART_t *set_uart,uint32_t baud); void UART0_RECEIVE(void); void UART1_RECEIVE(void); void UART2_RECEIVE(void); void UART3_RECEIVE(void); uint8_t UART0_ChangeBaud(uint32_t baudrate); uint8_t UART1_ChangeBaud(uint32_t baudrate); uint8_t UART2_ChangeBaud(uint32_t baudrate); uint8_t UART3_ChangeBaud(uint32_t baudrate); uint8_t MCU485_SendString_0(uint8_t *buff, uint16_t len); uint8_t MCU485_SendString_2(uint8_t *buff, uint16_t len); uint8_t Uartx_Add_Data_To_SendBuff(UART_t *uart_info,uint8_t *buff,uint16_t len,uint8_t sendCount,uint32_t ValidDuration,uint32_t sendInterval); uint8_t Uartx_Clear_SendBuff(UART_t *uart_info); uint8_t Uartx_Avoid_Conflict_Send_Task(UART_t *uart_info); void Uart0_Task(void); void Uart2_Task(void); #endif /* MCU_DRIVER_INC_UART_H_ */