利用STM32 HAL库实现USART串口通信,并通过printf重定向输出“Hello World“

ops/2024/9/20 9:18:30/ 标签: stm32, 嵌入式硬件, 单片机, USART

  一、开发环境

硬件:正点原子探索者 V3 STM32F407 开发板

单片机:STM32F407ZGT6

Keil版本:5.32

STM32CubeMX版本:6.9.2

STM32Cube MCU Packges版本:STM32F4 V1.27.1

上一篇使用STM32F407的HAL库只需1行代码实现USART1串口打印“Hello World!”,而平时都是用printf打印的,现在每次都要调用HAL_UART_Transmit()函数,比较麻烦,怎么解决呢?采用fputc调用HAL_UART_Transmit实现printf重定向的,它有三个好处。

HAL_UART_Transmit实现printf重定向的三个主要好处包括:

  1. 提高代码效率和可读性
    重定向printfHAL_UART_Transmit允许开发者使用熟悉的printf函数格式来发送数据到USART,而无需每次调用底层UART传输函数。这不仅减少了代码量,还提高了代码的可读性和可维护性。开发者可以专注于业务逻辑的实现,而无需过多关注底层通信细节。

  2. 简化调试过程
    在嵌入式系统开发中,调试是一个必不可少的环节。通过重定向printf,开发者可以直接将调试信息通过USART发送到PC端的串口监视工具中,实时查看程序的运行状态和变量值。这极大地简化了调试过程,提高了开发效率。

  3. 增强灵活性和扩展性
    虽然HAL_UART_Transmit提供了基本的UART通信功能,但使用printf重定向可以进一步扩展其用途。printf函数支持丰富的格式化输出选项,可以方便地输出各种数据类型,并以特定的格式呈现。此外,开发者还可以结合其他库函数或自定义函数,实现更复杂的串口通信需求,如发送自定义协议包或解析接收到的数据。

综上所述,对HAL_UART_Transmit实现printf重定向可以带来代码效率和可读性的提升、调试过程的简化以及灵活性和扩展性的增强等好处。

 下面我将详细解释利用STM32 HAL库实现USART1串口通信,并通过printf重定向输出"Hello World"的STM32CubeMX配置步骤和程序。

 二、配置STM32CubeMX

  1. 启动STM32CubeMX,新建STM32CubeMX项目
  2. 选择MCU:在软件中选择你的STM32型号-STM32F407ZGT6。
  3. 选择时钟源:

  4. 配置时钟:
  5. 使能Debug功能:Serial Wire
  6. HAL库时基选择:SysTick
  7. USART1配置:选择异步模式。    
  8. 配置工程参数:在Project标签页中,配置项目名称和位置,选择工具链MDK-ARM。​ 9.生成代码:在Code Generator标签页中,配置工程外设文件与HAL库,勾选头文件.c和.h文件分开,然后点击Project > Generate Code生成代码。 

三、代码实现与部署

  1.  main.c增加代码:main.c的第1行添加printf的头文件#include<stdio.h>,在 while(1)里增加2行代码。​​​​​  ​

    /* USER CODE BEGIN Header */
    #include<stdio.h>
    /********************************************************************************* @file           : main.c* @brief          : Main program body******************************************************************************* @attention** Copyright (c) 2024 STMicroelectronics.* All rights reserved.** This software is licensed under terms that can be found in the LICENSE file* in the root directory of this software component.* If no LICENSE file comes with this software, it is provided AS-IS.********************************************************************************/
    /* USER CODE END Header */
    //HAL_UART_Transmit(&huart1, (uint8_t*)"Hello World!\r\n", 16, 10);// 使用HAL_UART_Transmit函数直接发送"Hello World!\r\n"字符串到USART1
    // 重定向后的printf函数发送"Hello World!\r\n"字符串到USART,
    //printf函数内部会调用自定义的重定向函数(例如fputc),该函数会使用HAL_UART_Transmit发送数据	printf("Hello World!\r\n");
    HAL_Delay(1000);
  2.  usart.c增加代码:usart.c的第1行添加头文件#include<stdio.h>,在末尾用户代码区增加如下代码。printf调用“fputc()”,该函数会使用HAL_UART_Transmit发送数据。
    /* USER CODE BEGIN 1 */
    struct __FILE
    {int a;
    };
    FILE __stdout;
    /*****************************************************
    *function: 写字符文件函数
    *param1: 输出的字符
    *param2: 文件指针
    *return: 输出字符的 ASCII 码
    ******************************************************/
    int fputc(int ch, FILE *f)
    {HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 10);return ch;
    }
    /* USER CODE END 1 */
    
  3. 连接USART1:用USB转TTL工具连接当前硬件USART1的PA9、PA10,GND。
  4. 打开串口助手:
  5. 编译代码:Keil编译生成的代码。
  6. 烧录程序:将编译好的程序用ST-LINK烧录到STM32微控制器中。

