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.
143 lines
4.0 KiB
143 lines
4.0 KiB
#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 <stdlib.h>
|
|
#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);
|
|
*/ |