STM32CubeMX之串口重定向(printf 的使用)

发布者:JoyfulExplorer最新更新时间:2021-06-16 来源: eefocus关键字:STM32CubeMX  串口重定向  printf 手机看文章 扫描二维码
随时随地手机看文章

一. 改写函数

新建一个头文件 debug_com.h


#ifndef __DEBUG_COM_H

#define __DEBUG_COM_H


#ifdef __cplusplus

extern "C" {

#endif

    

#include "stdio.h"

#include "usart.h"

    

#ifdef __GNUC__

#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)

#else

#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

#endif /* __GNUC__ */

PUTCHAR_PROTOTYPE

{

        

        HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);

        return ch;

}


#ifdef __cplusplus

}

#endif



#endif


在使用 printf 的时候,其实最终也是调用 fputc 函数进行打印,因此我们可以通过添加以下代码来达成我们的目的:


HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);


注意: huart1 可以根据你使用的串口进行修改


之后将该头文件放到一个文件夹(比如 debug_com )里面,再放到项目目录下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TvwPSwrC-1593615485391)(/image/项目目录.png)]

再包含该头文件,如下图所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gW0Mnioh-1593615485394)(/image/包含debug_com头文件.png)]

之后在项目中使用 #include "debug_com.h" 就可以使用 printf 了


二. printf 使用实例

打印串口1中所用到的寄存器的首地址


//包含头文件

#include "debug_com.h"


//主函数中添加

  while (1)

  {

    /* USER CODE END WHILE */

 

    /* USER CODE BEGIN 3 */

       printf("huart1.Instance->SR %prn",&huart1.Instance->SR); 

       printf("huart1.Instance->DR  %prn",&huart1.Instance->DR); 

       printf("huart1.Instance->BRR %prn",&huart1.Instance->BRR); 

       printf("huart1.Instance->CR1 %prn",&huart1.Instance->CR1);  

       printf("huart1.Instance->CR2 %prn",&huart1.Instance->CR2); 

       printf("huart1.Instance->CR3 %prn",&huart1.Instance->CR3); 

       printf("huart1.Instance->CTPR %prn",&huart1.Instance->GTPR); 

       HAL_Delay(1000);     

       printf("rn");

  }


这样,我们就可以在调试助手上看到寄存器的地址值了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7q73Mn0r-1593615485396)(/image/调试助手中寄存器地址.png)]

关键字:STM32CubeMX  串口重定向  printf 引用地址:STM32CubeMX之串口重定向(printf 的使用)

上一篇:STM32CubeMX之串口使用(中断方式)
下一篇:STM32CubeMx之资源(线程,队列,内存池)管理

推荐阅读最新更新时间:2024-11-07 10:36

关于STM32CubeMx printf重定向,及报错。"FILE" is undefined
/* USER CODE BEGIN PFP */ #ifdef __GNUC__ /* With GCC, small printf (option LD Linker- Libraries- Small printf set to 'Yes') calls __io_putchar() */ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif /* __GNUC__ */ /* USER CODE END PFP */
[单片机]
玩转STM32CubeMX | 红外遥控
1.红外遥控简介 红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易实现等显著优点,被诸多电子设备特别是家用电器广泛采用,并越来越多的应用到计算机系统中。 由于红外线遥控不具有像无线电遥控那样穿过障碍物去控制被控对象的能力,所以,在设计红外线遥控器时,不必要像无线电遥控器那样,每套(发射器和接收器)要有不同的遥控频率或编码(否则,就会隔墙控制或干扰邻居的家用电器),所以同类产品的红外线遥控器,可以有相同的遥控频率或编码,而不会出现遥控信号“串门”的情况。这对于大批量生产以及在家用电器上普及红外线遥控提供了极大的方面。由于红外线为不可见光,因此对环境影响很小,再由红外光波动波长远小于无线电波的波
[单片机]
玩转<font color='red'>STM32CubeMX</font> | 红外遥控
stm32cubemx(HAL库)函数积累
HAL_GPIO_TogglePin(GPIOF,GPIO_PIN_8); //取反 HAL_GPIO_WritePin(GPIOF,GPIO_PIN_8,GPIO_PIN_SET); //输出 HAL_GPIO_ReadPin(F8_GPIO_Port,F8_Pin); //读取引脚状态 HAL_UART_Transmit(&huart1,(uint8_t *)&send_data,sizeof(send_data),0x1000);发送串口数据
[单片机]
STM32之串口通信之printf重定向
当我们在学习一款CPU时,最经典的实验莫过于流水灯了,掌握流水灯的话就基本等于学会操作I/O口了,那么在学会I/O之后,相对于我们来说会把学习串口的操作放在第二位。在程序运行的时候我们可以点亮一个LED来显示代码的执行状态,但有时候我们还想把某些中间量后者其他程序状态信息打印出来显示在计算机上,那么这时候串口的作用就可显而知了。 下面我们来看一下什么是串口 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口 (Serial Interface) 是指数据一位一位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降
[单片机]
MDK中STM32无法用printf()的问题
在用MDK调试STM32板子串口时,为了方便串口调试,调用了printf()函数,但是把.hex文件烧写进板子后却发现串口接收不到任何数据。用Keil仿真是,串口可以正确的输出。有点纳闷,然后调用USART_SendData()函数,发现串口可以接收到正确的数据,证明串口配置没有问题,问题应该是出在printf()函数上,参照ST公司的printf例子也不能在串口输出数据。由此可知应该是软件配置的原因。后面,百度,再AVR论坛上找到了答案。 如果使用的是MDK,请在工程属性的 Target -》 Code Generation 中勾选 Use MicroLIB 进行如上设置后编译一下,串口输出正确的数据。 #ifndef
[单片机]
STM32CubeMX】2,STM32CubeMX常用的自动生成函数
1,在#include stm32f1xx_hal.h 的头文件中, 常用 void HAL_Delay(uint32_t Delay); 2,GPIO.H void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init); void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin); GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); void HAL_GPIO_WriteP
[单片机]
【<font color='red'>STM32CubeMX</font>】2,<font color='red'>STM32CubeMX</font>常用的自动生成函数
单片机中printf的使用
1. 如c语言同:printf( );在控制台就会输出 中的内容; 2. 通过串口输出:只需要在初始化串口后,直接使用printf( )即可通过串口输出 中的内容(参考keil的安装文件夹里有个 EXAMPLE 目录,里面 HELLO 的例子)。 主要是单片机C对标准C进行了一些扩充、删减和更改优化,因为keil里的单片机c把printf函数重定义到串口了,这也是单片机c语言和标准c语言的区别。
[单片机]
单片机中<font color='red'>printf</font>的使用
基于STM32Cubemx HAL 库实现 DMA 驱动 GPIO 高速翻转
说明:本文主要内容是从简单介绍有关STM32的DMAMUX模块-电子发烧友网 (elecfans.com)这篇文章摘录。我是小白,在索引HAL DMA GPIO 翻转时,没有找到本文,而在所有DMAMUX才索引到此文。为了方便后续小白能够及时找到此文。我重新做了编译。并做了相关程序的验证。对相关数据做了说明。感谢本文应用的3片文章的作者! 目前STM32家族中的很多系列,比如STM32G0/STM32G4/STM32L4+/STM32H7等都内置了DMAMUX模块。有了它一方面使得DMA请求与DMA控制器之间的映射关系更为灵活方便,另一方面也大大拓展了DMA请求事件,不再局限于外设事件,比方基于GPIO的外部中断事件、或者DM
[单片机]
基于<font color='red'>STM32Cubemx</font> HAL 库实现 DMA 驱动 GPIO 高速翻转
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved