stm32 ->HAL库重定向printf,实现串口打印

news2024/12/25 9:20:57

步骤

  • 在CubeMX中初始化uart引脚
MX_USART1_UART_Init();
  • 包含printf函数的头文件stdio.h

  • 重定义printf函数

int fputc(int ch, FILE *f)
{
	HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff); 
  return ch;
}
  • 勾选Use MicroLIB

在这里插入图片描述

  • 编译烧录

实现代码

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */

/* Private variables ---------------------------------------------------------*/
UART_HandleTypeDef huart1;

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
int fputc(int ch, FILE *f)
{
	HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff); 
  return ch;
}
/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
  GPIO_PinState pinState = NULL;
 
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_1);
    pinState = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);
    
    if(pinState == GPIO_PIN_SET) {
        printf("PA1 is high\n");
    } else {
        printf("PA1 is low\n");
    }
    
    HAL_Delay(1000); 

  }
  /* USER CODE END 3 */
}

测试

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/744340.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

redis实现相关分布式锁

为什么需要分布式锁 我们知道,当多个线程并发操作某个对象时,可以通过synchronized来保证同一时刻只能有一个线程获取到对象锁进而处理synchronized关键字修饰的代码块或方法。既然已经有了synchronized锁,为什么这里又要引入分布式锁呢&…

vue打包、网站运行速度优化

最近在做公司的官网,遇到的首要问题就是初次进入网站时,加载很慢,首页的视频和字体甚至需要30秒才能完全展示出来,用户体验可以说时很差了。接下来说几个优化的点。 一、减小图片的体积 如果项目中的图片过于多,并且体…

Set up the compilation environment for ESP8266-RTOS-SDK using Git on Windows

Software to be installed: Git BashPython Environment,ESP8266 Master require Python v3 environment. Please check “add to PATH” while installing Open Git Bash,Enter a local disk,create an empty folder, enter the …

【雕爷学编程】Arduino动手做(159)---RCWL-0515微波检测模块

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

十大经典排序算法(代码实现),建议收藏

兜兜转转,一晃年关将至。时间证明了一个道理,学啥忘啥,学的越快忘得越快,还不如踏踏实实写点笔记心得来的实在。 编程初学期间,排序算法是让人抓头最多的一块。为什么我连最简单的冒泡排序都理解不了,我是…

webpack基础知识

webpack基础知识 1、定义2、环境安装3、初始化项目4、简单使用 1、定义 webpack的本质是一个第三方模块包,用于分析,并打包代码 支持所有类型的文件打包支持less/sass> css支持ES6/7/8>ES5压缩代码,提高加载速度 2、环境安装 yarn安…

Java并发编程中的HashMap、HashTable、ConcurrentHashMap

1、HashMap 1.1、为什么HashMap非线程安全的 (1)竞态条件 当多个线程同时对 HashMap 进行写操作(如插入、删除、修改),由于没有同步控制,可能会导致数据不一致的情况。例如,两个线程同时向同…

LLM 生成视频 - pika

文章目录 关于 pika申请试用2023-07-12 关于 pika A powerful Text-to-Video platform that can unleash your creativity simply by typing. 官网: https://www.pika.art/官方 twitter : https://twitter.com/pika_labs相关功能介绍 相关报道/博客: 图片生成视频 from : h…

如何给视频配音?这几种配音方法一看就会

怎么给视频进行配音呢?如果原始视频的录音质量较差,存在噪音、回音或杂音等问题,配音可以用来替换原始音频,以提高声音质量和清晰度,或者是我们想要给视频配上一段搞笑的方言配音,怎么怎么做呢?…

超级自动化的3年:财务、IT等通用场景占比高达65%,垂直领域玩家开始晋级

从信息化时代走向数字化时代,企业的最终目标即利用先进的数字技术完成数字化转型升级,而这绝不是将业务、流程、数据、表单等搬到线上就“完事⼉”。 在此背景下,Gartner于2019年提出“超级自动化”,之后全球范围内越来越多的企业…

【C++】-关于vector的两个习题(二维数组和多路递归)

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你…

论文浅尝 | 少样本学习的语言模型的持续训练

笔记整理:王贵涛,东南大学硕士,研究方向为自然语言处理 链接:https://github.com/UIC-Liu-Lab/CPT 一、动机 克服灾难性遗忘(CF)是持续学习(CL)的一个主要目标。目前有许多方法&…

施密特(Gram-Schmidt)正交化

引自于点击打开 如果没有空间向量解析几何基础,理解起来有些困难,因此稍微解说一下。 两个向量的正交变换我们分为3步: (a1,a1)/ (|a1| * |a2|)是a1,a2之间的夹角的cos值cos值乘以|a2|后,得到a2在a1上映射的长度值&…

从浏览器进程角度分析从输入URL到页面显示发生了什么?

一、处理用户在浏览器地址栏中输入的URL(统一资源定位符) 用户在地址栏输入内容并按下回车,浏览器会检查输入是否符合 URL 规则,以Chrome为例,它会根据相应的规则,将地址栏输入解析成搜索请求或者URI请求。…

YOLOv8实战垃圾分类目标检测 (视频课程)

课程链接:https://edu.csdn.net/course/detail/38804 垃圾分类是一项利国利民的民生工程,需要全社会的共同参与。 YOLOv8是前沿的目标检测技术,它基于先前 YOLO 版本在目标检测任务上的成功,进一步提升性能和灵活性。 本课程将手…

已解决 BrokenPipeError: [Errno 32] Broken pipe

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

第三次CCF计算机软件能力认证

第一题:门禁系统 涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况。 每位读者有一个编号,每条记录用读者的编号来表示。 给出读者的来访记录,请问每一条记录中的读者是第几次出现。 输入格式 输入的第一行包含一个整…

《前端开发 实践之 腾讯地图API 学习》

目录 腾讯地图基础入门方式一方式二 事件监听监听地图瓦片加载完成事件 移除缩放控件 & 旋转控件 & 比例尺控件初始化marker图层创建信息窗点击地图拾取坐标打点标记反解析成详细地址根据输入详细地址 反解析成经纬度 腾讯地图 腾讯地图API学习-官方地址:ht…

浅谈Web前端开发软件包管理器—Bower的基本使用

前言 Bower 是一个客户端的软件包管理器,它可用于搜索、安装和卸载如 JavaScript、HTML、CSS 之类的网络资源,Bower 是 Web 开发中的一个前端文件包管理器,类似于 Node 模块的 npm 包管理器,bower 依赖于 Git、Node 和 npm。 安…

HarmonyOS课程尝鲜计划,优享特权大礼包

报名入口:https://developer.huawei.com/consumer/cn/activity/901689042385499023