基于STM32之UART串口通信协议(四)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、后续
待补充……
~
~
~
~
感谢阅读~
欢迎大家关注我的博客,一起分享嵌入式知识~