54 lines
1.7 KiB
C
54 lines
1.7 KiB
C
#ifndef __UARTS_H__
|
|
#define __UARTS_H__
|
|
#include "lib.h"
|
|
#include "main.h"
|
|
|
|
//
|
|
typedef void (*rx_interupt_cb_t)(uint8_t uart_index, uint8_t *data, uint16_t len);
|
|
|
|
//
|
|
typedef void (*tx_complete_cb_t)(void);
|
|
|
|
typedef enum
|
|
{
|
|
UART_OK = 0x00u, /**< The action was successful. */
|
|
UART_ERROR = 0xFFu /**< Generic error. */
|
|
} uart_status_e;
|
|
|
|
//
|
|
typedef struct
|
|
{
|
|
uint8_t uart_index; // 串口索引
|
|
USART_TypeDef *huart;
|
|
DMA_TypeDef *dma; // 外部设置
|
|
uint32_t dma_rx_channel; // 外部设置
|
|
uint32_t dma_tx_channel; // 外部设置
|
|
|
|
uint16_t rx_index; // 接收数据索引
|
|
BOOL rx_dma_en;
|
|
uint8_t *rxbuf;
|
|
uint16_t rxsize;
|
|
|
|
uint16_t tx_index;
|
|
BOOL tx_dma_en;
|
|
uint8_t *txbuf;
|
|
uint16_t txsize;
|
|
__IO BOOL tx_dma_ok; // 发送DMA完成标志
|
|
|
|
// 接收中断回调
|
|
rx_interupt_cb_t rx_interupt_cb;
|
|
// 发生完成回调
|
|
tx_complete_cb_t tx_complete_cb;
|
|
|
|
} uart_t;
|
|
|
|
extern uart_t *uart_create(USART_TypeDef *huart, BOOL rx_dma_en, uint16_t rxsize, rx_interupt_cb_t rx_cb,
|
|
BOOL tx_dma_en, uint16_t txsize, tx_complete_cb_t tx_complete_cb); // 创建uart
|
|
extern void uart_free(uart_t *uart); // 释放uart资源
|
|
extern void uart_recv_en(uart_t *uart); // 使能接收
|
|
extern void uart_send_data(uart_t *uart, uint8_t *data, uint16_t len); // 发送数据
|
|
extern void uart_reception_callback(uart_t *uart); // 接收中断回调
|
|
extern void uart_dma_reception_callback(uart_t *uart); // DMA接收中断回调
|
|
|
|
#endif // __UARTS_H__
|