update
This commit is contained in:
489
calib_board/usr/bsp/bsp_uart.c
Normal file
489
calib_board/usr/bsp/bsp_uart.c
Normal file
@@ -0,0 +1,489 @@
|
||||
#include "bsp_uart.h"
|
||||
#include "string.h"
|
||||
|
||||
/* RS485<38><35><EFBFBD>ƺ궨<C6BA><EAB6A8> */
|
||||
#define RS485_RX HAL_GPIO_WritePin(RS485_EN_GPIO_Port, RS485_EN_Pin, GPIO_PIN_SET)
|
||||
#define RS485_TX HAL_GPIO_WritePin(RS485_EN_GPIO_Port, RS485_EN_Pin, GPIO_PIN_SET)
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD>շ<EFBFBD><D5B7><EFBFBD><EFBFBD><EFBFBD>С */
|
||||
#define RX_TEMP_BUFF_NUM (3000U)
|
||||
|
||||
/* UART<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD> */
|
||||
#define UART1_TX_LEN (3000U)
|
||||
#define UART1_RX_LEN (3000U)
|
||||
|
||||
#define UART2_TX_LEN (3000U)
|
||||
#define UART2_RX_LEN (3000U)
|
||||
|
||||
#define UART4_TX_LEN (3000U)
|
||||
#define UART4_RX_LEN (3000U)
|
||||
|
||||
/* ȫ<>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
u8 uart1_tx_buff[UART1_TX_LEN];
|
||||
u8 uart1_rx_buff[UART1_RX_LEN];
|
||||
|
||||
u8 uart2_tx_buff[UART2_TX_LEN];
|
||||
u8 uart2_rx_buff[UART2_RX_LEN];
|
||||
|
||||
u8 uart4_tx_buff[UART4_TX_LEN];
|
||||
u8 uart4_rx_buff[UART4_RX_LEN];
|
||||
|
||||
u8 rx_temp_buff[RX_TEMP_BUFF_NUM];
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
static void bsp_uart_init(bsp_uart_t *p_uart);
|
||||
static void bsp_uart_send(bsp_uart_t *p_uart, u8 *p_data, u16 len);
|
||||
static void bsp_uart_rx_idle_int(bsp_uart_t *p_uart);
|
||||
static void bsp_uart_rx_time_increment(bsp_uart_t *p_uart, u16 time);
|
||||
static void bsp_uart_rx_task(bsp_uart_t *p_uart);
|
||||
static void bsp_uart_rx_time_start(bsp_uart_t *p_uart);
|
||||
static void bsp_uart_tx_dma_tc_int(bsp_uart_t *p_uart);
|
||||
static void bsp_uart_dma_send(bsp_uart_t *p_uart, u8 *p_data, u16 len);
|
||||
|
||||
/* <20>ⲿHAL<41><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
extern UART_HandleTypeDef huart1;
|
||||
extern UART_HandleTypeDef huart2;
|
||||
extern UART_HandleTypeDef huart4;
|
||||
|
||||
extern DMA_HandleTypeDef hdma_usart1_rx;
|
||||
extern DMA_HandleTypeDef hdma_usart1_tx;
|
||||
extern DMA_HandleTypeDef hdma_usart2_rx;
|
||||
extern DMA_HandleTypeDef hdma_usart2_tx;
|
||||
extern DMA_HandleTypeDef hdma_uart4_rx;
|
||||
extern DMA_HandleTypeDef hdma_uart4_tx;
|
||||
|
||||
/******************************************
|
||||
* <20>ṹ<EFBFBD><E1B9B9>: com_uart1
|
||||
* <20><><EFBFBD><EFBFBD>: UART1<54><31><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
|
||||
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>UART1<54><31>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻص<CDBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
*******************************************/
|
||||
bsp_uart_t com_uart1 =
|
||||
{
|
||||
.rx_queue = queue(u8, UART1_RX_LEN),
|
||||
.uart = &huart1,
|
||||
|
||||
.tx_dma = &hdma_usart1_tx,
|
||||
.rx_dma = &hdma_usart1_rx,
|
||||
|
||||
.tx_dma_len = UART1_TX_LEN,
|
||||
.rx_dma_len = UART1_RX_LEN,
|
||||
|
||||
.tx_addr = &uart1_tx_buff[0],
|
||||
.rx_addr = &uart1_rx_buff[0],
|
||||
|
||||
.tx_dma_complete_flag = 1,
|
||||
.rx_time_over = 0,
|
||||
|
||||
.relay.uart = NULL,
|
||||
|
||||
.init = bsp_uart_init,
|
||||
.send = bsp_uart_send,
|
||||
|
||||
.tx_dma_tc_int = bsp_uart_tx_dma_tc_int,
|
||||
.rx_idle_int = bsp_uart_rx_idle_int,
|
||||
.rx_time_increment_int = bsp_uart_rx_time_increment,
|
||||
.rx_data_analysis = NULL,
|
||||
.rx_task = bsp_uart_rx_task,
|
||||
};
|
||||
|
||||
/******************************************
|
||||
* <20>ṹ<EFBFBD><E1B9B9>: com_uart2
|
||||
* <20><><EFBFBD><EFBFBD>: UART2<54><32><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
|
||||
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>UART2<54><32>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻص<CDBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
*******************************************/
|
||||
bsp_uart_t com_uart2 =
|
||||
{
|
||||
.rx_queue = queue(u8, UART2_RX_LEN),
|
||||
.uart = &huart2,
|
||||
|
||||
.tx_dma = &hdma_usart2_tx,
|
||||
.rx_dma = &hdma_usart2_rx,
|
||||
|
||||
.tx_dma_len = UART2_TX_LEN,
|
||||
.rx_dma_len = UART2_RX_LEN,
|
||||
|
||||
.tx_addr = &uart2_tx_buff[0],
|
||||
.rx_addr = &uart2_rx_buff[0],
|
||||
|
||||
.tx_dma_complete_flag = 1,
|
||||
.rx_time_over = 0,
|
||||
|
||||
.relay.uart = &com_uart4,
|
||||
|
||||
.init = bsp_uart_init,
|
||||
.send = bsp_uart_send,
|
||||
.tx_dma_tc_int = bsp_uart_tx_dma_tc_int,
|
||||
.rx_idle_int = bsp_uart_rx_idle_int,
|
||||
.rx_time_increment_int = bsp_uart_rx_time_increment,
|
||||
.rx_data_analysis = NULL,
|
||||
.rx_task = bsp_uart_rx_task,
|
||||
};
|
||||
|
||||
/******************************************
|
||||
* <20>ṹ<EFBFBD><E1B9B9>: com_uart4
|
||||
* <20><><EFBFBD><EFBFBD>: UART4<54><34><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
|
||||
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>UART4<54><34>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻص<CDBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
*******************************************/
|
||||
bsp_uart_t com_uart4 =
|
||||
{
|
||||
.rx_queue = queue(u8, UART4_RX_LEN),
|
||||
.uart = &huart4,
|
||||
|
||||
.tx_dma = &hdma_uart4_tx,
|
||||
.rx_dma = &hdma_uart4_rx,
|
||||
|
||||
.tx_dma_len = UART4_TX_LEN,
|
||||
.rx_dma_len = UART4_RX_LEN,
|
||||
|
||||
.tx_addr = &uart4_tx_buff[0],
|
||||
.rx_addr = &uart4_rx_buff[0],
|
||||
|
||||
.tx_dma_complete_flag = 1,
|
||||
.rx_time_over = 0,
|
||||
|
||||
.relay.uart = NULL,
|
||||
|
||||
.init = bsp_uart_init,
|
||||
.send = bsp_uart_send,
|
||||
.tx_dma_tc_int = bsp_uart_tx_dma_tc_int,
|
||||
.rx_idle_int = bsp_uart_rx_idle_int,
|
||||
.rx_time_increment_int = bsp_uart_rx_time_increment,
|
||||
.rx_data_analysis = NULL,
|
||||
.rx_task = bsp_uart_rx_task,
|
||||
};
|
||||
|
||||
/******************************************
|
||||
* <20><><EFBFBD><EFBFBD>: bsp_uart_init
|
||||
* <20><><EFBFBD><EFBFBD>: UART<52><54>ʼ<EFBFBD><CABC>
|
||||
* <20><><EFBFBD><EFBFBD>: p_uart - ָ<><D6B8>UART<52>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
* <20><><EFBFBD><EFBFBD>: <20><>
|
||||
* <20><><EFBFBD><EFBFBD>: <20><>ʼ<EFBFBD><CABC>UART<52><54>ʹ<EFBFBD>ܿ<EFBFBD><DCBF><EFBFBD><EFBFBD>жϺ<D0B6>DMA<4D><41><EFBFBD><EFBFBD>
|
||||
*******************************************/
|
||||
static void bsp_uart_init(bsp_uart_t *p_uart)
|
||||
{
|
||||
/* <20><><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>ж<EFBFBD> */
|
||||
__HAL_UART_ENABLE_IT(p_uart->uart, UART_IT_IDLE);
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>գ<EFBFBD>ʹ<EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>ж<EFBFBD>ģʽ */
|
||||
HAL_UARTEx_ReceiveToIdle_DMA(p_uart->uart, p_uart->rx_addr, p_uart->rx_dma_len);
|
||||
}
|
||||
|
||||
/******************************************
|
||||
* <20><><EFBFBD><EFBFBD>: bsp_uart_dma_send
|
||||
* <20><><EFBFBD><EFBFBD>: DMA<4D><41><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>: p_uart - ָ<><D6B8>UART<52>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
* p_data - Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
* len - Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>: <20><>
|
||||
* <20><><EFBFBD><EFBFBD>: ʹ<><CAB9>DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>г<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
*******************************************/
|
||||
static void bsp_uart_dma_send(bsp_uart_t *p_uart, u8 *p_data, u16 len)
|
||||
{
|
||||
u32 tick_start, tick;
|
||||
|
||||
p_uart->tx_dma_complete_flag = 0;
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵ij<CDB5><C4B3>ȴ<EFBFBD><C8B4>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD>ض<EFBFBD> */
|
||||
if(p_uart->tx_dma_len < len)
|
||||
len = p_uart->tx_dma_len;
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD> */
|
||||
memcpy(p_uart->tx_addr, p_data, len);
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD>DMA<4D><41><EFBFBD><EFBFBD> */
|
||||
HAL_UART_Transmit_DMA(p_uart->uart, p_uart->tx_addr, len);
|
||||
|
||||
/* <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> */
|
||||
tick_start = HAL_GetTick();
|
||||
while(!p_uart->tx_dma_complete_flag)
|
||||
{
|
||||
tick = HAL_GetTick();
|
||||
if((tick - tick_start) > 200) /* 200ms<6D><73>ʱ */
|
||||
{
|
||||
p_uart->tx_dma_complete_flag = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************
|
||||
* <20><><EFBFBD><EFBFBD>: bsp_uart_send
|
||||
* <20><><EFBFBD><EFBFBD>: UART<52><54><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>: p_uart - ָ<><D6B8>UART<52>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
* p_data - Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
* len - Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>: <20><>
|
||||
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD>ַֿ鷢<D6BF><E9B7A2>
|
||||
*******************************************/
|
||||
static void bsp_uart_send(bsp_uart_t *p_uart, u8 *p_data, u16 len)
|
||||
{
|
||||
u16 i, send_num;
|
||||
|
||||
/* RS485<38>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ */
|
||||
if(p_uart == &com_uart4)
|
||||
RS485_TX;
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>͵Ĵ<CDB5><C4B4><EFBFBD> */
|
||||
send_num = len / p_uart->tx_dma_len;
|
||||
|
||||
/* <20>ֿ鷢<D6BF><E9B7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
for(i = 0; i < send_num; i++)
|
||||
{
|
||||
bsp_uart_dma_send(p_uart, &p_data[p_uart->tx_dma_len * i], p_uart->tx_dma_len);
|
||||
}
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
len -= p_uart->tx_dma_len * i;
|
||||
if(0 == len)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
bsp_uart_dma_send(p_uart, &p_data[p_uart->tx_dma_len * i], len);
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************
|
||||
* <20><><EFBFBD><EFBFBD>: bsp_uart_tx_dma_tc_int
|
||||
* <20><><EFBFBD><EFBFBD>: DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>: p_uart - ָ<><D6B8>UART<52>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
* <20><><EFBFBD><EFBFBD>: <20><>
|
||||
* <20><><EFBFBD><EFBFBD>: <20><>DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>е<EFBFBD><D0B5>ã<EFBFBD><C3A3><EFBFBD><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־
|
||||
*******************************************/
|
||||
static void bsp_uart_tx_dma_tc_int(bsp_uart_t *p_uart)
|
||||
{
|
||||
p_uart->tx_dma_complete_flag = 1;
|
||||
}
|
||||
|
||||
/******************************************
|
||||
* <20><><EFBFBD><EFBFBD>: bsp_uart_rx_idle_int
|
||||
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>: p_uart - ָ<><D6B8>UART<52>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
* <20><><EFBFBD><EFBFBD>: <20><>
|
||||
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>UART<52><54><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*******************************************/
|
||||
static void bsp_uart_rx_idle_int(bsp_uart_t *p_uart)
|
||||
{
|
||||
u16 rx_length, i;
|
||||
|
||||
/* ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD> */
|
||||
HAL_UART_DMAStop(p_uart->uart);
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> */
|
||||
rx_length = p_uart->rx_dma_len - __HAL_DMA_GET_COUNTER(p_uart->rx_dma);
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA><30>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD> */
|
||||
if (rx_length == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
for (i = 0; i < rx_length; i++)
|
||||
{
|
||||
queue_push_back(p_uart->rx_queue, (void *)&p_uart->rx_addr[i]);
|
||||
}
|
||||
|
||||
/* <20><>ʼ<EFBFBD><CABC><EFBFBD>ճ<EFBFBD>ʱ<EFBFBD><CAB1>ʱ */
|
||||
bsp_uart_rx_time_start(p_uart);
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
HAL_UARTEx_ReceiveToIdle_DMA(p_uart->uart, p_uart->rx_addr, p_uart->rx_dma_len);
|
||||
}
|
||||
|
||||
/******************************************
|
||||
* <20><><EFBFBD><EFBFBD>: bsp_uart_rx_time_increment
|
||||
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD>ճ<EFBFBD>ʱʱ<CAB1><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>: p_uart - ָ<><D6B8>UART<52>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
* time - <20><><EFBFBD>ӵ<EFBFBD>ʱ<EFBFBD><CAB1>ֵ
|
||||
* <20><><EFBFBD><EFBFBD>: <20><>
|
||||
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD>ж<EFBFBD><D0B6>е<EFBFBD><D0B5>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*******************************************/
|
||||
static void bsp_uart_rx_time_increment(bsp_uart_t *p_uart, u16 time)
|
||||
{
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> */
|
||||
if(1 == p_uart->rx_start_flag)
|
||||
{
|
||||
p_uart->rx_time_count += time;
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************
|
||||
* <20><><EFBFBD><EFBFBD>: bsp_uart_rx_time_start
|
||||
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD>ʱ<EFBFBD><CAB1>ʱ
|
||||
* <20><><EFBFBD><EFBFBD>: p_uart - ָ<><D6B8>UART<52>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
* <20><><EFBFBD><EFBFBD>: <20><>
|
||||
* <20><><EFBFBD><EFBFBD>: <20><>ʼ<EFBFBD><CABC><EFBFBD>ճ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
*******************************************/
|
||||
static void bsp_uart_rx_time_start(bsp_uart_t *p_uart)
|
||||
{
|
||||
p_uart->rx_start_flag = 1;
|
||||
p_uart->rx_time_count = 0;
|
||||
}
|
||||
|
||||
/******************************************
|
||||
* <20><><EFBFBD><EFBFBD>: bsp_uart_rx_time_stop
|
||||
* <20><><EFBFBD><EFBFBD>: ֹͣ<CDA3><D6B9><EFBFBD>ճ<EFBFBD>ʱ<EFBFBD><CAB1>ʱ
|
||||
* <20><><EFBFBD><EFBFBD>: p_uart - ָ<><D6B8>UART<52>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
* <20><><EFBFBD><EFBFBD>: <20><>
|
||||
* <20><><EFBFBD><EFBFBD>: ֹͣ<CDA3><D6B9><EFBFBD>ճ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
*******************************************/
|
||||
static void bsp_uart_rx_time_stop(bsp_uart_t *p_uart)
|
||||
{
|
||||
p_uart->rx_start_flag = 0;
|
||||
p_uart->rx_time_count = 0;
|
||||
}
|
||||
|
||||
/******************************************
|
||||
* <20><><EFBFBD><EFBFBD>: bsp_uart_rx_task
|
||||
* <20><><EFBFBD><EFBFBD>: UART<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>: p_uart - ָ<><D6B8>UART<52>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
* <20><><EFBFBD><EFBFBD>: <20><>
|
||||
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡
|
||||
*******************************************/
|
||||
static void bsp_uart_rx_task(bsp_uart_t *p_uart)
|
||||
{
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>һ֡<D2BB><D6A1><EFBFBD><EFBFBD> */
|
||||
if(p_uart->rx_time_over < p_uart->rx_time_count)
|
||||
{
|
||||
/* <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> */
|
||||
p_uart->rx_len = queue_size(p_uart->rx_queue);
|
||||
|
||||
/* ֹͣ<CDA3><D6B9>ʱ */
|
||||
bsp_uart_rx_time_stop(p_uart);
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч */
|
||||
if(p_uart->rx_len <= p_uart->rx_dma_len && (0 != p_uart->rx_len))
|
||||
{
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>ȳ<EFBFBD><C8B3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><D5B6><EFBFBD> */
|
||||
if(RX_TEMP_BUFF_NUM < p_uart->rx_len)
|
||||
{
|
||||
queue_clear(p_uart->rx_queue);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* <20>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
for(u16 i = 0; i < p_uart->rx_len; i++)
|
||||
{
|
||||
queue_pop(p_uart->rx_queue, &rx_temp_buff[i]);
|
||||
}
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
if(NULL != p_uart->rx_data_analysis)
|
||||
{
|
||||
p_uart->rx_data_analysis(rx_temp_buff, p_uart->rx_len, p_uart);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ORE
|
||||
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
|
||||
{
|
||||
bsp_uart_t *p_uart = NULL;
|
||||
if (huart->Instance == USART1)
|
||||
{
|
||||
p_uart = &com_uart1;
|
||||
}
|
||||
else if (huart->Instance == USART2)
|
||||
{
|
||||
p_uart = &com_uart2;
|
||||
}
|
||||
else if (huart->Instance == UART4)
|
||||
{
|
||||
p_uart = &com_uart4;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(huart->ErrorCode & HAL_UART_ERROR_NE)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
__HAL_UART_CLEAR_NEFLAG(huart);
|
||||
}
|
||||
if(huart->ErrorCode & HAL_UART_ERROR_FE)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>
|
||||
__HAL_UART_CLEAR_FEFLAG(huart);
|
||||
}
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET)
|
||||
{
|
||||
__HAL_UART_CLEAR_OREFLAG(huart); // <20><><EFBFBD><EFBFBD>ORE<52><45>־
|
||||
}
|
||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_FE) != RESET)
|
||||
{
|
||||
__HAL_UART_CLEAR_FEFLAG(huart); // <20><><EFBFBD><EFBFBD>ORE<52><45>־
|
||||
}
|
||||
|
||||
//
|
||||
if(p_uart != NULL)
|
||||
{
|
||||
// HAL_UART_DeInit(huart);
|
||||
// HAL_UART_Init(huart);
|
||||
// HAL_UART_DMAStop(p_Uart->Uart);
|
||||
HAL_UARTEx_ReceiveToIdle_DMA(p_uart->uart, p_uart->rx_addr, p_uart->rx_dma_len);
|
||||
}
|
||||
}
|
||||
|
||||
// ʵ<>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD>жϻص<CFBB>
|
||||
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
|
||||
{
|
||||
if (huart->Instance == USART1)
|
||||
{
|
||||
bsp_uart_rx_idle_int(&com_uart1);
|
||||
}
|
||||
else if (huart->Instance == USART2)
|
||||
{
|
||||
bsp_uart_rx_idle_int(&com_uart2);
|
||||
}
|
||||
else if (huart->Instance == UART4)
|
||||
{
|
||||
bsp_uart_rx_idle_int(&com_uart4);
|
||||
}
|
||||
}
|
||||
|
||||
/* <20><><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɻص<C9BB><D8B5><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> */
|
||||
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
|
||||
{
|
||||
// if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE))
|
||||
// {
|
||||
// __HAL_UART_CLEAR_IDLEFLAG(huart);
|
||||
|
||||
// if (huart->Instance == USART1)
|
||||
// {
|
||||
// bsp_Uart_Rx_IdleInt(&COM_Uart1);
|
||||
// }
|
||||
// else if (huart->Instance == USART2)
|
||||
// {
|
||||
// bsp_Uart_Rx_IdleInt(&COM_Uart2);
|
||||
// }
|
||||
// else if (huart->Instance == UART4)
|
||||
// {
|
||||
// bsp_Uart_Rx_IdleInt(&COM_Uart4);
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
|
||||
{
|
||||
if (huart->Instance == USART1)
|
||||
{
|
||||
bsp_uart_tx_dma_tc_int(&com_uart1);
|
||||
}
|
||||
else if (huart->Instance == USART2)
|
||||
{
|
||||
bsp_uart_tx_dma_tc_int(&com_uart2);
|
||||
}
|
||||
else if (huart->Instance == UART4)
|
||||
{
|
||||
bsp_uart_tx_dma_tc_int(&com_uart2);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user