一、前言 1、簡介 前面在UART發送中已經講解過如何調用HAL庫的HAL_UART_Transmit函數來實現串口發送,而在調用這個函數來實現串口發送的話,但是在發送數據或者字元的時候,需要將數據或字元都先轉換成字元並存在一個數組,或者分開發幾次,這是會出現一些不便之處,不能像printf一樣方便 ...
一、前言
1、簡介
前面在UART發送中已經講解過如何調用HAL庫的HAL_UART_Transmit函數來實現串口發送,而在調用這個函數來實現串口發送的話,但是在發送數據或者字元的時候,需要將數據或字元都先轉換成字元並存在一個數組,或者分開發幾次,這是會出現一些不便之處,不能像printf一樣方便。
所以這篇博客就說說如何在串口上實現用printf函數來發送,實現方法也非常簡單。
2、UART簡介
嵌入式開發中,UART串口通信協議是我們常用的通信協議之一,全稱叫做通用非同步收發傳輸器(Universal Asynchronous Receiver/Transmitter)。
3、準備工作
按照UART詳解中完成所有配置操作並生成代碼,就可以開始下麵操作。
二、代碼部分
1、創建新的“.c”、“.h”文件(命名按照自己習慣)
2、在“.h”文件中添加(最後需要空出一行)
1 #ifndef _CORE_PRINTF_H_ 2 #define _CORE_PRINTF_H_ 3 4 #include "stdio.h" 5 #include "Usart.h" 6 7 8 9 10 11 12 #endif
3、在“.c”文件中添加(最後需要空出一行)
1 #include "Core_Printf.h" 2 3 4 5 #if 1 6 #pragma import(__use_no_semihosting) 7 /* 標準庫需要的支持函數 */ 8 struct __FILE 9 { 10 int handle; 11 }; 12 13 FILE __stdout; 14 /* 定義_sys_exit()以避免使用半主機模式 */ 15 void _sys_exit(int x) 16 { 17 x = x; 18 } 19 /* 重定義fputc函數 */ 20 int fputc(int ch, FILE *f) 21 { 22 /* 選擇USART1發送 */ 23 while((USART1->SR&0X40)==0);//迴圈發送,直到發送完畢 24 USART1->DR = (uint8_t) ch; 25 return ch; 26 } 27 #endif
4、添加Include頭文件(在需要調用到的函數中添加)
1 /* USER CODE BEGIN Includes */ 2 #include "Core_Printf.h" 3 /* USER CODE END Includes */
5、整個main函數如下
1 int main(void) 2 { 3 /* USER CODE BEGIN 1 */ 4 5 /* USER CODE END 1 */ 6 7 8 /* MCU Configuration--------------------------------------------------------*/ 9 10 /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ 11 HAL_Init(); 12 13 /* USER CODE BEGIN Init */ 14 15 /* USER CODE END Init */ 16 17 /* Configure the system clock */ 18 SystemClock_Config(); 19 20 /* USER CODE BEGIN SysInit */ 21 22 /* USER CODE END SysInit */ 23 24 /* Initialize all configured peripherals */ 25 MX_GPIO_Init(); 26 MX_USART1_UART_Init(); 27 /* USER CODE BEGIN 2 */ 28 29 /* USER CODE END 2 */ 30 31 /* Infinite loop */ 32 /* USER CODE BEGIN WHILE */ 33 while (1) 34 { 35 /* UART printf發送 */ 36 printf("\r\n歡迎來到LLLIN000的博客!!"); 37 /* 延遲1s */ 38 HAL_Delay(1000); 39 /* USER CODE END WHILE */ 40 41 /* USER CODE BEGIN 3 */ 42 } 43 /* USER CODE END 3 */ 44 }
6、編譯、下載燒寫
7、實現效果
說明:
按照上面的操作完成後,就可以在串口發送上實現printf的發送功能,非常方便使用。
三、結尾
1、總結
這篇博客補全了 未提及的Printf發送方式,我們可以將這兩個代碼文件保存下來,日後可以直接在其他項目調用即可。
2、回顧
1)UART詳解
2)UART發送
3)UART接收
3、後續
待補充……
~
~
~
~
感謝閱讀~
歡迎大家關註我的博客,一起分享嵌入式知識~