四、运行结果

观察结果:一旦程序烧录完成并运行,串口助手每隔一秒打印“Hello World!”。如果一切正常,恭喜你,你现在已经会“Hello World!”了!​​

​五、注意事项

1.确保你的开发环境和工具链已经正确安装和配置。

2.如果没有打印“Hello World!”,按一下复位键,检查连接和电源是否正确,注意根据你所用的硬件来接线,不要接错线了。


http://www.ppmy.cn/ops/17037.html

相关文章

Elasticsearch索引中数据的增删改查与并发控制

Elasticsearch提供了丰富的REST API接口&#xff0c;使得用户能够便捷地对索引映射中的数据进行增删改查操作。本文将通过示例演示这些操作方法&#xff0c;同时介绍如何利用乐观锁进行并发控制&#xff0c;以及如何实现索引数据的批量写入。 使用REST端点对索引映射中的数据进…

Ubuntu关闭防火墙、关闭selinux、关闭swap

关闭防火墙 打开终端&#xff0c;然后输入如下命令&#xff0c;查看防火墙状态&#xff1a; sudo ufw status 开启防火墙命令如下&#xff1a; sudo ufw enable 关闭防火墙命令如下&#xff1a; sudo ufw disable 关闭selinux setenforce 0 && sed -i s/SELINUXe…

【代码随想录】day45

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、70爬楼梯 &#xff08;进阶&#xff09;二、322零钱兑换三、279完全平方数 一、70爬楼梯 &#xff08;进阶&#xff09; 去年春招面试被考过这个题&#xff0c…

python的练习

python 练习 一、练习题目二、代码概览 一、练习题目 Hello World 实例数字求和平方根二次方程计算三角形的面积计算圆的面积随机数生成摄氏温度转华氏温度交换变量if 语句判断字符串是否为数字判断奇数偶数判断闰年获取最大值函数质数判断输出指定范围内的素数阶乘实例九九乘…

搭建JMeter+Grafana+influxdb性能测试监控平台

保姆级教程参考&#xff1a;https://blog.csdn.net/wqda125/article/details/130853557 非常详细&#xff0c;包括windows/mac环境下搭建、liunx环境下搭建、docker容器下搭建&#xff1b;再次就不再赘述&#xff0c;就动手实践搭建性能监控体系吧 我本地笔记本是参考了docker…

【OS】AUTOSAR架构下MCAL Modules软件分区问题分析

目录 前言 正文 1.TC3xx芯片中关于访问权限的描述 2.EB中关于访问模式的配置

【机器学习】Q-Learning算法:在序列决策问题中的实践与探索

在序列决策问题中的实践与探索 一、Q-Learning算法概述二、Q-Learning算法实例分析三、Q-Learning算法代码实现四、总结与展望 在人工智能领域&#xff0c;序列决策问题一直是一个核心挑战。面对复杂的环境和动态变化的状态&#xff0c;智能体如何做出最优决策&#xff0c;以达…

大语言模型在研究领域的应用——多模态大语言模型

多模态大语言模型 训练过程视觉-语言对齐预训练视觉指令微调 多模态大语言模型的评测评测维度评测基准 代表性的多模态大语言模型MiniGPT-4LLaVAGPT-4VGemini 总结应用建议未来方向 多模态大语言模型&#xff08;Multimodal Large Language Model, MLLM&#xff09;主要是指那些…

基于51单片机智能窗帘仿真设计( proteus仿真+程序+设计报告+讲解视频)

