STM32自定义printf功能方法
最近在朋友那学到了如何重定义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、调试
STM32自定义printf功能方法相关推荐
- VxWorks 7 RTP调用自定义IOCTL 功能方法
由于VxWorks7中无法调用用户自定义的功能,需要使用scMemVal 库 scIoctlGroupRegister( )注册ioctl功能组. 示例 #include <scMemVal.h ...
- 【教程】摆脱UART,仅用JLink也能实现printf功能!! /*更新scanf*/
Printf函数在单片机调试过程中可谓功不可没,开发人员可以很直观很方便的获取当前程序的运行状态.但在例如STM32这样的片子中,想要实现printf,就必须借助UART.有没有办法仅凭一个JLink ...
- 升级IOS8游戏上传自定义头像功能失效的问题
为了支持arm64,之前已经折腾了很久,昨晚打包准备提交苹果审核时,测试那边的同事反馈说游戏上传自定义头像功能不可用了. 游戏上传自定义功能的简介:卡牌游戏最初是<比武招亲>中有一个充VI ...
- 绝地求生自定义服务器租用,绝地求生自定义服务器怎么开 自定义服务器设置方法...
绝地求生自定义服务器怎么开呢?自定义服务器已经开启设置了,玩家们可以已自己的方式享受游戏,但一些玩家还不知道自定义服务器设置方法,那下面就来看下吧. 自定义服务器玩法介绍 当创建自己的自定义游戏时,你 ...
- python画简单的图形的代码-Python实现画图软件功能方法详解
概述 虽然Python的强项在人工智能,数据处理方面,但是对于日常简单的应用,Python也提供了非常友好的支持(如:Tkinter),本文主要一个简单的画图小软件,简述Python在GUI(图形用户 ...
- Javascript自定义事件功能与用法实例分析
原文地址:https://www.jb51.net/article/127776.htm 本文实例讲述了javascript自定义事件功能与用法.分享给大家供大家参考,具体如下: 概述 自定义事件很难 ...
- java自定义迭代器作用_Java实现的自定义迭代器功能示例
本文实例讲述了Java实现的自定义迭代器功能.分享给大家供大家参考,具体如下: 编写自己的Iterator,实现Iterator接口,这里多说一句,实现Iterable后,可以用"forea ...
- pccad自定义图框_(PCCAD自定义标题栏详细方法.doc
PCCAD2011自定义标题栏详细方法 下面以图3-1为例说明标题栏的自定义过程. 图3-1 1.新建文件(用New 命令). 2.用绘图和文字中的相关命令设计出图3-1所示的图形.其中在使用中不变的 ...
- 自定义控件添加属性_|AutoCAD LT 2019 Mac自定义功能区的方法
AutoCAD LT是一款非常好用的CAD三维设计绘图软件,最新版本2019拥有改进的桌面.新应用实现跨设备工作流,以及DWG比较等新功能,并且AutoCAD LT 2019 Mac可以根据你的需要和 ...
最新文章
- HDU1269(强连通分量)
- R语言可视化分面图、多变量分组多水平t检验、可视化多变量分组多水平分面条形图(faceting bar plot)并添加显著性水平、在标签和绘图上边框之间添加15%的空格、添加抖动数据点
- map获取数字与int比较
- (Python)时序预测的七种方法
- 实战深度强化学习DQN-理论和实践
- Python+OpenGL进行立方体多纹理映射
- halcon 差异模型 异物_基于HALCON的形状匹配算法的研究和心得总结
- 实现房源15天后自动下架记录
- 详解两个栈实现一个队列(python实现——经典面试题)
- 自动对焦模式与af区域模式_什么是自动对焦,不同模式意味着什么?
- 利用Jquery实现动态增加、修改html元素
- 使用jQuery实现轮播图
- Open OnDemand部署安装使用手册
- elastix2.5vtigercrm5.2.1来电弹屏和点击呼叫的配置
- python常数_SciPy所有常数解释
- 如何提升程序员的非技术才能
- Training: PHP LFI (Exploit, PHP, Training)
- Java中apple导入那个包_在Java中,由Java编泽器自动导入而无需在程序中用import导入的包是()。A.java.appletB.java.awtC.j...
- 使用USB 3G上网卡+树莓派搭建接受短信自动转发邮箱的服务
- android相册隐藏拍照按钮,你绝对不知道的4大手机“隐藏”拍照功能!学会100%惊艳朋友圈!...