H2S stm32F407ZET stm32F407ZGT
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
H2S/Code/device/Inc/uart_helper.h

89 lines
3.4 KiB

#ifndef __UART_HELPER_H
#define __UART_HANDLE_H
/**
* 封装 uart 发送接收操作
* ?? 是否用到buf?
*/
#ifdef __cplusplus
extern "C" {
#endif
#include "uart_interface.h"
/* 回调函数,将数据返回上层 */
typedef void (*it_callback)(void *obj,uint8_t *buf, uint32_t buf_size );
// typedef struct uart_tx_record
// {
// uint32_t size;
// uint8_t *buf;
// } Uart_Trans_Record_TypeDef;
typedef struct
{
UART_HandleTypeDef *huart;
UartInterface_TypeDef *interface;
uint8_t interface_type; /* 0: common, 1: 485 ,2:3160*/
uint8_t mode_232_485; /* 0: common, 1: 485 */
uint8_t trans_type; /* 0 :polling, 1: IT 2: DMA*/
uint8_t rcv_type; /* 0 :polling, 1: IT 2: DMA*/
uint8_t idle_enable_disable; /* 0 不开启空闲中断 , 1 开启空闲中断 */
uint8_t trans_mode; /* 0 :polling, 1: IT 2: DMA*/
volatile uint32_t trans_size;
uint8_t *trans_buf;
volatile uint8_t receive_buf_con;
// volatile uint8_t transferring_flag;
volatile uint32_t receive_data_size;
uint8_t *receive_buf;
uint32_t receive_buf_half_len;
uint8_t half_flag; /*0 : 未半满, 1:半满, 2: 半满已经处理*/
volatile Uart_Status_TypeDef status; /* 发送状态 0: ready , 1:正在发送 busy,2:发送ok,*/
void * obj;
it_callback callback;
}UartHelper_TypeDef;
UartHelper_TypeDef * UartHelper_Init( );
void UartHelper_Set_Interface( UartHelper_TypeDef *uarthelper, UartInterface_TypeDef * interface );
void UartHelper_Set_Huart( UartHelper_TypeDef *uarthelper, UART_HandleTypeDef * huart );
void UartHelper_Set_Interface_Type( UartHelper_TypeDef *uarthelper, Uart_Interface_Type_Typedef interface_type );
void UartHelper_Set_Trans_Type( UartHelper_TypeDef *uarthelper, Uart_Transmode_TypeDef trans_type );
void UartHelper_Set_Rcv_Type( UartHelper_TypeDef *uarthelper, Uart_Transmode_TypeDef rcv_type );
void UartHelper_Set_Idle_Enable( UartHelper_TypeDef *uarthelper, Uart_IDLE_Enable_TypeDef idle_enable_disable );
void UartHelper_Set_TransMode( UartHelper_TypeDef *uarthelper, Uart_Transmode_TypeDef trans_mode );
void UartHelper_Set_RsMode_232_485( UartHelper_TypeDef *uarthelper, Uart_RS_Mode_TypeDef mode_232_485 );
// void UartHelper_Set_timeout( UartHelper_TypeDef *uarthelper, uint32_t timeout_ms );
int UartHelper_Set_callback_func_obj( UartHelper_TypeDef *uarthelper, void * obj, it_callback callback );
void UartHelper_Set_rcv_buf( UartHelper_TypeDef *uarthelper, uint8_t *buf, uint32_t buf_size );
void UartHelper_Set_Trans_Buf( UartHelper_TypeDef *uarthelper, uint8_t *buf, uint32_t buf_size );
int UartHelper_Transmit( UartHelper_TypeDef *uarthelper, uint8_t * buf, uint16_t size);
int UartHelper_Begin_Rcv(UartHelper_TypeDef *uarthelper, uint8_t * buf, uint16_t size);
void UartHelper_Set_GPIO_For_Trans_Cplt( UartHelper_TypeDef *uarthelper );
void UartHelper_Rcv_Cplt_Callback( UartHelper_TypeDef *uarthelper );
void UartHelper_Rcv_Idle_Callback( UartHelper_TypeDef *uarthelper );
void UartHelper_Rcv_DMA_Half_Callback( UartHelper_TypeDef *uarthelper );
int UartHelper_copy(UartHelper_TypeDef *uarthelper,uint8_t *buf,uint32_t buf_size);
int UartHelper_isbusy(UartHelper_TypeDef *uarthelper );
void UartHelper_error(UartHelper_TypeDef *uarthelper );
uint16_t Get_Crc16(const char *buf, uint16_t len);
uint8_t Check_Crc16(uint8_t *buf, uint16_t length);
#ifdef __cplusplus
}
#endif
#endif