使用gnu编译的时候,printf底层实现已经不是fputc了,而是__write:
int _write (int fd, char *pBuffer, int size)
{
for (int i = 0; i < size; i++)
{
while((USART1->SR&0X40)==0);//等待上一次串口数据发送完成
USART1->DR = (uint8_t) pBuffer[i]; //写DR,串口1将发送数据
}
return size;
}
用这个函数替换掉原先的fputc即可!
从大佬那获得的,附上大佬的帖子:http://www.openedv.com/forum.php?mod=viewthread&tid=231872&page=1#pid750613
另附一个stackoverflow帖子:https://stackoverflow.com/questions/39664071/how-to-make-printf-work-on-stm32f103
(用百度百度了一上午才找到这个__write,用stackoverflow一发就中,stackoverflow真强!!)