STM32+HAL库调试printf串口打印

这篇具有很好参考价值的文章主要介绍了STM32+HAL库调试printf串口打印。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1 新建cubemx工程 

2 配置系统时钟

3 配置串口引脚

4 生成keil工程

5 补充代码

5.1 重定向printf

5.2 main函数

6 编译烧录

7 实验现象


1 新建cubemx工程 

        选择对应芯片

stm32 hal printf,# STM32实验记录,stm32,单片机,arm


2 配置系统时钟

        主频为64MHz

stm32 hal printf,# STM32实验记录,stm32,单片机,arm

        对应给到usart2的时钟也为64MHz 

 stm32 hal printf,# STM32实验记录,stm32,单片机,arm


3 配置串口引脚

        查阅原理图,可知usart2引脚连接了USB串口

stm32 hal printf,# STM32实验记录,stm32,单片机,arm


4 生成keil工程

stm32 hal printf,# STM32实验记录,stm32,单片机,arm

stm32 hal printf,# STM32实验记录,stm32,单片机,arm


5 补充代码

5.1 重定向printf

        首先介绍一下printf和scanf:

        printf 函数根据 format 字符串给出的格式打印输出到 stdout(标准输出)中,当然,printf 函数是不会一个字符一个字符去输出,它会调用更底层的 I/O 函数:fputc去逐个字符打印。

printf 和fputc都定义在 <stdio.h> 头文件中:

//fputc函数原型
int fputc(int ch, FILE *stream);

//printf函数原型
int printf(const char *format, ...);

        fputc 函数写入字符 ch 到给定输出流 stream,printf函数在调用该函数时,会向stream参数传入stdout从而打印数据到标准输出。 

        那么,要实现printf打印到串口就变得非常简单了,只需要重新定义fputc函数,在fputc的函数中将数据通过串口发送,称之为:fputc重定向或者printf重定向。同理,只需要重新定义fgetc函数,在scanf的函数中将数据通过串口接收,称之为:scanf重定向。

        在usart.c文件中添加重定向函数(且记得在usart.h中添加头文件和声明):

#include "stdio.h"

//重定向scanf
int fgetc(FILE *f)
{
  uint8_t ch=0;
  HAL_UART_Receive(&huart2,&ch,1,0xffff);
  return ch;
}

//重定向printf
int fputc(int ch,FILE *f)
{
  uint8_t temp[1]={ch};
  HAL_UART_Transmit(&huart2,temp,1,2);
  return ch;
}

