This repository has been archived on 2025-02-28. You can view files and clone it, but cannot push or open issues or pull requests.
controller-hd/User/system/bsp/uarts.h

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__