stm32中串口接收到的数据怎么存到一个变量或者指针,可以在其他函数里使用

如题所述

1、初始化部分你没给出来,不知道你有没有使能发送中断或串口其他中断什么的。
2、你再中断函数里面多次读取了SR状态寄存器:
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)这里一次,

while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE)==RESET);这里读了不知道多少次,要知道状态寄存器里面有些位你一旦读取了以后就会自动清零了,你可以去查看手册去,因此是不推荐在中断函数中多次读取状态寄存器的。3、从程序上来看,只要进入中断,就肯定会执行USART_TX_Data函数而不管有没有收到数据,这样一来,如果不是因为接收中断而是其他原因的串口中断的话那样就会有问题了。
4、USART_TX_Data里面是怎么写的我们也不知道。

综上,问题既有可能出现在问题2,你要作为数据接收的话建议你这样:
if(USART_GetFlagStatus(USART2,USART_FLAG_RXNE) == SET) //这句已经能判断收到数据了
{
Data = USART_ReceiveData(USART2); //不用清除接收标志位,读取数据就自动清除了
............... //然后在这里做你想做的事情

}
温馨提示:内容为网友见解,仅供参考
无其他回答

stm32中串口接收到的数据怎么存到一个变量或者指针,可以在其他函数里使...
1、初始化部分你没给出来,不知道你有没有使能发送中断或串口其他中断什么的。2、你再中断函数里面多次读取了SR状态寄存器:if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)这里一次,while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE)==RESET);这里读了不知道多少次,要知道状态寄存器里...

怎么将串口发送过来的数据存放在既定的数组中(stm32 接受中断)
把receive_data这个单元复制到你想要存放的数组中就行了。

stm32串口收发数据为什么使用dma?
2.ADC扫描模式+DMAADC扫描模式的执行流程,7个通道,每次单独通道转换后做一次DMA数据转运,并且存储器地址自增解决数据覆盖问题。配置为:外设地址写入ADC_DR这个寄存器的地址,存储器地址为SRAM中定义的一个数组ADValue,数据宽度为16位的半字传输,地址自增,存储器地址自增,传输方向为外设站点到存储器...

STM32串口接收不定长度
步骤一:配置串口并开启中断。选择异步模式的串口1,PA9作为发送端,P10为接收端,并确保中断功能开启。步骤二:定义变量。定义接收数据的最大长度,用于存放接收到的数据的变量,以及接收数据标志和长度。步骤三:编写中断函数,处理中断内的数据接收和管理。数据接收过程是逐个字节进行,接收完毕后,更新接...

USART_ReceiveData()函数一次是接收一个字节的数据吗?
USART_ReceiveData()为STM32的串口函数,串口接收的数据就是一次1Byte(字节)。如果这个Gmap.Manager类有代码可循,那么补充这个方法代码。如果Gmap.Manager这个类是第三方的一个DLL引用,无法编辑。那么这个调用就是错误的。串口1中断函数 static void BSP_IntHandlerUSART1 (void){ if (USART_GetIT...

STM32单片机如何处理QT上位机串口中发过来的数据?
单片机接收处理串口的数据的过程就是配置好波特率、位宽、校验位等,收到数据 后可以引起中断,也可以查询标志位,然后进行相应的处理。1) 串口时钟使能,GPIO 时钟使能。2) 设置引脚复用器映射:调用 GPIO_PinAFConfig 函数。3) GPIO 初始化设置:要设置模式为复用功能。4) 串口参数初始化:设置波特率,...

stm32串口接收字符串的函数
stm32,串口接收字符串,一般都是通过串口中断函数进行接收。串口每接收一个字符,都会产生一个中断。中断函数中判断是字符中断的话,就把这个字符存储起来。一个字符串接收完成之后,会产生一个帧中断。程序中判断接收到帧中断之后就可以对字符串进行处理。

stm32串口接收和读取寄存器是同一个寄存器吗
根据csdn博客资料,在stm32微控制器中,串口接收和读取数据使用的寄存器是USART的接收寄存器,它的内部包含了一个接收缓冲区,用于存储通过串口接收到的数据。当数据进入该寄存器时,CPU可以通过访问该寄存器的地址来读取接收到的数据,实现对串口数据的读取。需要注意的是,USART的接收寄存器读取具有一定的时间...

STM32串口接收不定长数据(空闲中断+DMA)
1. 固定格式:通过约定数据包的起始和结束标志,如AA BB和BB AA,接收端在接收到这些标志后,就可以确定数据包的边界,从而存储接收到的数据。2. 接收中断+超时判断:串口接收到数据会触发接收中断。通过设置一个计时器,如果在预设时间内没有接收到新的数据,就认为一帧数据接收完成。3. 空闲中断:...

stm32如何用串口接收的16进制数控制单片机的端口位,求大神给指导下_百...
每接收一个字节数据,你就在串口中断函数里面把数据取出来放到一个足够长的数组中去,记得依次往后增加地址。接着你可以通过以上提到的两种方式断帧,判定为此次收到一帧数据后,重组数据并处理数据,接着清空上面的数组,好让后面收到的数据有空间放进去,以此不断循环即可实现协议通讯。

相似回答