5.2 main函数

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_USART2_UART_Init();
  /* USER CODE BEGIN 2 */
	uint16_t num = 0;
	char c;
	
	printf("code is ok!\n");
	printf("please input start!\n");
	scanf("%c\n",&c);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {	
		printf("%d\n",num++);
		HAL_Delay(500);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

6 编译烧录

        编译烧录之前,需在魔术棒按钮中勾选Use MicroLib,不勾选将无法执行printf

        MicroLib是对标准C库进行了高度优化之后的库,供MDK默认使用,相比之下,MicroLIB的代码更少,资源占用更少,在MDK编译环境下可以使用其MicroLib,快速实现printf重定向;

stm32 hal printf,# STM32实验记录,stm32,单片机,arm

7 实验现象

       根据提示输入start后,每0.5s打印一次数字:

stm32 hal printf,# STM32实验记录,stm32,单片机,arm文章来源地址https://www.toymoban.com/news/detail-708639.html

到了这里,关于STM32+HAL库调试printf串口打印的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32系列(HAL库) ——使用串口打印的3种方式

    1、硬件: STM32C8T6最小系统板 USB-TTL串口模块 ST-Link下载器 2、软件: keil5-IDE cubeMX 1、配置RCC——选择外部时钟源 2、配置SYS—— Serial Wire模式   3、时钟树拉满72M          ......  4、配置串口1      5.创建工程         ...... 1.方式一:使用微库(Use MicroLIB) ①:需要在 u

    2024年01月25日
    浏览(41)
  • STM32(HAL库)驱动SHT30温湿度传感器通过串口进行打印

    目录 1、简介 2、CubeMX初始化配置 2.1 基础配置 2.1.1 SYS配置  2.1.2 RCC配置 2.2 软件IIC引脚配置 2.3 串口外设配置  2.4 项目生成  3、KEIL端程序整合 3.1 串口重映射 3.2 SHT30驱动添加 3.3 主函数代 3.4 效果展示 本文通过STM32F103C8T6单片机通过HAL库方式对SHT30传感器进行数据的读取,并

    2024年02月16日
    浏览(40)
  • STM32开发中printf利用重定向方法输出到串口(CubeMX 基于HAL库方法,带实际项目应用技巧 巧用goto语句)

    在stdio.h中的printf 原本输出到控制台, 在单片机应用中一般将其改到串口, 并利用串口输出信息来调试程序,非常方便。(本文以USART1为例) 此外CubeMX及CubeIDE 由于自动生成基础代码,因此每当更改硬件配置的时候, 都会被重置生成的基础代码。 这里使用goto语句来避免部分

    2024年02月04日
    浏览(80)
  • STM32系列(HAL库)——F103C8T6获取DHT11温湿度串口打印

    在此特别鸣谢原文博主! (1)编程平台:Keil5 (2)CubeMX (3)XCOM(串口调试助手) (1)F1的板子,本例使用经典F103C8T6  (2)DHT11——温湿度传感器 (3)ST-link 下载器 (4)USB-TTL模块 (5)杜邦线若干 (1)芯片选择 STM32F103C8T6  (2)配置RCC、SYS、时钟树 配置RCC 配置SYS 配置时钟树 (3) 配置GPIO  (4)配置

    2023年04月08日
    浏览(50)
  • 【STM32学习5】STM32使用printf函数 打印到电脑串口助手

    本文所使用的方法与代码参考自正点原子,如果想要详细了解这方面的知识,请阅读正点原子官方提供的文档。 在开发STM32应用时,将一些信息通过串口打印到电脑上是常用的调试手段。C语言标准库中的printf函数是我们常用的打印函数。但是在STM32应用下一般无法直接使用这

    2024年02月02日
    浏览(45)
  • 关于STM32 hal printf重定向 “FILE“ is undefined

    关于STM32 hal printf重定向,及报错。“FILE” is undefined 增加以下内容:

    2024年02月13日
    浏览(42)
  • STM32-HAL库-printf函数重定向(简单易懂亲测有效)

    由于STM32cubemx生成的HAL库代码没有printf,为了让这个函数能实现打印功能,我们必须要把这个函数重定向,让它重定向到串口中,把要输出的内容打印到串口中。 配置好时钟后,选择你的串口,生成代码。 进入到STM32xxxhal.c中,加入如下两条语句,你的huart是数字几,后面就修

    2024年02月05日
    浏览(43)
  • stm32 串口调试配置及printf重定向

    stm32使用串口调试打印时,需要对串口进行配置并对printf进行重定向,本文介绍如何配置串口以及printf重定向。 示例: 1、配置选项选中要配置的usart 2、模式选择异步模式,硬件流控制disable 3、配置串口参数 生成代码后可以在工程中usart.c中查看到串口相关代码 在工程配置中

    2024年02月11日
    浏览(56)
  • STM32使用printf重定向到USART(串口)并打印数据到串口助手

    我们知道我们在进行编程的时候,遇到问题,经常通过打印信息进行调试,在java中使用的是System.out.println打印到输出窗口。在C语言中使用的是printf打印到输出窗口。而我们用keil进行编程的时候也是使用的C语言所以也可以使用printf,但是我们知道,keil中没有输出窗口。那我

    2024年02月15日
    浏览(41)
  • STM32(HAL)串口中断接收

    目录 1、简介 2 基础配置 2.1.1 SYS配置  2.1.2 RCC配置 2.2 串口外设配置  2.3 项目生成  3、KEIL端程序整合 本文对HAL串口中断函数进行介绍。 2.1.1 SYS配置  2.1.2 RCC配置 首先在main.c文件中进行接受变量声明。  接着在主函数的while循环中进行接收中断,如下所示:  最后在主函数

    2024年02月14日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包