基于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、后续

待补充……

~

~

~

~

感谢阅读~

 欢迎大家关注我的博客,一起分享嵌入式知识~

posted @ 2019-07-05 18:02  LLLIN000  阅读(3194)  评论(2编辑  收藏  举报