printf()重定義STC串列埠列印問題

2021-09-29 13:26:16 字數 857 閱讀 8464

這兩天除錯乙個stc的專案,由於沒法debug所以想要用printf()重定義stc串列埠列印出來除錯,但是出現了一些問題

問題如下:

st = getkeynum();	//輸出**

printf("getkeynum() = %02x", st);

printf("\r\n");

接下來看到串列埠列印的資料是這樣的

可以看到我輸出的是兩位16進製制的數,按照道理應該是輸出ff,這裡變成了ff00,後面自己上完查證和請教同事發現c51在用printf輸出時要在輸出前面增加字首

u8--bd,u16--hd,u32--ld

使用c51的printf()函式列印%d/i/u/o/x/x格式時,你必須要指定該變數的儲存格式l/l/b/b

st = getkeynum();	//輸出**

printf("getkeynum() = %02bx", st);

printf("\r\n");

輸出如下:

顯示就正常了  這個問題也是很厲害了

後面還遇到乙個串列埠中斷和定時器中斷一起用的情況,應為定時器中斷的中斷優先順序設定的比串列埠中斷高,且定時器中斷的時間設定的太短了,導致了沒法正常列印。

解決方法:延長定時器中斷產生中斷的時間間隔,或者把串列埠中斷的優先順序設定的比定時器中斷的高

希望對大家有幫助

STM32串列埠復用關係 printf重定義

什麼是普通功能輸入輸出?普通功能輸入輸出類似於 大廳門室外的關係,大廳只需要經過大門即可到室外,從室外經過門也可以到達大廳。什麼是復用工功能輸入輸出?復用功能輸入輸出類似於 房間大廳門室外的關係 從房間到室外,需要經過大廳,在經過大門才可以到達室外 從室外到房間,也需要經過大門。1 當給tdr暫存器...

AVR串列埠 自定義printf

晶元 atmega168p 晶振 8m 兩種方法 優點 使用非常方便 缺點 占用rom和ram空間比較多 這一句是關鍵 file uartio fdev setup stream uart putchar,uart getchar,fdev setup rw 波特率 define baud 9600...

printf 函式實現串列埠列印的配置方法

使用環境 整合開發平台 keil uvision 4.10 微控制器 stm32f107vct6 欲使用printf 函式實現串列埠列印功能,我們需要完成下面四個任務 1 開啟keil的target option對話方塊,在target標籤中的code generation組中將use microl...