《SLAM導航機器人基礎》第三章:微控制器與STM32:串列埠Printf列印實驗
阿新 • • 發佈:2020-07-25
3.5節串列埠Printf列印實驗
我們在上一節內容裡使用了串列埠,但輸出的資料是十六進位制資料,難以閱讀,在我們想使用串列埠列印除錯資訊時並不合適,在這種情況下,我們可以使用printf函式。
a.實驗準備:USB轉串列埠模組,ST-Llink下載器,CHEAPX機器人控制板
b.實驗目的:使用STM32串列埠進行printf列印
c.相關知識點:
printf函式的使用,主要需要學習輸出格式,詳情在程式中介紹。我們在必應或百度上輸入搜尋關鍵字“printf輸出格式”,就可以獲得很多相關介紹。
d.程式設計及執行
(1)基於3.5節串列埠收發實驗的程式進行修改,增加如下函式,即能使用printf()函式。
//重定義fputc函式 int fputc(int ch, FILE *f) { while((USART1->SR&0X40)==0);//等待發送完畢 USART1->DR = (u8) ch; return ch; }
(2)編寫主函式
//串列埠Printf列印實驗 int main(void) { u8 a = 10; s8 b = -10; float c = 11.1; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//PriorityGroupConfig NVIC中斷分組設定 組2(2位搶佔優先順序,2位響應優先順序) initDebugSerial(500000); showVersion();//顯示版本 printf("串列埠Printf列印實驗");//列印字元,直接在雙引號內填寫內容 printf("\r\n"); //換行使用\r\n printf("型別資料輸出:a=%u,b=%d,c=%f \r\n",a,b,c); //無符號整形%u,有符號整形%d,浮點數%f printf("進位制資料輸出:a=十進位制%u,十六進位制%X\r\n",a,a); //十六進位制表示用%X或%x printf("資料佔位輸出:a=%5u,b=%5d,c=%3.2f \r\n",a,b,c);//整型數字用一個數字表示位置數,浮點數用兩個數字分別表示整數部分(包括小數點)和小數部分的顯示位置數 }
(3)實驗結果如下,注意不用勾選“HEX顯示”。