
我们介绍过了 STM32F1 的 USART 串口通信,本文我们来学习如何在STM32上使用 printf 输出函数。相信只要学习过 C 语言的朋友, 都会使用printf函数。本章要实现的功能是:通过 printf 函数将信息打印在串口调试助手上显示。 printf重定向简介 我们知道 C 语言中printf 函数默认输出设备是显示器,如果要实现在串口 或者 LCD 上显示,必须重定义标准库函数里调用的与输出设备相关的函数。比如使用 printf 输出到串口, 需要将 fputc 里面的输出指向串口,这一过程就叫重定向。 那么如何让 STM32 使用 printf 函数呢?很简单,只需要将 fputc 里面的输出指向 STM32 串口即可,fputc 函数有固定的格式,我们只需要在函数内操作STM32串口即可,代码如下:
如果要让其他的串口也使用 printf 函数,只需要修改下串口号即可。 printf函数格式 printf 函数调用格式如下:
其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原 样输出; 另一部分是格式化规定字符, 以"%"开始, 后跟一个或几个规定字符, 用来确定输出内容格式。 参量表是需要输出的一系列参数, 其个数必须与格式化字符串所说明的输 出参数个数一样多, 各参数之间用","分开, 且顺序一一对应, 否则将会出现意 想不到的错误。 常用格式化规定字符如下:
例如:使用 printf函数输出一个整型数据 1234,则调用格式如下:
在KEIL 中使用 printf一定要勾选“微库”选项,否则不会输出。配置如下: ![]() 在STM32 程序开发中 printf 应用是非常广的,当我们需要查看某些变量数 值或者其他信息等,都可以通过 printf 打印到串口调试助手上查看。 硬件设计 本章硬件电路与上一章串口通信实验一样,使用到了 STM32F1的串口1和D1 指示灯,这里不多说。 所要实现的功能是:通过 printf 函数将信息打印在串口调试助手上显示,同时 D1 指示灯不断闪烁,表示系统正常运行。程序框架如下: (1)初始化 USART1 (2)编写 printf 重定向程序 (3)编写主函数 本章软件部分非常简单,只需要在上一章串口通信程序基础上,加上一个 printf 重定向函数即可。下面我们打开“printf重定向”工程。 USART1 串口初始化程序同上一章串口通信实验一样。 printf重定向函数 初始化 USART1 后,就需要将 fputc 里面的输出指向STM32 的串口,代码如下:
当使用 printf 函数时,自动会调用 fputc 函数,而 fputc 函数内又将输出设备重定义为 STM32 的 USART1,所以要输出的数据就会在串口 1上输出。 主函数 编写好前面几部分程序后,接下来就可以编写主函数了,代码如下:
主函数实现的功能很简单,首先调用之前编写好的硬件初始化函数,包括 SysTick 系统时钟,中断分组,LED 初始化等。然后调用我们前面编写的USART1初始化函数,这里我们设定串口通信波特率为 9600。最后进入 while 循环语句,不断让D1 指示间隔 200ms闪烁,同时通过串口 1 输出一连串字符信息。 其实如果你学会了重定向到 USART1,对于其他的串口重定向都是类似的。 将工程程序编译后下载到开发板内,可以看到 D1 指示灯不断闪烁,表示程序正常运行。打开“\5--开发工具\4. 常用辅助开发软件\串口调试助手”,首 先勾选下标号 1 DTR 框,然后再取消勾选。这是因为此串口助手启动时会把系统复位住,通过 DTR 状态切换下即可。然后设置好波特率等参数后,串口助手上即会收到 printf 发送过来的信息。(前提一定要连接好线路,USB 线一端连接电脑,另一端连接开发板“USB 转串口模块”上的 USB 下载口。先勾选下标号1 DTR框,然后再取消勾选)如下图所示: ![]() |
STM32 GUI LTDC 最大像素时钟评估方法
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
OpenBLT移植到STM32F405开发板
为什么要先开启STM32外设时钟?
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【经验分享】STM32实例-RTC实时时钟实验④-获取RTC时间函数与中断服务函数
STM32 以太网 MAC Loopback 的实现
STM32功能安全设计包,助力产品功能安全认证
基于STM32启动过程startup_xxxx.s文件经验分享
HRTIM 指南