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;
} |