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

[复制链接]
 楼主| 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 | 显示全部楼层
程序的思想和我的一样,不过我是在中断里面收的,是用数组先收,再发的。
yinyangdianzi 发表于 2011-10-24 12:44 | 显示全部楼层
LZ猴急
zhaoyu2005 发表于 2011-10-24 14:09 | 显示全部楼层
不知道LZ有没有禁止发送或者用485,然后切换收发状态,如果二者有一,那么应该判断TC位,也就是发送结束,这个表示停止位发出了,如果判断TXE的话,就会丢数据,因为只要将数据寄存器的数据转移到发送移位寄存器里,就置位TXE了,这时,数据还没发送完呢
 楼主| dy452876 发表于 2011-10-24 22:33 | 显示全部楼层
to: zhaoyu2005
改成TC,也不对。
其实我就是想   从串口通信助手发送并把接收字的符串显示出来,随便发多少(查询法)。怎么写代码比较合适?
zhaoyu2005 发表于 2011-10-25 12:32 | 显示全部楼层
数据量大的话,还是用中断吧
至于你的问题,我暂时也不知道为什么,过几天我试试
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); //发送
}

另外,波特率是多少?双方的波特率及相关设置要一致。
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] UART POLL.png [/img]
 楼主| dy452876 发表于 2011-10-25 19:04 | 显示全部楼层
to others:波特率没有问题,我也再瞧瞧
to xflyan:按你说的改了,居然还是不行!!!!????难道我的USART初始化有问题?初始化的程序我没改过,是开发板自带的。
 楼主| dy452876 发表于 2011-10-25 19:07 | 显示全部楼层
如下图:

file:///e:/QQ截图未命名.bmp
香水城 发表于 2011-10-25 21:54 | 显示全部楼层
直接用示波器看看。

另外,不要太相信串口调试助手,本论坛中已经多次有人说串口有问题,最后发现换掉串口调试助手之后,问题解决了。
jinghui1978 发表于 2011-10-26 09:49 | 显示全部楼层
本帖最后由 jinghui1978 于 2011-10-26 09:55 编辑

顶9楼! 另外,我听说stm32的USART有点小BUG,你可以百度看看。
无风之树 发表于 2011-11-1 09:19 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

47

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部