在调试代码的时候,最常用的就是使用printf函数来输出一些打印信息,提示自己代码的执行情况。
如果你的UART串口不够用,还要用printf,此时该怎么办?
方法其实是有的,那就是:使用SWO/SWV。
SWO:Serial Wire Output,串行线输出
SWD:Serial Wire Viewer,串行线查看器
一、常见printf输出
1.UART打印
这种使用UART串口输出,需要占用一个硬件串口。
2.Keil MDK-ARM Viewer输出
3.IAR EWARM终端输出
4.ST-LINK Utility SWV输出
这后面三种不占用硬件UART,使用ITM机制。
二、UART映射printf
这种方法应该很多人都知道,就是使用硬件UART串口映射,实现printf打印输出。
对于Keil、 IAR,只需要添加如下代码,就可以使用printf函数:
#include "stdio.h"int fputc(int ch, FILE *f){HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,0xFFFF); return ch;}
意思就是将UART输出(串口输出一个字符)进行映射。
三、Keil MDK-ARM Viewer输出
针对2、3、4输出:
添加代码:
#include "stdio.h"int fputc(int ch, FILE *f){ ITM_SendChar(ch); return ch;}
在Keil的Options中设置:
提示:Core Clock内核时钟要和你实际时钟对应。
四、IAR EWARM终端输出
1.Oprtins设置:
2.SWO配置
五、ST-LINK Utility SWV输出
工具在线查看输出信息,需要上面配置代码,通过ST-Link链接即可。
关键字:STM32 printf用法 打印信息
引用地址:
基于STM32的多种printf用法 你都知道吗?
推荐阅读最新更新时间:2024-11-09 01:24
意法半导体TouchGFX Stock简化并加快在STM32 MCU上用户界面设计
2022 年 12 月 23 日, 中国—意法半导体TouchGFX软件包最新版本进一步简化在STM32 微控制器上开发美观的用户界面 (UI) 。4.21 版增加了TouchGFX Stock功能,在网址 4.21 版还增加了对 SVG 图像(可缩放矢量图形图像格式)的支持,这为开发酷炫的 UI 提供了更多自由空间。用户获取SVG图像需要用 TouchGFX Designer工具中新增的一个小部件,为确保高性能,SVG图像需用到意法半导体 STM32 MCU中的专用图形处理硬件,例如,NeoChrom GPU 处理器。 此外,4.21版的TouchGFX Designer工具在导航、一般用途等方面进行50 多项改进,
[单片机]
基于STM32设计的酒驾报警系统
1. 前言 随着社会的发展和人们生活水平的提高,汽车已经成为人们出行的主要代步工具,与此同时,酒后驾车所引发的事故越来越多,对人们的生命安全带来了威胁。为了控制酒后驾车,本文设计了一款能够安装在车辆驾驶室内的酒后驾车监测系统。 系统主控芯片采用STM32,采用酒精传感器采集数据进行分析,如果发现酒精超标,会通过GPRS模块向指定的手机号码发送提醒短信;系统还带了一块LCD显示屏,可以实时显示检测的酒精含量,酒精超标后,本地蜂鸣器也会发出警报,提醒驾驶员。 测量酒驾的标准是: (1)饮酒驾车是指车辆驾驶人员血液中的酒精含量大于或者等于20mg/100ml,小于80mg/100ml的驾驶行为。(2)醉酒驾车是指车辆驾驶人员
[单片机]
使用STM32按键控制LED亮灭
实验环境 Matlab版本 :2021b 操作系统 :Win10专业版 硬件平台 :YF-STM32-ALPHA 1R4 模型与原理图 本次实验所用到的Simulink模型如图5.1所示,实验现象: 按键按下、松开LED循环实现翻转亮灭效果,当按键按下时,产生下降沿脉冲,通过一个计数器对下降沿脉冲进行0~1循环计数,计数到最大值时产生输出信号,输出信号为0时,控制LED熄灭,输出值为1时,控制LED点亮。 按键电路采用对电源负极方式连接,按键松开状态为高电平H,即逻辑1,按键按下状态为低电平L,即逻辑0。 图5.1 按键控制LED亮灭simulink模型 图5.2 按键控制LED亮灭原理图 图5.3 按键在开发板
[单片机]
stm32 can不稳定的解决方法
问题出现的背景 需要写一个新的电机的驱动,使用can通讯,驱动比较简单,很快就写好了。自己单独测试一个电机的时候没有问题,正反转测什么的都很正常。本以为事情会很顺利,但是在测两个电机的时候,却发现很严重的问题,经常左电机不装或者是右电机不转。 问题的解决步骤 发送: 3 个发送邮箱 发送报文的优先级特性可软件配置 记录发送 SOF 时刻的时间戳 接收: 3 级深度的2个接收 FIFO 14 个位宽可变的过滤器组 - 由整个 CAN 共享 标识符列表 FIFO 溢出处理方式可配置 记录接收 SOF 时刻的时间戳
[单片机]
STM32的USB虚拟串口介绍
通常我们使用STM32进行串口通信会选择其硬件串口,但在某些情况下串口会不够用,这个时候就可以选择USB的虚拟串口,这样可以增加一个串口。 USB是非常复杂的一个设备,要想完全搞懂它需要花费不少时间和精力。但去使用它却相对简单。这里我们使用STM32CubeMX构建一个初始工程,然后实现将我们从电脑发下来的东西原封不动地发回电脑,使用的芯片是STM32F103zet6。 USB需要配置两个地方,一个是Connectivity下勾选USB,在Mode下勾选Device,下面的参数保持默认即可。其他芯片类型的选项可能不同,选择有Device字样的就OK。 第二在Middleware下选择USB_DEVICE,在右边的下拉菜
[单片机]
把GuiLite移植到STM32上
1 Gui移植结果 一些演示效果: 2 GuiLite介绍 GuiLite是一个开源的图形用户界面框架,只依赖于一个单一的头文件库(GuiLite.h),不需要很复杂的文件管理,代码量平易近人。 GuiLite由4千行C++代码编写,单片机上也能流畅运行,其最低的硬件运行要求如下: GuiLite具有很强的跨平台特性: 支持的操作系统:iOS/macOS/WatchOS,Android,Linux(ARM/x86-64),Windows(包含VR),RTOS… 甚至无操作系统的单片机 支持的开发语言:C/C++, Swift, Java, Javascript, C#, Golang… 支
[单片机]
分析一个关于STM32 芯片异常复位的经典案例!
前言 本篇主要是介绍一种处理问题的思路,即当我们在做STM32应用开发过程中,遇到芯片异常复位,或者进入了异常处理时,如何通过集成开发环境,如IAR,KEIL等查看相应的ARM内核寄存器,定位出应用软件产生异常的地方! 问题描述 某STM32用户反馈,当使用STM32L4芯片的时候,程序运行一段时间后,会忽然复位。复位后程序继续运行,但是还会继续复位,原因不详! 问题分析 针对于此类问题,我们可以按照一个统一的思路去处理。分析本案例的大致步骤如下: 1、初步确定复位的原因,是硬件复位,如外部NRST被拉低,还是软件复位,包括软件直接调用复位,或者看门狗复位,还是低功耗模式如standby模式被唤醒时产生中断; 2、查看复位
[单片机]
stm32蜂鸣器实验
硬件连接: 提示:不能通过IO口直接驱动大功率器件 实验步骤: 使能IO口时钟。调用RCC_APB2PeriphColckCmd(); 初始化IO口模式。调用函数BEEP_Init(); 操作IO口,输出高低电平。 代码: beep.h: #ifndef __BEEP_H #define __BEEP_H #include sys.h //蜂鸣器端口定义 #define BEEP PBout(8) // BEEP映射到PB8,蜂鸣器接口 void BEEP_Init(void); //初始化 #endif beep.c: include beep.h //初始化PB8为输出口.
[单片机]