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.
205 lines
5.0 KiB
205 lines
5.0 KiB
#include "bsp_uart.h"
|
|
|
|
MYUART_TypeDef * Myuart_Init( )
|
|
{
|
|
MYUART_TypeDef *Handle = (MYUART_TypeDef *)malloc(sizeof(MYUART_TypeDef));
|
|
if (Handle == NULL)
|
|
{
|
|
return NULL;
|
|
}
|
|
Handle->send_flag = 0;
|
|
Handle->send_tc_flag = 0;
|
|
Handle->interface_type = 0;
|
|
Handle->enable_idle_it = 0;
|
|
Handle->enable_rcv =NULL;
|
|
Handle->enable_snd =NULL;
|
|
|
|
// #if MAX485_ENABLE
|
|
// Handle->de485_gpio = NULL;
|
|
// Handle->interface_type = 1;
|
|
// #endif
|
|
|
|
// #if MAX3160_ENABLE
|
|
// Handle->de485_gpio = NULL;
|
|
// Handle->sel_gpio = NULL;
|
|
// Handle->dplx_gpio = NULL;
|
|
// Handle->interface_type = 2;
|
|
// #endif
|
|
|
|
return Handle;
|
|
}
|
|
|
|
void Myuart_Set_Huart(MYUART_TypeDef * myuart, UART_HandleTypeDef *huart)
|
|
{
|
|
myuart->huart = huart;
|
|
}
|
|
|
|
int Myuart_Setup_Transmod( MYUART_TypeDef * myuart, uint8_t trans_mode )
|
|
{
|
|
/* 0 :polling, 1: IT 2: DMA*/
|
|
myuart->trans_mode = trans_mode;
|
|
return 0;
|
|
}
|
|
|
|
int Myuart_Set_enable_snd_func( MYUART_TypeDef * myuart, enable_func enable_snd_func )
|
|
{
|
|
if (enable_snd_func != NULL) myuart->enable_snd = enable_snd_func;
|
|
return 0;
|
|
}
|
|
int Myuart_Set_enable_rcv_func( MYUART_TypeDef * myuart, enable_func enable_rcv_func)
|
|
{
|
|
if (enable_rcv_func != NULL) myuart->enable_rcv = enable_rcv_func;
|
|
return 0;
|
|
}
|
|
|
|
int Myuart_Set_enable_idle( MYUART_TypeDef * myuart, uint8_t enable_idle)
|
|
{
|
|
myuart->enable_idle_it = enable_idle;
|
|
}
|
|
|
|
int Myuart_Set_Callback( MYUART_TypeDef * myuart, void *obj, callback_fun func)
|
|
{
|
|
myuart->obj = obj;
|
|
myuart->callback = func;
|
|
}
|
|
|
|
int Myuart_Start_Rcv(MYUART_TypeDef * myuart, uint8_t *buf, uint16_t size)
|
|
{
|
|
int st;
|
|
switch ( myuart->trans_mode)
|
|
{
|
|
case 0:
|
|
st = HAL_UART_Transmit(myuart->huart, buf, size , 0xFFFF);
|
|
return st;
|
|
break;
|
|
case 1:
|
|
st = HAL_UART_Transmit_IT(myuart->huart, buf, size);
|
|
return st;
|
|
break;
|
|
case 2:
|
|
/* 会出现 st ==2 huart->gState != HAL_UART_STATE_READY */
|
|
if (myuart->enable_idle_it == 1)
|
|
{
|
|
__HAL_USART_ENABLE_IT(myuart->huart, UART_IT_IDLE);
|
|
}
|
|
st = HAL_UART_Transmit_DMA(myuart->huart, buf, size);
|
|
return st;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
int Myuart_Trans(MYUART_TypeDef * myuart, uint8_t *buf, uint16_t size)
|
|
{
|
|
int st;
|
|
if (myuart->enable_snd != NULL)
|
|
{
|
|
myuart->enable_snd;
|
|
}
|
|
|
|
switch ( myuart->trans_mode)
|
|
{
|
|
case 0:
|
|
st = HAL_UART_Transmit(myuart->huart, buf, size , 0xFFFF);
|
|
return st;
|
|
break;
|
|
case 1:
|
|
st = HAL_UART_Transmit_IT(myuart->huart, buf, size);
|
|
return st;
|
|
break;
|
|
case 2:
|
|
/* 会出现 st ==2 huart->gState != HAL_UART_STATE_READY */
|
|
st = HAL_UART_Transmit_DMA(myuart->huart, buf, size);
|
|
return st;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
int Myuart_Trans_TxCplt_Callback( MYUART_TypeDef * myuart )
|
|
{
|
|
|
|
if (myuart->enable_rcv != NULL)
|
|
{
|
|
myuart->enable_rcv;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
// void Myuart_Set_Sel_GPIO_Pin(MYUART_TypeDef * myuart, GPIO_TypeDef *gpio, uint16_t pin)
|
|
// {
|
|
// #if MAX3160_ENABLE
|
|
// myuart->sel_gpio = gpio;
|
|
// myuart->sel_pin = pin;
|
|
// #endif
|
|
|
|
// }
|
|
|
|
// void Myuart_Set_Dplx_GPIO_Pin(MYUART_TypeDef * myuart, GPIO_TypeDef *gpio, uint16_t pin)
|
|
// {
|
|
// #if MAX3160_ENABLE
|
|
// myuart->dplx_gpio = gpio;
|
|
// myuart->dplx_pin = pin;
|
|
// #endif
|
|
// }
|
|
|
|
// void Myuart_Set_DE485_GPIO_Pin(MYUART_TypeDef * myuart, GPIO_TypeDef *gpio, uint16_t pin)
|
|
// {
|
|
// #if MAX3160_ENABLE
|
|
// myuart->de485_gpio = gpio;
|
|
// myuart->de485_pin = pin;
|
|
// #endif
|
|
|
|
// #if MAX485_ENABLE
|
|
// myuart->de485_gpio = gpio;
|
|
// myuart->de485_pin = pin;
|
|
// #endif
|
|
// }
|
|
|
|
// void Myuart_Set_232(MYUART_TypeDef * myuart)
|
|
// {
|
|
// #if MAX3160_ENABLE
|
|
// myuart->sel = SEL_232;
|
|
// HAL_GPIO_WritePin( myuart->sel_gpio, myuart->sel_pin, myuart->sel );
|
|
// HAL_GPIO_WritePin( myuart->dplx_gpio, myuart->dplx_pin, DUPLEX_FULL );
|
|
// #endif
|
|
// }
|
|
|
|
// void Myuart_Set_485(MYUART_TypeDef * myuart)
|
|
// {
|
|
// #if MAX3160_ENABLE
|
|
// myuart->sel = SEL_485;
|
|
// HAL_GPIO_WritePin( myuart->sel_gpio, myuart->sel_pin, myuart->sel );
|
|
// HAL_GPIO_WritePin( myuart->dplx_gpio, myuart->dplx_pin, DUPLEX_HALF );
|
|
// HAL_GPIO_WritePin( myuart->de485_gpio, myuart->de485_pin, DISABLE_485_Trans );
|
|
// #endif
|
|
// }
|
|
|
|
|
|
// int __Myuart_Send(MYUART_TypeDef * myuart , uint8_t *buf, uint16_t size)
|
|
// {
|
|
// uint8_t st;
|
|
// switch ( myuart->trans_mode)
|
|
// {
|
|
// case 0:
|
|
// st = HAL_UART_Transmit(myuart->huart, buf, size , 0xFFFF);
|
|
// return st;
|
|
// break;
|
|
// case 1:
|
|
// st = HAL_UART_Transmit_IT(myuart->huart, buf, size);
|
|
// return st;
|
|
// break;
|
|
// case 2:
|
|
// /* 会出现 st ==2 huart->gState != HAL_UART_STATE_READY */
|
|
// st = HAL_UART_Transmit_DMA(myuart->huart, buf, size);
|
|
// return st;
|
|
// break;
|
|
// default:
|
|
// break;
|
|
// }
|
|
// return 0;
|
|
// }
|