IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> # 关于软件stm32cubeIDE下配置printf重定向无法输出问题-解决方式之一 -> 正文阅读

[嵌入式]# 关于软件stm32cubeIDE下配置printf重定向无法输出问题-解决方式之一

(1)前言

最近在使用STM32cubeIDE调试ADC+DMA测量引脚电压,想使用printf打印 一些信息,自己之前也使用过printf重定向,但是发现这次无论怎么尝试都无法使用了,后来直接HAL库下的串口直接输出,然后在问答看看能不能解决,就继续调试ADC去了,后来在查ADC的文章中,看到一种解决方法,测试过后,发现好用。叙述完了,直接看解决办法, 直接跳到那里就行.

(2)问题链接

具体的“问答”如下链接,将所遇到问题描述了下,不想跳转直接看我以下描述也行。
问答链接:https://ask.csdn.net/questions/7701670

(3)问题描述

在使用STM32cubeIDE调试STM32F103时,准备使用uart3串口打印信息,因为有打印需求,想使用printf重定向,之前使用的F4开发板,加入了重定向代码后,F4能够直接printf打印,所以将代码直接移植到F1上,发现无法打印,但是使用uart3串口HAL库函数能够打印,但是printf不行,如下截图为代码打印方式,对比printf和HAL。
在这里插入图片描述
以下为输出结果,可以看到只是输出”1234“,没有“hehe”,说明printf没有成功。
在这里插入图片描述

(4)我做过的努力与尝试

查找网上资料后,几乎只要搜索printf重定向相关问题,解决都是差不多,既然网上结果如此统一,说明这种方法是有效的,将两种方法写在下面,也算作解决方式之一,不过我这不知道什么原因确实没能成功,没有找到原因。
(1)重定向方式:简单说,加入如下代码,一同编译,然后就能使用printf了,这部分代码我之前在F4就调试过,直接放在下面了。

#include "stdio.h"
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
//STM32cubeIDE下
PUTCHAR_PROTOTYPE
{
    HAL_UART_Transmit(&huart3 , (uint8_t *)&ch, 1,0x200);
    return ch;
}

//keil下 //没在keil下尝试过 一直使用软件stm32cubeIDE没有取keil验证
//UART_HandleTypeDef huart1; //UART句柄
int fputc(int ch,FILE *f)
{
	HAL_UART_Transmit(&huart3,(uint8_t*)&ch,1,0xffff);
	return ch;
}

(2)方式二:勾选库,这种方法看起来更多是要解决输出浮点数的问题。
如下图,项目上右键,然后选择properties.
在这里插入图片描述
进入如下界面,有几个选项,基本都尝试过了,没有成功,但这个更多是解决float浮点型输出问题。
在这里插入图片描述

(5)后续与参照

后来,我想输出不一定非要printf,用hal库提供函数也行,不是刚需,就调试ADC去了,看文章过程中,有其他方式printf,尝试过后,成功了,也是有了这边文章。
参考链接:https://blog.csdn.net/weixin_45488643/article/details/108164547

(6)解决办法

如下所示,将关键代码提出来了,想要全部代码,可以看代码链接。
简单说:也是引入相应的库,然后链接,不过这次不是用的重定向,而是#define链接一起了。


//>>第一步:添加库
#include "string.h"
#include "stdint.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

/* USER CODE END Includes */
//>>第二步:定义数组
uint8_t u_buf[64];

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
//>>第三步:定义输出函数printf
#define printf(...)  HAL_UART_Transmit_DMA((UART_HandleTypeDef * )&huart3, (uint8_t *)u_buf,\
											sprintf((char *)u_buf,__VA_ARGS__));
/* USER CODE END PTD */

//>>第四步:打印输出
	  	  printf("abscdasdf");
		  HAL_Delay(1000);

(7)代码链接

测试使用的代码:https://download.csdn.net/download/qq_22146161/85232365

(8)后期验证

如下是串口打印结果。
在这里插入图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-04-29 12:18:17  更:2022-04-29 12:18:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 1:27:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码