STM32G30C8T6hal库串口非固定长度

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库处理速度太慢,开始误以为自己的串口配置有问题。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值