101 lines
2.6 KiB
C
101 lines
2.6 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 512
|
|
|
|
|
|
typedef void (*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[UART_MAX];
|
|
|
|
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);
|
|
|
|
void Uart0_Task(void);
|
|
|
|
#endif /* MCU_DRIVER_INC_UART_H_ */
|