86 lines
3.0 KiB
C
86 lines
3.0 KiB
C
#ifndef _BSP_UART_H_
|
|
#define _BSP_UART_H_
|
|
|
|
#include "main.h"
|
|
#include "algo_queue.h"
|
|
|
|
/******************************************
|
|
* 结构体: bsp_uart_t
|
|
* 功能: UART控制结构体
|
|
* 描述: 包含UART的所有配置和状态信息
|
|
*******************************************/
|
|
typedef struct bsp_uart_t bsp_uart_t;
|
|
|
|
/* 类型重定义 */
|
|
#define usart_type UART_HandleTypeDef
|
|
#define dma_type DMA_HandleTypeDef
|
|
|
|
#define BSP_UART_BAUD_RATE_4800 (4800)
|
|
#define BSP_UART_BAUD_RATE_9600 (9600)
|
|
#define BSP_UART_BAUD_RATE_19200 (19200)
|
|
#define BSP_UART_BAUD_RATE_57600 (57600)
|
|
#define BSP_UART_BAUD_RATE_115200 (57600)
|
|
|
|
/******************************************
|
|
* 结构体: bsp_uart_relay_t
|
|
* 功能: UART转发结构体
|
|
* 描述: 用于配置UART数据转发功能
|
|
*******************************************/
|
|
typedef struct
|
|
{
|
|
u8 flag; /* 串口转发标志位 */
|
|
bsp_uart_t *uart; /* 转发出去的串口指针 */
|
|
u16 time_out; /* 转发超时时间 */
|
|
} bsp_uart_relay_t;
|
|
|
|
|
|
|
|
struct bsp_uart_t
|
|
{
|
|
queue rx_queue; /* 数据接收队列 */
|
|
usart_type *uart; /* 串口句柄指针 */
|
|
|
|
dma_type *tx_dma; /* 发送DMA句柄 */
|
|
dma_type *rx_dma; /* 接收DMA句柄 */
|
|
|
|
u8 tx_dma_ch; /* 发送DMA通道号 */
|
|
u8 rx_dma_ch; /* 接收DMA通道号 */
|
|
vu8 tx_dma_complete_flag; /* DMA接收完成标志位 */
|
|
|
|
u8 *tx_addr; /* DMA发送缓冲区地址 */
|
|
u8 *rx_addr; /* DMA接收缓冲区地址 */
|
|
u16 tx_dma_len; /* DMA发送缓冲区长度 */
|
|
u16 rx_dma_len; /* DMA接收缓冲区长度 */
|
|
|
|
u16 rx_len; /* 接收到的数据长度 */
|
|
u16 rx_time_count; /* 超时计数 */
|
|
u16 rx_time_over; /* 超时时间 */
|
|
u8 rx_start_flag; /* 开始超时计数标志位 */
|
|
|
|
bsp_uart_relay_t relay; /* 串口转发配置 */
|
|
|
|
struct
|
|
{
|
|
void (*baud_rate)(bsp_uart_t *,u16);
|
|
}set;
|
|
|
|
void (*init)(bsp_uart_t *); /* 初始化函数指针 */
|
|
void (*send)(bsp_uart_t *, u8 *, u16); /* 串口发送函数指针 */
|
|
|
|
void (*tx_dma_tc_int)(bsp_uart_t *); /* DMA发送完成中断处理函数指针 */
|
|
|
|
void (*rx_idle_int)(bsp_uart_t *); /* 空闲中断处理函数指针 */
|
|
void (*rx_time_increment_int)(bsp_uart_t *, u16); /* 中断计数函数指针 */
|
|
void (*rx_data_analysis)(u8 *, u16, void *); /* 数据解析函数指针 */
|
|
void (*rx_task)(bsp_uart_t *); /* 串口接收任务函数指针 */
|
|
|
|
};
|
|
|
|
/* 声明外部变量 */
|
|
extern bsp_uart_t com_uart1;
|
|
extern bsp_uart_t com_uart2; /*COM2*/
|
|
extern bsp_uart_t com_uart3; /*COM3*/
|
|
extern bsp_uart_t com_uart4; /*COM1*/
|
|
extern bsp_uart_t com_uart6; /*COM6*/
|
|
#endif
|