STM32自定义printf功能方法

2023-11-12

最近在朋友那学到了如何重定义STM32的printf类似函数,在这做下记录:

调用C语言库函数文件具体是哪一个我忘记了,都加上吧  ^_^ 

#include <stdio.h>                        //uart redirect fputc
#include <string.h>                        //copy function
#include <stdarg.h>                        //va_start /vsnprintf /va_end function
 

1、功能函数:


#define DEBUG_UART		&huart2		//串口调试口


/******************************************************************************************
*** 函数名称: Debug_Printf
*** 输入参数: 无
*** 返 回 值: 无
*** 说    明:自定义串口 printf功能
*** 功能说明:
***	编者										时间 							    版本
***	XX										2020/12/8								V0.1
******************************************************************************************/ 
void Debug_Printf(UART_HandleTypeDef *huart, char *format, ...)
{
	uint8_t uart_buff[256];
	uint8_t *pStr = uart_buff;	
	uint16_t delay_max;	
	va_list ap;
	
	va_start(ap, format);	                					//初始化 ap 变量
	vsnprintf((char *)pStr, sizeof(uart_buff), format, ap);		//可变参数。用于向字符串中打印数据、数据格式用户自定义
	va_end(ap);													//允许使用了 va_start 宏的带有可变参数的函数返回
	
	while((*pStr) != '\0')
	{
		delay_max =0;
		HAL_UART_Transmit(huart, (uint8_t *)pStr, 1, 0xFFFF);	
		while(__HAL_UART_GET_FLAG(huart,UART_FLAG_TC) != SET)			//等待发送完成
		{
			if(delay_max >0xFFF) break;
			delay_max++;
		}
		pStr++;					                                            //address data add
	}	
}

2、功能测试:

void test(void)
{

	uint8_t test_value[5];
	float test_float;
	
	test_value[0] = 'A';
	test_value[1] = 'b';
	test_value[2] = 88;
	test_float = 66.66;
	
	Debug_Printf(DEBUG_UART, "test  string		 \r\n");
	Debug_Printf(DEBUG_UART, "test   char: %c  \r\n",	test_value[0]);
	Debug_Printf(DEBUG_UART, "test   char: %c  \r\n",	test_value[1]);
	Debug_Printf(DEBUG_UART, "test    int: %d \r\n",	test_value[2]);
	Debug_Printf(DEBUG_UART, "test  float: %.2f \r\n",	test_float);

}

3、调试

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32自定义printf功能方法 的相关文章

  • 更改/去除 a链接默认样式

    比较常见的一个需求 但是点击a链接的时候又不想让它变色 下面的代码就可以解决 a text decoration none important color C00017 important

