打印
[应用相关]

【转】STM32CubeIDE SWV 功能简介

[复制链接]
710|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1. 引言
STM32CubeIDE ST 官方推出的集成开发环境,集成了很多 STM32 的调试与开发工具。
本文主要介绍如何使用
SWV 功能来打印输出。  

使用特权

评论回复
沙发
黑心单片机|  楼主 | 2022-5-5 13:45 | 只看该作者
2. 问题描述
客户使用 STM32CubeIDE 开发环境,将 Printf 定位到串口上是正常的,但是在重定位到
SWO 上却出现了无法打印的问题。 客户也参考了网上的教程,仍然无法实现,不知道是什么原
因。
STM32CubeIDE 版本: V1.6.1
硬件环境: Nucleo-G431RB  


使用特权

评论回复
板凳
黑心单片机|  楼主 | 2022-5-5 13:47 | 只看该作者
3. 问题分析与定位
首先,我们需要查找资料,在《UM2609 STM32CubeIDE user guide》的第 4 章中,对于
SWV 有比较详细的介绍。 此处推荐先查看官网文档,这个文档本身是非常权威的。可能你在网上
也会找到关于
SWV 功能的介绍,但是这个文档还是必须要看的,因为这个是源头。
通过查看这个文档,知道了实现
SWV 的简单步骤如下:
第一步:在
Pinout & Configuration 选项中打开 SWO 的功能,此步骤是必须的。



87012627364e689d99.png (429.82 KB )

87012627364e689d99.png

2919627364e9d30be.png (415 KB )

2919627364e9d30be.png

使用特权

评论回复
地板
黑心单片机|  楼主 | 2022-5-5 13:48 | 只看该作者
第二步:重定位 printf 的接口函数。
这里有个简单的方法,直接在 syscalls.c 文件中,改写_write()函数的内容,代码如下所
示。 再在此文件中包含 ITM_SendChar 实现的头文件 core_cmX.h,此文件一般都是已经被包含在
你所选择的器件型号的头文件中。此处我们选择的是 stm32g431xx.h,直接放在此文件的开始处
即可。
#include "stm32g431xx.h"
__attribute__((weak)) int _write(int file, char *ptr, int len)
{
int DataIdx;
for (DataIdx = 0; DataIdx < len; DataIdx++)
{
//__io_putchar(*ptr++);
ITM_SendChar(*ptr++);
}
return len;
}




使用特权

评论回复
5
黑心单片机|  楼主 | 2022-5-5 13:49 | 只看该作者
第三步,在 main.c 文件中包含 stdio.h 这个头文件,并尝试打印 printf,此处注意,打印不能很频
繁, 所以需要增加延时。
#include <stdio.h>
uint8_t Count=0;
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
HAL_Delay(1000);
printf("Hello World, Count=%d\r\n", Count++);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */




全局编译一下,查看是否有错误,如果有错误,请对应提示信息修改编译没有错误之后,我们
就可以进行下一步了

使用特权

评论回复
6
黑心单片机|  楼主 | 2022-5-5 13:49 | 只看该作者
第四步, 配置仿真调试参数。 打开 SWV 的调试功能。 此处注意: Core Clock 必须与你配置的时钟
是一致的。此处我配置是 170MHz,与我的系统时钟一致。



使用特权

评论回复
7
黑心单片机|  楼主 | 2022-5-5 13:52 | 只看该作者
第五步,开始进入调试界面,并在调试界面中打开 Windows-->Show View-->SWV 的 ITM data
Console 窗口。注意,整个 SWV 其实是共用一个配置文件的,所以,当你打开 SWV 内的任意一
个窗口都可以进行 SWV 的配置。在这里我们只是为了查看 Printf 的内容,所以就选择了 SWV
ITM Data Console 窗口。关于这里边其他几个部分的详细说明参考 UM2609 的 4.3 章节的内容。  

图 5. 开启 SWV ITM 数据窗口
  
此窗口打开后,需要新增一个 Port 端口。 默认 TIM 中使用的就是 0 端口,所以我们直
接选 0 即可。  


选择点击配置按钮 对参数进行配置。配置情况如下:

推荐先复位一下工程(可选项),然后“启动跟踪/start trace” 。 注意:此处是先启动跟踪,之后
再让程序运行起来,不能反序。

此时即可看到打印出来的内容了。



使用特权

评论回复
8
黑心单片机|  楼主 | 2022-5-5 13:53 | 只看该作者
4. 小结
其实很多的内容都已经在手册中有详细的描述,但是因为英文或者是时间的问题,我们大部分人
没有时间和精力阅读完所有的文档的。所以在遇到问题时候,会阻塞你比较长时间。希望本文在
你遇到困难的时候能够给你一点启示,帮你快速解决手中的问题。本文提供了范例程序,直接参
Demo_Printf_G431RB.7z 此文件即可。  

使用特权

评论回复
9
黑心单片机|  楼主 | 2022-5-5 13:55 | 只看该作者
参考文献
【如有, 请注明;否则,请注明:无】  


文档中所用到的工具及版本
1、 STM32CubeIDE V1.6.1
2、 Nucleo-G431RB
LAT 中的附件
1LAT1024_Demo_Printf_G431RB.7z
版本历史内部参考
(仅供内部参考, 评审过程中,评审员需要删除这部分 : 版本历史(内部参考  



版本历史



使用特权

评论回复
10
黑心单片机|  楼主 | 2022-5-5 13:56 | 只看该作者
重要通知 - 请仔细阅读
意法半导体公司及其子公司 (“ST”)保留随时对 ST 产品和 / 或本文档进行变更的权利,恕不另行通知。买方在订货之前应获取关于 ST 产品的
最新信息。 ST 产品的销售依照订单确认时的相关 ST 销售条款。
买方自行负责对 ST 产品的选择和使用, ST 概不承担与应用协助或买方产品设计相关的任何责任。
ST 不对任何知识产权进行任何明示或默示的授权或许可。
转售的 ST 产品如有不同于此处提供的信息的规定,将导致 ST 针对该产品授予的任何保证失效。
ST 和 ST 徽标是 ST 的商标。若需 ST 商标的更多信息,请参考 www.st.com/trademarks。所有其他产品或服务名称均为其 各自所有者的财
产。
本文档是 ST 中国本地团队的技术性**,旨在交流与分享,并期望借此给予客户产品应用上足够的帮助或提醒。若文中内容存有局限或与 ST
官网资料不一致,请以实际应用验证结果和 ST 官网最新发布的内容为准。您拥有完全自主权是否采纳本文档(包括代码,电路图等)信息,我
们也不承担因使用或采纳本文档内容而导致的任何风险。
本文档中的信息取代本文档所有早期版本中提供的信息。
© 2020 STMicroelectronics - 保留所有权利  

使用特权

评论回复
11
wengh2016| | 2022-6-7 08:57 | 只看该作者
STM32CubeIDE性能怎么样?

使用特权

评论回复
12
10299823| | 2022-6-22 21:07 | 只看该作者
CubeIDE可以调时吗?

使用特权

评论回复
13
pklong| | 2022-6-24 10:19 | 只看该作者
SWV是什么?

使用特权

评论回复
14
alvpeg| | 2022-6-24 13:35 | 只看该作者
有STM32CubeIDE的教程吗?

使用特权

评论回复
15
averyleigh| | 2022-6-24 19:02 | 只看该作者
STM32需要那几个?

使用特权

评论回复
16
sheflynn| | 2022-6-24 19:48 | 只看该作者
STM32CubeIDE怎么样?

使用特权

评论回复
17
robincotton| | 2022-6-25 13:48 | 只看该作者
一直使用的是串口  

使用特权

评论回复
18
Pulitzer| | 2022-10-6 08:21 | 只看该作者

make_youtiao()执行完后,控制转回到调用函数中

使用特权

评论回复
19
Uriah| | 2022-10-6 15:22 | 只看该作者

要有一个延时的程序

使用特权

评论回复
20
Bblythe| | 2022-10-6 18:21 | 只看该作者

串口马上正常中断接收

使用特权

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

本版积分规则

72

主题

515

帖子

0

粉丝