打印

STM32串口通信收发不一致,急!

[复制链接]
5319|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dy452876|  楼主 | 2011-10-23 20:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
代码如下:
while(1)
{
while(!USART_GetFlagStatus(USART1,USART_FLAG_RXNE)); //接收
i = USART_ReceiveData(USART1);

USART_SendData(USART1,i); //发送
while (!USART_GetFlagStatus(USART1,USART_FLAG_TXE));
}

使用串口调试助手,发“abcde”,一般只能收到“e”,有点错乱,不知道问题出在哪里?大家帮看下!
还有在调试时,我发现写USART->DR,TXE标志没有清零,是怎么回事?
沙发
101010zzshao| | 2011-10-24 08:52 | 只看该作者
我在调stm8的时候,也遇到这样的问题,比如接收abc,再发出去的时候,只能发bc,a就没有了,后来在发之前,加了个延时,问题就解决了。但不知道本质原因是不是在此,还在学习中。

使用特权

评论回复
板凳
dy452876|  楼主 | 2011-10-24 11:34 | 只看该作者
你的情况跟我可能还不太一样,我加过延迟没有用。
这段代码在51是可以收发字符串的。
还有TXE位,我看状态始终没有清零,不是说写DR清TXE位码?为什么单步调试时没有变化呢?

使用特权

评论回复
地板
101010zzshao| | 2011-10-24 12:17 | 只看该作者
程序的思想和我的一样,不过我是在中断里面收的,是用数组先收,再发的。

使用特权

评论回复
5
yinyangdianzi| | 2011-10-24 12:44 | 只看该作者
LZ猴急

使用特权

评论回复
6
zhaoyu2005| | 2011-10-24 14:09 | 只看该作者
不知道LZ有没有禁止发送或者用485,然后切换收发状态,如果二者有一,那么应该判断TC位,也就是发送结束,这个表示停止位发出了,如果判断TXE的话,就会丢数据,因为只要将数据寄存器的数据转移到发送移位寄存器里,就置位TXE了,这时,数据还没发送完呢

使用特权

评论回复
7
dy452876|  楼主 | 2011-10-24 22:33 | 只看该作者
to: zhaoyu2005
改成TC,也不对。
其实我就是想   从串口通信助手发送并把接收字的符串显示出来,随便发多少(查询法)。怎么写代码比较合适?

使用特权

评论回复
8
zhaoyu2005| | 2011-10-25 12:32 | 只看该作者
数据量大的话,还是用中断吧
至于你的问题,我暂时也不知道为什么,过几天我试试

使用特权

评论回复
9
IJK| | 2011-10-25 13:18 | 只看该作者
改成这样,试试:
while(1)
{
while(!USART_GetFlagStatus(USART1,USART_FLAG_RXNE)); //接收
i = USART_ReceiveData(USART1);

while (!USART_GetFlagStatus(USART1,USART_FLAG_TXE));
USART_SendData(USART1,i); //发送
}

另外,波特率是多少?双方的波特率及相关设置要一致。

使用特权

评论回复
10
Xflyan| | 2011-10-25 13:20 | 只看该作者
应该如6楼所说的情况,当你判断USART_FLAG_TXE时数据只是被转移到移位寄存器里,并没有发送或完全发送,你又将下一个数据写进去,造成前一个数据的丢失,所以你应该改为判断USART_FLAG_TC位,查询法可改为 while (1) { while (USART_GetFlagStatus(USART1,USART_FLAG_RXNE) == RESET); i = USART_ReceiveData(USART1); while (USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET); USART_SendData(USART1, i); } 测试结果 [img] [/img]

使用特权

评论回复
11
dy452876|  楼主 | 2011-10-25 19:04 | 只看该作者
to others:波特率没有问题,我也再瞧瞧
to xflyan:按你说的改了,居然还是不行!!!!????难道我的USART初始化有问题?初始化的程序我没改过,是开发板自带的。

使用特权

评论回复
12
dy452876|  楼主 | 2011-10-25 19:07 | 只看该作者
如下图:

file:///e:/QQ截图未命名.bmp

使用特权

评论回复
13
香水城| | 2011-10-25 21:54 | 只看该作者
直接用示波器看看。

另外,不要太相信串口调试助手,本论坛中已经多次有人说串口有问题,最后发现换掉串口调试助手之后,问题解决了。

使用特权

评论回复
14
jinghui1978| | 2011-10-26 09:49 | 只看该作者
本帖最后由 jinghui1978 于 2011-10-26 09:55 编辑

顶9楼! 另外,我听说stm32的USART有点小BUG,你可以百度看看。

使用特权

评论回复
15
无风之树| | 2011-11-1 09:19 | 只看该作者
mark

使用特权

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

本版积分规则

12

主题

47

帖子

0

粉丝