zoukankan      html  css  js  c++  java
  • 基于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("
    欢迎来到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、后续

    待补充……

    ~

    ~

    ~

    ~

    感谢阅读~

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

  • 相关阅读:
    Bit Manipulation
    218. The Skyline Problem
    Template : Two Pointers & Hash -> String process
    239. Sliding Window Maximum
    159. Longest Substring with At Most Two Distinct Characters
    3. Longest Substring Without Repeating Characters
    137. Single Number II
    142. Linked List Cycle II
    41. First Missing Positive
    260. Single Number III
  • 原文地址:https://www.cnblogs.com/ChurF-Lin/p/11139901.html
Copyright © 2011-2022 走看看