基于51单片机智能窗帘仿真设计( proteus仿真程序设计报告讲解视频&#xff09; 基于51单片机智能窗帘仿真设计 1. 主要功能&#xff1a;2. 讲解视频&#xff1a;3. 仿真设计4. 程序代码5. 设计报告6. 原理图7. 设计资料内容清单资料下载链接&#xff1a; 仿真图proteus8.9及以上…

WEB攻防-ASP安全-ASP后门植入连接

windows2003环境搭建&#xff0c;可参考上一篇WEB攻防-ASP安全-MDB下载-CSDN博客 将aspcms解压到C:\inetpub\wwwroot,创建网站并赋予internet来宾用户权限 配置启用父路径和主页指向 上一篇文章提到&#xff0c;数据库文件后缀为asp、asa会被执行解析&#xff0c;所以当进行访…

2024弱电工程质量标准有哪些

一、弱电工程质量标准有哪些 为了在工程质量上严格把关而制定的标准&#xff0c;工程只有达到标准才能成功运行。我国在工程施工与质保方面有明文规定和具体实施细则&#xff0c;监督承包方施工工作。弱电工程质量标准有哪些?标准规定有完整的一套&#xff0c;细节分很多种。…

C/C++常用开源库总结

文章目录 库名主要功能和组件语言miniftpd研究简单的ftp服务器Cmuduo的研究目录记录学习muduo库的一些笔记Cyaziyazi封装的json解析库、ini解析库、xml解析库、简单的基于TCP的多线程服务器–ZeroMQ––Abseil字符串操作: Abseil 提供了一套强大而灵活的字符串处理工具&#xf…

20240425-线程基础-线程的使用(一)

线程基础-线程的使用&#xff08;一&#xff09; 1.获取当前线程 package com.ysf;public class Tst01CurrentThread {public static void main(String[] args) {Thread thread Thread.currentThread();System.out.println(thread);} }2.设置线程名称 创建线程或线程池时&a…

React + three.js 3D模型骨骼绑定

系列文章目录 React 使用 three.js 加载 gltf 3D模型 | three.js 入门React three.js 3D模型骨骼绑定React three.js 3D模型面部表情控制React three.js 实现人脸动捕与3D模型表情同步结合 react-webcam、three.js 与 electron 实现桌面人脸动捕应用 项目代码(github)&…

Ubuntu离线安装g++、locales

Ubuntu离线安装g、locales 一、Ubuntu离线安装g二、ubuntu离线安装locales 一、Ubuntu离线安装g 要在Ubuntu上离线安装g&#xff0c;你需要在有网络连接的机器上下载g和它的依赖&#xff0c;然后将它们传输到离线的Ubuntu机器上进行安装。以下是步骤和示例命令&#xff1a; 在…

微信小程序连接蓝牙

准备工作&#xff1a; 1&#xff1a;需要一个蓝牙板子和串口软件&#xff08;卖蓝牙板子的商家会提供&#xff09;&#xff0c;手机上需要蓝牙调试助手&#xff08;为了测试蓝牙是否正常连接&#xff09; 2&#xff1a;蓝牙板通过usb插入到电脑端 3&#xff1a;安装好串口调试…

创新科技赋能旅游服务:智慧文旅引领旅游发展新篇章,智能体验助力产业转型升级

随着科技的飞速发展和人们生活水平的提高&#xff0c;旅游业正迎来前所未有的发展机遇。创新科技在旅游服务领域的广泛应用&#xff0c;不仅提升了旅游体验的品质&#xff0c;也为旅游产业的转型升级注入了新的动力。智慧文旅作为旅游业与信息技术深度融合的产物&#xff0c;正…

ArcGIS Pro实操宝典:地理空间数据处理全流程解析

GIS是利用电子计算机及其外部设备&#xff0c;采集、存储、分析和描述整个或部分地球表面与空间信息系统。简单地讲&#xff0c;它是在一定的地域内&#xff0c;将地理空间信息和 一些与该地域地理信息相关的属性信息结合起来&#xff0c;达到对地理和属性信息的综合管理。GIS的…

【数据结构】图基本概念

在计算机科学中&#xff0c;图&#xff08;Graph&#xff09;是一种非常重要的数据结构&#xff0c;用于描述各种复杂的关系和网络。本文将介绍图的基本概念&#xff0c;并通过C语言代码演示如何实现基本的图结构和相关操作。 图的基本概念&#xff1a; 图由节点&#xff08;…

paddlepaddle-gpu安装

背景 之前安装paddlepaddle-gpu遇到各种问题&#xff0c;安装不成功&#xff0c;之前使用了wsldocker的方式&#xff0c;可查看我之前博客&#xff1a;记录paddlepaddle-gpu安装&#xff0c;这要会导致我整个开发流程比较割裂 cuda版本 强烈推荐cuda11.8&#xff0c;paddlep…