#ifndef __BSP_UART_H #define __BSP_UART_H #include "stm32f4xx.h" /** * 封装不同使用类型串口 232 485 max3160 * 包含发送回调的GPIO操作 * 其他回调外部处理 */ /* 485 3160 启用一个, 两个接口都有 MAX3160_ENABLE */ #define MAX485_ENABLE 0 #define MAX3160_ENABLE 1 #ifdef __cplusplus extern "C" { #endif #include #include "main.h" // #if MAX3160_ENABLE // #define DUPLEX_HALF 1 // #define DUPLEX_FULL 0 // #define SEL_485 1 // #define SEL_232 0 // #define ENABLE_485_Trans 1 // #define DISABLE_485_Trans 0 // # endif // #if MAX485_ENABLE // #define ENABLE_485_Trans 1 // #define DISABLE_485_Trans 0 // # endif /* ----------------------- variables ---------------------------------*/ extern UART_HandleTypeDef huart3; UART_HandleTypeDef *pMyUart = &huart3; typedef void ( *enable_func) (void); typedef int ( *callback_fun) (void *obj, void *buf, uint16_t size); typedef struct { UART_HandleTypeDef *huart; uint8_t interface_type; /* 0: common, 1: 485 ,2:3160*/ uint8_t enable_idle_it; // #if MAX485_ENABLE // GPIO_TypeDef *de485_gpio; // uint16_t de485_pin; // uint8_t de485; // #endif // #if MAX3160_ENABLE // GPIO_TypeDef *de485_gpio; // uint16_t de485_pin; // GPIO_TypeDef *sel_gpio; // GPIO_TypeDef *dplx_gpio; // uint16_t sel_pin; // uint16_t dplx_pin; // uint8_t sel; // uint8_t dplx; // #endif // uint8_t dplx; // uint8_t sel; // uint8_t de485; uint8_t trans_mode; /* 0 :polling, 1: IT 2: DMA*/ // uint8_t *send_buf; // uint16_t size_send; // uint8_t *rcv_buf; // uint16_t size_rcv; volatile uint8_t send_flag; volatile uint8_t send_tc_flag; /* 0 开始发送, 1 发送完成*/ // uint32_t timebase; void (*enable_snd)(void); void (*enable_rcv)(void); void * obj; callback_fun callback; // 这个是供外部调用的; 中断是统一管理的, 中断会找到这里的接收回调,然后返回回去 }MYUART_TypeDef; extern MYUART_TypeDef *myuart; MYUART_TypeDef * Myuart_Init( ); void Myuart_Set_Huart(MYUART_TypeDef * myuart, UART_HandleTypeDef *huart); int Myuart_Setup_Transmod( MYUART_TypeDef * myuart, uint8_t trans_mode ); int Myuart_Set_enable_snd_func( MYUART_TypeDef * myuart, enable_func enable_snd_func ); int Myuart_Set_enable_rcv_func( MYUART_TypeDef * myuart, enable_func enable_rcv_func); int Myuart_Set_enable_idle( MYUART_TypeDef * myuart, uint8_t enable_idle); int Myuart_Set_Callback( MYUART_TypeDef * myuart, void *obj, callback_fun func); // void Myuart_Set_Sel_GPIO_Pin(MYUART_TypeDef * myuart, GPIO_TypeDef *gpio, uint16_t pin); // void Myuart_Set_Dplx_GPIO_Pin(MYUART_TypeDef * myuart, GPIO_TypeDef *gpio, uint16_t pin); // void Myuart_Set_DE485_GPIO_Pin(MYUART_TypeDef * myuart, GPIO_TypeDef *gpio, uint16_t pin); // void Myuart_Set_232(MYUART_TypeDef * myuart); // void Myuart_Set_485(MYUART_TypeDef * myuart); int Myuart_Trans(MYUART_TypeDef * myuart, uint8_t *buf, uint16_t size); // int __Myuart_Trans(MYUART_TypeDef * myuart , uint8_t *buf, uint16_t size); int Myuart_Trans_TxCplt_Callback( MYUART_TypeDef * myuart ); /* 接收方式 也有三种类型 */ int Myuart_Start_Rcv(MYUART_TypeDef * myuart, uint8_t *buf, uint16_t size); #endif /* 485 enable rcv HAL_GPIO_WritePin(myuart->de485_gpio, myuart->de485_pin, 0); enable send HAL_GPIO_WritePin(myuart->de485_gpio, myuart->de485_pin, 1); 3160 485 --高 (232 - 低) enable rcv HAL_GPIO_WritePin(myuart->dplx_gpio, myuart->dplx_gpio , 1); HAL_GPIO_WritePin(myuart->de485_gpio, myuart->de485_pin, 0); enable send HAL_GPIO_WritePin(myuart->dplx_gpio, myuart->dplx_gpio , 0); HAL_GPIO_WritePin(myuart->de485_gpio, myuart->de485_pin, 1); myuart = Myuart_Init(); Myuart_Set_Huart( myuart, phuart), Myuart_Setup_Transmod( myuart, 2 ); Myuart_Set_enable_snd_func( myuart, NULL ); Myuart_Set_enable_rcv_func( myuart, NULL); Myuart_Set_enable_idle( myuart, enable_idle); Myuart_Set_enable_rcv_func( myuart, obj, (callback_fun) func); */