#ifndef _BSP_UART_H_ #define _BSP_UART_H_ #include "main.h" #include "algo_Queue.h" typedef struct bsp_Uart_t bsp_Uart_t; #define usart_type UART_HandleTypeDef #define dma_type DMA_HandleTypeDef /*串口转发*/ typedef struct { u8 flag; /*串口转发标志位*/ bsp_Uart_t *uart; /*转发出去的串口*/ u16 time_out; /*转发超时时间*/ }bsp_uart_relay_t; struct bsp_Uart_t { queue RxQueue; /*数据接收队列*/ usart_type *Uart; /*串口*/ dma_type *Tx_DMA; /*DMA*/ dma_type *Rx_DMA; u8 Tx_DMA_CH; u8 Rx_DMA_CH; vu8 Tx_DMA_CompleteFlag; /*DMA接受完成标志位*/ u8 *Tx_Addr; /*DMA搬运缓冲*/ u8 *Rx_Addr; u16 Tx_DMA_Len; u16 Rx_DMA_Len; u16 Rx_Len; /*接收到的数据长度*/ u16 Rx_TimeCount; /*超时计数*/ u16 Rx_TimeOver; /*超时时间*/ u8 Rx_StartFlag; /*开始超时计数标志位*/ bsp_uart_relay_t relay; /*串口转发*/ void (*Init)(bsp_Uart_t *); /*初始化*/ void (*Send)(bsp_Uart_t *,u8 *,u16); /*串口发送函数*/ void (*Tx_DMA_TCInt)(bsp_Uart_t *); /*DMA发送完成中断*/ void (*Rx_IdleInt)(bsp_Uart_t *); /*空闲中断*/ void (*Rx_TimeIncrementInt)(bsp_Uart_t *,u16); /*中断计数计数*/ void (*Rx_DataAnalysis)(u8 *,u16,void *); /*数据解析*/ void (*Rx_Task)(bsp_Uart_t *); /*串口接收任务*/ }; extern bsp_Uart_t COM_Uart1; extern bsp_Uart_t COM_Uart2; extern bsp_Uart_t COM_Uart4; #endif