keil工程當中實現printf重定向串口打印


之前是完全不知道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兩個函數

實驗效果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM