1. 程式人生 > 實用技巧 >《SLAM導航機器人基礎》第三章:微控制器與STM32:串列埠Printf列印實驗

《SLAM導航機器人基礎》第三章:微控制器與STM32:串列埠Printf列印實驗

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顯示”。