在使用STM32的过程中,发现使用串口发送的printf重定向后,发送的字符串的第一位总是丢失。网上找到资料说只是需要加上USART_ClearFlag(USART1,USART_FLAG_TC);---清除串口1发送中断--否则第一个数不会发送。于是我就在串口配置函数中加上这个函数,结果还是没有发送成功,后来试了几次,在不同地方加上这个函数,结果在printf重定向函数中加上它发送成功了。
int fputc(int ch, FILE *f)
{
USART_ClearFlag(USART1,USART_FLAG_TC);// 清除串口1发送中断--否则第一个数不会发送
USART_SendData(USART1, (unsigned char) ch); //将Printf内容发往串口
while( USART_GetFlagStatus(USART1,USART_FLAG_TC)!= SET);
return (ch);
}
但是有一点不是太明白,既然在配置中已经清除了发送中断标志位,为什么不成功,一定要在printf重定向函数中清除,而且配置函数的调用还是在更前面!