|

楼主 |
发表于 2019-8-17 14:55:39
|
显示全部楼层
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == huart1.Instance)
{
UART1_Buf.head_wr = (huart1.RxXferSize - huart1.RxXferCount);
HAL_UART_Receive_IT(huart,UART1_Buf.buf,512);
}
}
主要利用串口中断接收函数HAL_UART_Receive_IT(&huart1,UART1_Buf.buf,512);接收512byte数据再回调。
因为HAL库内串口自带软件Buffer,count这些。自己另外新建一个串口的结构体,通过回调函数把结构体相关接口与HAL库自带的Buffer参数同步。这样就能实时的通过自己建立的新的接口读取Buffer内部的数据而不用等512byte接收完成
uint8_t UART_ReadC(UART_HandleTypeDef *huart,uint8_t *_Byte)
{
if(huart->Instance == huart1.Instance)
{
DISABLE_INT();
UART1_Buf.head_wr = (huart1.RxXferSize - huart1.RxXferCount);
ENABLE_INT();
if(UART1_Buf.head_wr == UART1_Buf.tail_rd)
{
return 0;
}
*_Byte = UART1_Buf.buf[UART1_Buf.tail_rd++];
if(UART1_Buf.tail_rd >= UART_BUF_SIZE)
{
UART1_Buf.tail_rd = 0;
}
return 1;
}
return 0;
} |
|