Files
2026-02-10 17:48:22 +08:00

112 lines
3.1 KiB
C

/*
* 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 1100
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_1(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 Uart1_Task(void);
void Uart2_Task(void);
#endif /* MCU_DRIVER_INC_UART_H_ */