STMCU小助手
发布时间:2021-12-18 17:43
|
printf重定向介绍 在学C语言的时候,会经常用标准库<stdio.h>中printf(), scanf()这两个函数, 来实现数据的输入与输出. 格式化输入输出的功能还是挺强大的, 那已经有了现成的轮子, 就要寻思一下如何进一步在单片机上使用它. 下面是ARM Compiler6文档中对printf的介绍: . r' u( Y! y* T* `; M The printf family consists of _printf(), printf(), _fprintf(), fprintf(), vprintf(), and vfprintf().0 X2 d* F* ^( |1 u& U- [ All these functions use __FILE opaquely and depend only on the functions fputc() and ferror(). The functions _printf() and _fprintf() are identical to printf() and fprintf() except that they cannot format floating-point values.* G( G: [: _4 R The standard output functions of the form _printf(…) are equivalent to: fprintf(& __stdout, …)where __stdout has type __FILE.' s8 V7 D: ^& ~8 P+ {# y" r0 \ - y! S1 w0 Y+ E 大致是说printf家族有这么些函数<_printf(), printf(), _fprintf(), fprintf(), vprintf(), and vfprintf()>, 这些函数都隐式的使用__FILE<文件流>, 并且只依靠fputc(), ferror()这两个函数.8 z4 z: A3 @/ _8 L 1 u& q; {/ ~2 u) e% E* J If you define your own version of __FILE, your own fputc() and ferror() functions, and the __stdout object, you can use all of the printf() family, fwrite(), fputs(), puts() and the C++ object std::cout unchanged from the library.' I: u7 `8 g+ K% W" T) d 重新定义__FILE, fputc(), ferror(), __stdout, 就可以使用printf()家族的各种函数了.6 Z/ Z) ^/ C+ o" z' e 3 X* G, {( X9 n: n4 l5 ` STM32中printf重定向8 s, b6 D5 M' Z% X/ x, g+ r2 z 下面是官方给出的重映射模板: <遇到不会的先看看文档往往能得到最直接的答案> % J" y% q7 }6 I" E9 M0 B+ j
要将printf()重定向到STM32中的串口, 只需要重新实现 fputc() 函数即可, 在fputc()中通过串口发送一个char. 在上一次的工程上进行修改, 将printf()重定向到串口3.$ g2 a6 q: }2 g ' B# H/ w5 M) D* X8 d
写个简单的程序试一试:. E/ U, X/ ]$ ~6 |. p N1 | . r k+ P* v/ O( p
输出结果:
可以开始愉快的使用printf()了.; h& F" }% a# m: W& a 8 S. y0 L, ^. E9 I9 r6 U6 e + Y) N: g( L1 F- B+ \ |
【 逢7发帖赢大礼】1、利用CubeMX生成正点原子H7R7开发板的STM32CubeIDE工程
【STM32H735G-DK测评】ADC3+TIMER1+DMA 采样模拟信号
【STM32H735DK测评】Ethernet+lwip DHCP获取IP地址
STM32H743基于CubeMx5.0配置手册
【STM32H735G-DK测评】lvgl移植
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
【福利三:逢7发帖赢大礼】使用MPU6050模块、img_dsc、img_btn机制实现一些简单有趣的动画效果
【福利三:逢7发帖赢大礼】使用arc弧形拉条控件控制PWM舵机及使用SPI3接口操作NRF24L01模块进行无线通信
【福利三:逢7发帖赢大礼】调试nucleo-WBA65RI工程测试样板的一些心得
【福利三:逢7发帖赢大礼】lv_timer和BME680实现温度、湿度、气压数据读取
微信公众号
手机版