不含stm32 底层的代码
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.
MyStm32Code/bsp/Inc/bsp_uart.h

143 lines
4.0 KiB

2 years ago
#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);
*/