错位

amu08   2008-11-26 08:57 楼主
                                 问题已解决

回复评论 (12)

“数据错位”是什么意思?

如果是每个串口收到的每个字节都是完整的,但每个串口收到的字符串互相交叉,这就纯粹是一个软件的问题了,你需要自己仔细地考虑。

STM32中的每个USART都是互相独立的,硬件不可能产生这样的问题。
点赞  2008-11-26 09:42

是否寄存器读错了?

                                 usart都是独立的,不会造成数据错位。
点赞  2008-11-26 09:46

感谢大家

                                 问题已解决
点赞  2008-11-26 09:57

你写程序也太粗心了

三个串口,收的数据都是独立的,可能是我软件写的有问题,现在是本来应该串口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);
}
点赞  2008-11-26 10:15

晕!我被楼主雷倒了!

                                  
点赞  2008-11-26 14:12

                                 问题已解决
点赞  2008-11-26 14:17

你是不是要求,如果USART2没有数据是不是USART3就不接收了?

                                 请注意一下程序的逻辑性。
点赞  2008-11-26 14:21

san

                                  
点赞  2008-11-26 14:31

是这样的

                                 我这三个串口是独立工作的互不影响
点赞  2008-11-26 14:48

你的程序中各个串口的接收是互相牵制的

如果串口2收不到数据,程序不会去检查串口3;同样如果串口3收不到数据,程序不会去检查串口2。

程序结构本身就有问题,这样的需求应该使用中断去做。我在8楼就说了“请注意一下程序的逻辑性。”
点赞  2008-11-26 16:36

谢谢香主的提示

                                 我回去研究一下中断,把它写到中断里
点赞  2008-11-26 17:19

中断队列机制吧,

                                  
点赞  2008-12-1 23:00
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复