“数据错位”是什么意思?
如果是每个串口收到的每个字节都是完整的,但每个串口收到的字符串互相交叉,这就纯粹是一个软件的问题了,你需要自己仔细地考虑。
STM32中的每个USART都是互相独立的,硬件不可能产生这样的问题。
是否寄存器读错了?
usart都是独立的,不会造成数据错位。
你写程序也太粗心了
三个串口,收的数据都是独立的,可能是我软件写的有问题,现在是本来应该串口2收,结果跑到串口3中了,在查询中这样写是不是不对?
while(1){
while(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET);
USART_ClearFlag(USART2, USART_FLAG_RXNE);
RxBuffer2[RxCounter2++] = (USART_ReceiveData(USART3) & 0x7F); 看看这一行
while(USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == RESET);
USART_ClearFlag(USART3, USART_FLAG_RXNE);
RxBuffer3[RxCounter3++] = (USART_ReceiveData(USART3) & 0x7F);
}
你是不是要求,如果USART2没有数据是不是USART3就不接收了?
请注意一下程序的逻辑性。
你的程序中各个串口的接收是互相牵制的
如果串口2收不到数据,程序不会去检查串口3;同样如果串口3收不到数据,程序不会去检查串口2。
程序结构本身就有问题,这样的需求应该使用中断去做。我在8楼就说了“请注意一下程序的逻辑性。”
谢谢香主的提示
我回去研究一下中断,把它写到中断里