打印
[复制链接]
2110|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
missyou198|  楼主 | 2008-11-26 08:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题已解决
沙发
香水城| | 2008-11-26 09:42 | 只看该作者

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

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

STM32中的每个USART都是互相独立的,硬件不可能产生这样的问题。

使用特权

评论回复
板凳
hjiongh| | 2008-11-26 09:46 | 只看该作者

是否寄存器读错了?

usart都是独立的,不会造成数据错位。

使用特权

评论回复
地板
missyou198|  楼主 | 2008-11-26 09:57 | 只看该作者

感谢大家

问题已解决

使用特权

评论回复
5
香水城| | 2008-11-26 10:15 | 只看该作者

你写程序也太粗心了

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

使用特权

评论回复
6
lshlin| | 2008-11-26 14:12 | 只看该作者

晕!我被楼主雷倒了!

使用特权

评论回复
7
missyou198|  楼主 | 2008-11-26 14:17 | 只看该作者

问题已解决

使用特权

评论回复
8
香水城| | 2008-11-26 14:21 | 只看该作者

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

请注意一下程序的逻辑性。

使用特权

评论回复
9
missyou198|  楼主 | 2008-11-26 14:31 | 只看该作者

san

使用特权

评论回复
10
missyou198|  楼主 | 2008-11-26 14:48 | 只看该作者

是这样的

我这三个串口是独立工作的互不影响

使用特权

评论回复
11
香水城| | 2008-11-26 16:36 | 只看该作者

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

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

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

使用特权

评论回复
12
missyou198|  楼主 | 2008-11-26 17:19 | 只看该作者

谢谢香主的提示

我回去研究一下中断,把它写到中断里

使用特权

评论回复
13
walnutcy| | 2008-12-1 23:00 | 只看该作者

中断队列机制吧,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

123

帖子

0

粉丝