随机推荐

  • 小白也能操作的“电脑恢复出厂设置”,windows8/10通用型

    出厂设置恢复到出厂时的默认状态 删除所有的文件和软件 在手机上很多朋友都会设置出厂设置 那么你们知道电脑如何恢复出厂设置吗 今天 我给大家带来了电脑恢复出厂设置的两种方法 一起来了解一下吧 电脑是我们当今社会发展的必备利器 各行各业都不开电
  • Markdown数学语法

    Markdown数学语法 文章目录 Markdown数学语法 1 基本格式 1 1 行内公式 1 2 块级公式 行间公式 1 3 角标 1 4 整体内容 1 5 多行公式 equation CSDN不支持 align CSDN不支持 支持a
  • 24点

    刚学c 的我是怎么解决判断24点问题的 本人大一狗 高中因为高考 浙江选考 学过vb 开学两周后 教c的老师突然在一节课教完if for switch语句 然后出了个挑战题 如何随意输入四个数判断能否用 计算出24点 有人写了几十行的if语
  • Java基础中的IO流

    一 IO流 IO 上传下载 写入写出 流 一连串流动的数据 以先入先出的方式进行流动 管道 以程序为中心 程序与网络 文件 服务器 数组 1 分类 1 按照流向 输入流 输出流 2 操作单元分 字节流 万能流 任何内容都可以转为字节 可以传
  • RabbitMQ两种集群模式配置管理

    一 RabbitMQ集群的两种模式 1 普通模式 默认的集群模式 2 镜像模式 把需要的队列做成镜像队列 存在于多个节点 属于RabbitMQ的HA方案 普通模式 默认的集群模式 RabbitMQ集群中节点包括内存节点 磁盘节点 内存节点就
  • 升级openssl后nginx无法编译安装问题之解决方法

    Linux下升级openssl到新版本 如CentOS 7中openssl升级到openssl 1 1 1d 后 其实原nginx并没有真正调用新的openssl 1 1 1d 怎么办呢 需对nginx重新编译 但在编译安装过程中有人就无法
  • 利用Console来调试JS程序、Console用法总结

    利用Console来调试JS程序 Console用法总结 1 一 什么是 Console Console 是用于显示 JS和 DOM 对象信息的单独窗口 并且向 JS 中注入1个 console 对象 使用该对象 可以输出信息到 Conso
  • 零基础小白-自学java全栈开发-学习路线-只要看这一篇就可以了(完整版)

    文章目录导航 小白自述 具体内容以及详细流程 开发工具的使用 总结一下 什么是java 第一个java程序分析 基础知识 运算符操作 控制语句 数组类型 方法定义和使用 Eclipse工具的使用 类与对象 常用类 集合类 内部类 异常处理
  • pikachu靶场RCE的学习

    RCE remote command code execute RCE的概述 RCE漏洞 可以让攻击者直接向后台服务器远程注入操作系统命令或者代码 从而控制后台系统 RCE的分类 ping Ping Packet Internet Grop
  • AI智慧,书香飘溢

    如果有天堂 天堂应该是图书馆的模样 阿根廷国家图书馆前馆长 著名作家博尔赫斯如此形容图书馆 人类文明的演进与传承 倚仗于知识的积累 而知识的载体往往绕不开书籍 其集散地 图书馆 更是在这一过程扮演着极为重要的角色 早在公元前3000年 亚述
  • 75.android 简单的获取当前可用运行内存,总运行内存,获取包含系统软件在内的所有内存,获取系统参数显示的内存大小。

    1 获取手机系统参数显示的内存大小 RAM内存大小 返回1GB 2GB 3GB 4GB 8G 16G return public static String getTotalRam String path proc meminfo Stri
  • cryptographic primitives(密码学原语 )

    hash commitment Pedersen承诺
  • 返回json带转义符时的处理方法Content-Type: text/plain;

    当从json文件中读取json数据返回前端时 Content Type不同会导致返回给前端的数据结构也不同 Content Type text plain charset UTF 8 text plain的意思是将文件设置为纯文本的形式 浏
  • SQL删除重复数据只保留一条

    用SQL语句 删除掉重复项只保留一条 在几千条记录里 存在着些相同的记录 如何能用SQL语句 删除掉重复的呢1 查找表中多余的重复记录 重复记录是根据单个字段 peopleId 来判断 select from people where pe
  • vue 孙组件给父组件传值

    1 在孙组件里定义事件 通过 emit把值传出去 孙组件 planPop vue
  • unity键盘按键版垃圾分类

    有个键盘控制版的垃圾分类 打开程序后按任意键进行游戏 共分为可回收垃圾 厨余垃圾 有害垃圾 其他垃圾 游戏时间一共60s 按1 2 3 4分别会使垃圾到对应的垃圾桶 放对垃圾就会打开垃圾桶 放错垃圾桶会有放错提示 60s后会计算成绩 按任意
  • JS逆向新技术--JSRPC

    声明 本文章中所有内容仅供学习交流 不可用于任何商业用途和非法用途 否则后果自负 如有侵权 请联系作者立即删除 由于本人水平有限 如有理解或者描述不准确的地方 还望各位大佬指教 介绍 JSRPC意思就是远程调用js代码 全称 Remote
  • java树形数据结构递归求上级,附答案

    Part 1微服务架构设计概述 1 1 传统应用架构的问题 1 2 微服务架构是什么 1 3 微服务架构有哪些特点和挑战 1 4 如何搭建微服务架构 Part 2微服务开发框架 2 1 Spring Boot 是什么 2 2 如何使用Spr
  • sql注入利用union来绕过括号过滤

    union盲注 当我们在括号被过滤的时候 就不能使用substr mid 等多种函数 于是想到union 要想知道uinon的怎么进行盲注 就要了解union 这里给大家看几个mysql的查询语句 通过这三条语句我们可以看到 我们我利用un
  • STM32自定义printf功能方法

    最近在朋友那学到了如何重定义STM32的printf类似函数 在这做下记录 调用C语言库函数文件具体是哪一个我忘记了 都加上吧 include