STM32串口中断接收字符一帧数据的问题

	if(huart1.Instance->SR&(1<<5))  //判断用的是哪个串口  串口1与上位机通信
	{
		HAL_UART_Transmit(&huart1,flag1,6, 0xffff);   //用于测试串口是否进入中断回调
		temp1 = huart1.Instance->DR;         //转移接收到的数据
		UartPCRXData[ReceveData_num++] = temp1;//把数据帧接收到 串口接收缓冲区
		
		HAL_UART_Transmit(&huart1,temp1,1,0xffff);
		UartPCNumOfRecvData++;

     }

上面这段中断函数里面接收数据的代码有什么问题吗?为什么一直无法实现串口1中断接收来自电脑串口调试助手的字符串,然后每次都在中断里面将接收到的内容发回去呢?

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/5433677
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:STM32串口频繁收发至其卡死的解决方案
  • 除此之外, 这篇博客: STM32串口原理、结构体、库函数、串口发送字符(串)、重定向printf串口发送、串口中断接收控制灯、接收不定长数据中的 3.同步异步传输方式(USART与UART) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    • A同步:
      传输以数据块为核心,在一个数据块内,字符间无间隔,接受发送同步,有sclk时钟,双方sclk(串行时钟)连在一起,提供同步
      特点:效率高,无间隔
    • B异步:
      字符为传输单位,每发一个字符,都得发送一个起始位,(告诉对方我开始发了)结束发送停止位。(我发完了)
      特点:效率低,间隔任意

    在这里插入图片描述

    在这里插入图片描述

    • USART(通用同步异步收发器)是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。

    • UART,它是在 USART 基础上裁剪掉了同步通信功能,只有异步通信。简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本都是 UART。

    USART 在 STM32 应用最多莫过于“打印”程序信息,一般在硬件设计时都会预留一USART 通信接口连接电脑,用于在调试程序是可以把一些调试信息“打印”在电脑端的串口调试助手工具上,从而了解程序运行是否正确、如果出错哪具体哪里出错等等。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^