基于STM32的多种printf用法,你都知道吗?

置顶/星标公众,不错过每一条消息

基于STM32的多种printf用法,你都知道吗?_第1张图片

在调试代码的时候,最常用的就是使用printf函数来输出一些打印信息,提示自己代码的执行情况。


如果你的UART串口不够用,还要用printf,此时该怎么办?

方法其实是有的,那就是:使用SWO/SWV。

SWO:Serial Wire Output,串行线输出

SWD:Serial Wire Viewer,串行线查看器

一、常见printf输出

1.UART打印

基于STM32的多种printf用法,你都知道吗?_第2张图片

这种使用UART串口输出,需要占用一个硬件串口。


2.Keil MDK-ARM Viewer输出

基于STM32的多种printf用法,你都知道吗?_第3张图片

3.IAR EWARM终端输出

基于STM32的多种printf用法,你都知道吗?_第4张图片

4.ST-LINK Utility SWV输出

基于STM32的多种printf用法,你都知道吗?_第5张图片

这后面三种不占用硬件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输出:

基于STM32的多种printf用法,你都知道吗?_第6张图片

添加代码:

#include "stdio.h"	
int fputc(int ch, FILE *f)	
{	
  ITM_SendChar(ch);	
  return ch;	
}

在Keil的Options中设置:

基于STM32的多种printf用法,你都知道吗?_第7张图片

提示:Core Clock内核时钟要和你实际时钟对应。


四、IAR EWARM终端输出

1.Oprtins设置:

基于STM32的多种printf用法,你都知道吗?_第8张图片

基于STM32的多种printf用法,你都知道吗?_第9张图片


2.SWO配置

基于STM32的多种printf用法,你都知道吗?_第10张图片

基于STM32的多种printf用法,你都知道吗?_第11张图片

基于STM32的多种printf用法,你都知道吗?_第12张图片

五、ST-LINK Utility SWV输出

工具在线查看输出信息,需要上面配置代码,通过ST-Link链接即可。

基于STM32的多种printf用法,你都知道吗?_第13张图片

基于STM32的多种printf用法,你都知道吗?_第14张图片

本文写的比较仓促,一些细节没有写到,若有不懂,欢迎添加我微信咨询。


推荐阅读:

1.控制IRQ和FIQ中断的编译器内部函数

2.STM Studio调试和诊断工具讲解

640?wx_fmt=jpeg

长按识别图中二维码关注

你可能感兴趣的:(基于STM32的多种printf用法,你都知道吗?)