STM32
直播中

飞毛腿452

8年用户 855经验值
擅长:电源/新能源
私信 关注
[问答]

如果UART串口不够用还要用printf该怎么办呢

如果UART串口不够用还要用printf该怎么办呢?基于STM32的printf函数有几种用法呢?

回帖(1)

杨雨凡

2021-11-30 09:39:56
在调试代码的时候,最常用的就是使用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链接即可。




举报

更多回帖

发帖
×
20
完善资料,
赚取积分