打印

串口发送数据!丢失?!

[复制链接]
2708|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
btiger2000|  楼主 | 2010-10-21 11:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32F103

void Uart1_PutString(u8* buf , u8 len)
{
    for(u8 i=0;i<len;i++)
    {
        Uart1_PutChar(*buf++);
    }
}


u8 Uart1_PutChar(u8 ch)
{
  //USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
  /* Write a character to the USART */
  Delay_Ms(15);
  
  USART_SendData(USART1, (u8) ch);

  while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
  
  return ch;
}

在这个例程中,如果没有Delay_Ms(15);这个延时,调用void Uart1_PutString(u8* buf , u8 len),数据就发送不出去,延时短,发送数据不全。
按说while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
  
这句就是判断是否发送完成,完成了再发送,应该不会丢数据阿!可是却丢了,

为什么?
沙发
gaobq| | 2010-10-21 14:34 | 只看该作者
我的程序是发送时,丢数,丢失第一个数

使用特权

评论回复
板凳
gaobq| | 2010-10-21 14:34 | 只看该作者
请问Delay_Ms(15)你的程序就一定能够发送完整吗?

使用特权

评论回复
地板
一级菜鸟| | 2010-10-21 14:44 | 只看该作者
单字节发送,使用TXE而不是TC

使用特权

评论回复
5
btiger2000|  楼主 | 2010-10-23 23:11 | 只看该作者
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
这句不是未发送完等待么?

使用特权

评论回复
6
xiaoxie613520| | 2010-10-24 22:50 | 只看该作者
是你的发送函数没写好吧  你把Delay_Ms(15)改成while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);一定行

使用特权

评论回复
7
jgphu| | 2010-10-25 12:55 | 只看该作者
没有看到你的初始化,我看到你把中断使能注释掉了, 你看看你的初始化有没有使能发送的中断。如果有,就把中断关掉,因为你的程序里我看到就是用查询的方法来做的。

使用特权

评论回复
8
zhaoyun1234| | 2010-10-25 13:18 | 只看该作者
建议楼主该换顺序
u8 Uart1_PutChar(u8 ch)
{
  while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
  USART_SendData(USART1, (u8) ch);
  return ch;
}

使用特权

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

本版积分规则

80

主题

1177

帖子

6

粉丝