硬件:STM32F103C8T6
平台:Keil ARM-MDk V5.11
利用printf函数通过串口(USART)进行调试时遇到的一个问题:
printf("Hello, Mini-M3");
本意是想输出"Hello, Mini-M3",但是通过串口调试助手,得到的输出是"ello, Mini-M3",也就是第一个数据没有接收到,而且这种情况只会在初始化USART后第一次
发送数据时出现。
USART发送数据的代码如下:
int fputc(int c, FILE *stream) { USART_SendData(UARTx, (U8)c); /* Loop until the end of transmission */ while (USART_GetFlagStatus(UARTx, USART_FLAG_TC) == RESET); return c; }
解决办法:
在初始USART时,将SR寄存器中的TC标志位清零,即增加下面一条代码:
USART_ClearFlag(UARTx, USART_FLAG_TC);
具体原因不详。
/×××××××××××××××××××××××××××××××××××××××× THE END ×××××××××××××××××××××××××××××××××××××××××××××××××/