stm32 串口输出_单片机串口打印printf

stm32 串口输出_单片机串口打印printfSTM32单片机极简方法 使用宏定义 代替复杂的重定向printf()函数,实现串口打印。(HAL库例程)对于 printf() 函数我们并不陌生,初学C语言使用的第一个函数,其作用是在终端打印显示格式化字符串。但是如果我们使用的是单片机运行C语言代码,如果不经任何修

STM32单片机极简方法 使用宏定义 代替复杂的重定向printf()函数,实现串口打印。(HAL库例程)   对于 printf() 函数我们并不陌生,初学C语言使用的第一个函数,其作用是在终端打印显示格式化字符串。   但是如果我们使用的是单片机运行C语言代码,如果不经任何修改直接使用 printf() 函数,结果是什么现象都没有。要想使用这个函数,常规方法是重定向 printf() 函数,结合串口来打印到串口助手上位机。这里的重定向就非常复杂了,你需要懂 printf() 函数内部实现机制。。。。。(参考正点原子的例程,本人表示看不懂太多太复杂了)   接下来我介绍一种特别简单的方法,让你不需要重定向 printf() 函数也可以实现相似的功能,就是那种%d,%f,%c。。。各种格式控制符的功能,我们想用这个函数大半原因就是为了这些功能。只要在合适的地方添加以下语句即可:代码语言:javascript复制   以上代码表示用 ps() 这个宏函数代替HAL库的串口发送函数,并且可以使用格式控制符%c,%d,%f, ,   等可变参数控制符。   ps()宏函数使用方法如下:代码语言:javascript复制   串口助手打印情况:
stm32 串口输出_单片机串口打印printf*如果上面看不懂我再解释一下原理:   核心内容:变参宏 “__VA_ARGS__” 与 “…”   1.首先三个点 “…” 在C语言中代表“参数个数可变的参数”,我们可以看一下printf()函数的原型:代码语言:javascript复制   由上述代码可以知道,”fomat”表示只读类型的字符串,而三个点 “…” 表示个数未确定的参数,可以没有参数,也可以有多个。   2.__VA_ARGS__是三个点”…”的宏定义形式。也就是说宏定义中的__VA_ARGS__会被替换成”…”代码语言:javascript复制   以上六种都可以用 ps() 代替 printf() 函数,功能以及用法一模一样。C标准不一样的时候可能会有差别,总之编译出错时在以上6种之中更换即可。我只用第1、2、5这三种方法。   3.其实在单片机之中如果不重定向 printf() 函数。我们只要使用 sprintf() 函数即可:代码语言:javascript复制   sprintf() 只是比 printf() 多一个参数,即第一个字符数组,他们两功能也相似,只是有以下区别:   sprintf()———-》把内容转成字符串,并输出到一个字符数组中,返回字符串的字符个数;   printf()————》把内容转成字符串,并输出到显示终端,返回字符串的字符个数;   我们可以利用sprintf()的特点把要显示的内容转换成字符串,存到一个预先定义好的字符数组中,然后再用HAL库串口发送函数,把该字符数组内的信息发出去,发送的个数就是sprintf()的返回值:代码语言:javascript复制

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/79826.html

(0)
上一篇 2024年 8月 2日
下一篇 2024年 8月 2日

相关推荐

关注微信