野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12287|回复: 7

USART串口调试的一个问题

[复制链接]
发表于 2016-7-14 10:44:49 | 显示全部楼层 |阅读模式
我必须把        while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET);//等待发送成功
放在发送字节前面才能得到正确的结果,不管是发送字符串还是数组。
就很奇怪了:为什么还没发送之前要先等待发送完成?而且USART_ByteSend()函数中有等待发送完成了,为什么还要等?
附一种火哥的传送字符串函数

菜鸟的

菜鸟的

火哥的

火哥的

回复

使用道具 举报

发表于 2016-7-14 11:35:46 | 显示全部楼层
改用TXNE标志就可以了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-14 16:42:47 | 显示全部楼层
flyleaf 发表于 2016-7-14 11:35
改用TXNE标志就可以了

没有TXNE这个标志啊?你说的是RXNE吗?那不是读取数据寄存器为空标志吗?好像不起作用诶。
回复 支持 反对

使用道具 举报

发表于 2016-7-14 17:05:45 | 显示全部楼层
望蓝天 发表于 2016-7-14 16:42
没有TXNE这个标志啊?你说的是RXNE吗?那不是读取数据寄存器为空标志吗?好像不起作用诶。

那估计是记错了,应该是TXE ,注意要判断reset还是set,记不清了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-14 17:34:12 | 显示全部楼层
flyleaf 发表于 2016-7-14 17:05
那估计是记错了,应该是TXE ,注意要判断reset还是set,记不清了

功能能实现,只是这个逻辑上有点难以理解,
回复 支持 反对

使用道具 举报

发表于 2016-7-14 17:39:30 | 显示全部楼层
望蓝天 发表于 2016-7-14 17:34
功能能实现,只是这个逻辑上有点难以理解,

无解,用tc就会有这个问题,所以后面我们都是用txe的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-14 18:13:59 | 显示全部楼层
flyleaf 发表于 2016-7-14 17:39
无解,用tc就会有这个问题,所以后面我们都是用txe的

我的发送一个字节函数:
/*发送一个字节,也是字符*/
void USART_ByteSend(USART_TypeDef* USARTx,uint8_t ch)
{
        /*将一个字节发送到USART*/
        USART_SendData(USARTx,ch);
        /*等待发送寄存器为空*/
        while(USART_GetFlagStatus(USARTx,USART_FLAG_TXE)!=RESET);
}
如果我的发送数组函数为:
void USART_SendArray(USART_TypeDef * USARTx,uint8_t *a)
{
        unsigned int k=0;
  do
                {
                     USART_ByteSend( USARTx, *(a+k) );
                } while(*(&a[0] + k)!='\0');

  /* 等待发送完成 */
  while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)==RESET)
  {}
}
只能发送数组最后一个数据。
如果我的发送数组函数为:
void USART_SendArray(USART_TypeDef * USARTx,uint8_t *a)
{
        unsigned int k=0;
  do
                {
                        USART_SendData( USARTx,*(a + k) );
                        /* 等待发送完毕 */
                    while (USART_GetFlagStatus(DEBUG_USART, USART_FLAG_TXE) == RESET);
                     k++;
                } while(*(&a[0] + k)!='\0');
}
就能发送所有数据,我只是一个调用函数USART_ByteSend,一个把函数分开来写,为什么结果会不一样呢?很纠结~.~

回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-14 18:48:34 | 显示全部楼层
flyleaf 发表于 2016-7-14 17:39
无解,用tc就会有这个问题,所以后面我们都是用txe的

我知道了,感谢解答!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-11 05:40 , Processed in 0.039323 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表