STM32使用printf函數(shù)給串口打印信息的執(zhí)行步驟為:
1.重定向printf函數(shù)
給uart.c文件中增加如下函數(shù):
//重定向c庫函數(shù)printf到USART1intfputc(intch,FILE*f){/*清SR寄存器中的TC標(biāo)志*/USART_ClearFlag(USART1,USART_FLAG_TC);/*發(fā)送一個字節(jié)數(shù)據(jù)到USART1*/USART_SendData(USART1,(uint8_t)ch);/*等待發(fā)送完畢*/while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
return(ch);}
2.增加頭文件stdio
#include
3.勾選Use MircoLIB
以上3條,缺一不可,如果你只做了第一步,編譯的時候,就會報錯,如下所示:
CFGuart.c(52):error:#20:identifier"FILE"isundefined
如果只做了前兩步,而沒有勾選Use MicorLIB,編譯器雖然不會報錯,但是串口不會輸出數(shù)據(jù)。
很多人做了重定向函數(shù)以后,輸出一串字符的第一個字符會丟失,根本原因是因為SR寄存器中的TC標(biāo)志默認(rèn)是置1的。
解決方法1:和我上面的重定向函數(shù)一樣,在開始先用USART_ClearFlag(USART1,USART_FLAG_TC);函數(shù)把TC標(biāo)志清0。
解決方法2:寫字符串的時候,前面留一個空格。
兩種方法選一個即可。