之前是完全不知道printf可以重定向設置
最近才發現還有這等好事,可以讓printf直接實現串口打印
在網上找了很多資料,終於實現了我想要的效果
原理:printf是通過調用底部的fputc來實現打印效果的,所以如果我們重寫fputc就能實現printf函數的重定向
也就是我們讓fputc函數直接通過串口進行打印數據,則printf也可以通過串口打印數據
當然scanf也是一樣的,我們也可以通過重寫fgetc來實現串口接收數據
先隨便新建一個C文件,然后添加到include路徑里面(總之就是加到項目文件里面去,命名隨意)
然后加入下列代碼
1 #include "stdio.h" 2 #include "stm32f1xx_hal.h" 3 4 extern UART_HandleTypeDef huart1;//根據需要修改huart,此處為UART1 5 //定義變量存儲用戶數據 6 uint8_t ch; 7 uint8_t ch_r; 8 9 //重寫這個函數,重定向printf函數到串口 10 int fputc(int c, FILE * f) 11 { 12 ch = c;//存儲一個數據 13 HAL_UART_Transmit(&huart1,&ch,1,1000);//通過串口發送這一個數據(超時時間1000毫秒) 14 return c;//發送完成后返回這個數據 15 } 16 17 //重定向scanf函數到串口 意思就是說接受串口發過來的數據 18 int fgetc(FILE * F) 19 { 20 HAL_UART_Receive(&huart1,&ch_r,1,0xffff);//通過串口接收數據(超時時間65535毫秒) 21 return ch_r;//返回接收到的數據信息 22 }
至此就完成了重定向printf和scanf兩個函數
實驗效果如下: