打印
[其他ST产品]

基于STM32的多种printf用法

[复制链接]
1046|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
慢动作|  楼主 | 2021-12-31 16:01 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
在调试代码的时候,最常用的就是使用printf函数来输出一些打印信息,提示自己代码的执行情况。



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

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

SWO:Serial Wire Output,串行线输出

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

一、常见printf输出

1.UART打印


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


使用特权

评论回复
沙发
慢动作|  楼主 | 2021-12-31 16:05 | 只看该作者
2.Keil MDK-ARM Viewer输出

使用特权

评论回复
板凳
慢动作|  楼主 | 2021-12-31 16:08 | 只看该作者
3.IAR EWARM终端输出

使用特权

评论回复
地板
慢动作|  楼主 | 2021-12-31 16:09 | 只看该作者
本帖最后由 慢动作 于 2021-12-31 16:12 编辑

4.ST-LINK Utility SWV输出

这后面三种不占用硬件UART,使用ITM机制。




使用特权

评论回复
5
慢动作|  楼主 | 2021-12-31 23:54 | 只看该作者
二、UART映射printf

这种方法应该很多人都知道,就是使用硬件UART串口映射,实现printf打印输出。

使用特权

评论回复
6
慢动作|  楼主 | 2021-12-31 23:55 | 只看该作者
对于Keil、 IAR,只需要添加如下代码,就可以使用printf函数

#include "stdio.h"        
int fputc(int ch, FILE *f)       
{       
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);       
  return ch;       
}

使用特权

评论回复
7
慢动作|  楼主 | 2021-12-31 23:57 | 只看该作者
意思就是将UART输出(串口输出一个字符)进行映射。

使用特权

评论回复
8
慢动作|  楼主 | 2021-12-31 23:57 | 只看该作者
三、Keil MDK-ARM Viewer输出

针对2、3、4输出:

使用特权

评论回复
9
慢动作|  楼主 | 2021-12-31 23:58 | 只看该作者

使用特权

评论回复
10
慢动作|  楼主 | 2021-12-31 23:59 | 只看该作者
添加代码:
#include "stdio.h"        
int fputc(int ch, FILE *f)       
{       
  ITM_SendChar(ch);       
  return ch;       
}

使用特权

评论回复
11
maudlu| | 2022-11-17 13:58 | 只看该作者
IAR下 USART重定向Printf函数,怎么解决的?

使用特权

评论回复
12
adolphcocker| | 2022-11-17 14:08 | 只看该作者
printf跟usart_SendData()那个效率更高啊  

使用特权

评论回复
13
wilhelmina2| | 2022-11-17 14:43 | 只看该作者
如何用printf 打印出十六进制数?

使用特权

评论回复
14
kmzuaz| | 2022-11-17 15:16 | 只看该作者
stm32如何将字符转成字符指针  

使用特权

评论回复
15
ingramward| | 2022-11-17 15:52 | 只看该作者
stm32中怎么让串口printf发送不阻塞

使用特权

评论回复
16
gygp| | 2022-11-17 19:40 | 只看该作者
怎么解决STM32中不能使用printf函数的问题  

使用特权

评论回复
17
abotomson| | 2022-11-17 20:08 | 只看该作者
STM32 printf使用dma吗  ?  

使用特权

评论回复
18
jackcat| | 2022-11-17 20:49 | 只看该作者
stm32怎么用printf多个串口同时发送

使用特权

评论回复
19
elsaflower| | 2022-11-19 17:30 | 只看该作者
stm32编程怎么使用printf函数

使用特权

评论回复
20
mattlincoln| | 2022-11-23 23:15 | 只看该作者
在使用printf时就会调用自定义的fputc函数,来发送字符。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

695

帖子

0

粉丝