STM32 保存 串口接收到的数据,但是程序很快就死了,而且只保存了其中一部分。。

2024-12-17 05:46:44
推荐回答(1个)
回答1:

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); //不用清除接收标志位,读取数据就自动清除了
............... //然后在这里做你想做的事情

}