1、由于从标准库转到hal库,还是特别不适应,串口测试遇到了一下问题,记录一下;
2、hal库串口的配置不再赘述,hal库串口接收完毕可调用回调函数,接收的字节为固定长度才会回调,感觉非常麻烦,而且要重新开启接收中断,特别不适用于项目,想按照标准库的方式在串口中断进行处理;
3、串口1中断函数如下,接收数据存储到数组,并且记录接收字节数目,利用空闲中断判断接收完毕,并且设置了完成标志;
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
uint8_t Temp_Data;
if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_RXNE) !=RESET)
{
Temp_Data=(uint16_t) READ_REG(huart1.Instance->RDR);
USART1_RxBuff[USART1_Rcnt]=Temp_Data;
USART1_Rcnt++;
__HAL_UART_CLEAR_FLAG(&huart1,UART_FLAG_RXNE);
}
if(USART1_Rcnt>249)USART1_Rcnt=0;
if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_IDLE) != RESET)
{
__HAL_UART_CLEAR_IDLEFLAG(&huart1);
recieve_flag=1;
// while(HAL_UART_GetState(&huart1)==HAL_UART_STATE_BUSY_TX)
}
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */
/* USER CODE END USART1_IRQn 1 */
}
4、在主函数main里面判断串口接收完成标志,然后进行信息输出,
5、提高发送的速度,打印信息如下:
发现定时发送为100ms的时候,返回的数据开始出错,与标准库比,hal库处理速度太慢,开始误以为自己的串口配置有问题。