打印

USART_FLAG_TC和USART_FLAG_TXE

[复制链接]
11127|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
styeven|  楼主 | 2011-8-11 10:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)  //注意USART_FLAG_TXE(发送数据寄存器空标志位)不能改成USART_FLAG_TC(发送完成位)。否则有可能失去首字母。

这个是我自己测试后的结果,我是为了实现printf功能。但是每次如果把USART_FLAG_TXE改成USART_FLAG_TC 单片机重启后第一次发送的第一个数据都会丢失。如我发送printf("hello"),就会丢掉h,显示ello.是不是因为单片机复位把USART_FLAG_TC自动清0,而USART_FLAG_TXE是置1?求大虾指点!!!



下附源代码
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) //不加也可以,不过最好加上。与下面fputc(int ch, FILE *f)配合使用。
//int fputc(int ch, FILE *f)
//以下   fputc(int ch, FILE *f)函数是为了实现printf功能。必须把USE MicrolLIB 打钩
int fputc(int ch, FILE *f)
{
//if (ch == '\n'){putchar('\r');}    //可以不加。还待琢磨
/* Place your implementation of fputc here */
/* e.g. write a character to the USART */
USART_SendData(USART1, (uint8_t) ch);
/* Loop until the end of transmission */
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)  //注意USART_FLAG_TXE不能改成USART_FLAG_TC。否则有可能失去首字母
{}
return ch;
}
沙发
香水城| | 2011-8-11 11:27 | 只看该作者

使用特权

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

本版积分规则

0

主题

20

帖子

1

粉丝