打印
[STM32F2]

keil结合st-link使用SWO的两种调试方法笔记

[复制链接]
476|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lzbf|  楼主 | 2024-4-29 12:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过strongerHuang的教程,实现了SWO的两种调试方法,
1、在keil调试的过程中,使用debug printf viewer打印信息,
2、在STM32 ST-LINK Utility中烧写程序并打印信息。
几点信息:摘录自https://www.strongerhuang.com
SWD:Serial Wire Debug,串行线调试
SWO:Serial Wire Output,串行线输出
SWV:Serial Wire Viewer,串行线查看器
ITM:Instrumentation Trace Macrocell,指令跟踪宏单元
SWO串行线输出是单引脚、异步串行通信,可在Cortex-M3/M4/M7上使用,并由主调试器探测支持。
它是利用Cortex内核中ITM模块来实现此功能。
由于手头上没有串口,因此只能通过st-link进行信息输出,增加调试方法。jlink也可以通过RTT和SWO的方法输出信息。
手上有一个stlink,因此选择swo方式。
具体的方法参见https://www.strongerhuang.com网页或公众号。
几点注意事项:
1、如果要在STM32 ST-LINK Utility的Serial Wire Viewer打印信息,应该是stlink下在hex才能运行,keil里面下载程序是无法在Serial Wire Viewer中显示的。
2、如果直接在keil中调试全速运行的话,直接调试,运行,打开debug printf viewer即可看到打印的信息。
另外,keil工程中需要开启功能,添加printf的重定义,时钟频率要一致。端口号默认0就可以。
这个swo的方法比串口打印要更加有效率,而且不会干扰cpu运行。以后如果有jlink和stlink,都可以不用串口打印了,从打印效率来说:UART < SWO < JLink-RTT。记得nrf52系列是默认使用JLink的RTT功能的。
原文提到:与基于 UART 的文字输出不同,使用 ITM 输出不会对应用程序造成很大的延迟,在 ITM 内部有一个 FIFO,它使写入的输出消息得到缓冲。
3、SWO需要stm额外的引脚,stmcubemx中的debug选项需要配置为TraceAsynchronous Sw模式
4、RTT不需要额外的引脚,而且效率更加高。可见segger公司的实力还是很强大的。

使用特权

评论回复
沙发
芯路例程| | 2024-4-29 23:01 | 只看该作者
还真没用过SWO这个线。。。

使用特权

评论回复
板凳
AIsignel| | 2024-4-29 23:24 | 只看该作者
感觉正常的调试功能就够用了。

使用特权

评论回复
地板
uptown| | 2024-5-1 21:28 | 只看该作者
在使用Keil MDK-ARM集成开发环境结合ST-LINK调试器进行STM32微控制器编程时,SWO(Serial Wire Output)调试功能提供了两种实用的调试方法。SWO是一种串行线输出调试协议,它允许通过一个单独的引脚发送调试信息,这对于调试Cortex-M3/M4/M7内核的微控制器特别有用。

使用特权

评论回复
5
lzbf|  楼主 | 2024-5-2 17:17 | 只看该作者
在Keil中进行全速运行调试,并打开Debug Printf Viewer,即可看到打印的信息。

使用特权

评论回复
6
uytyu| | 2024-5-3 11:53 | 只看该作者
在Flash Download中勾选适当的选项,注意选择正确的芯片型号,否则程序可能无法烧录或调试。

使用特权

评论回复
7
olivem55arlowe| | 2024-5-3 17:57 | 只看该作者
在Keil MDK中,打开Target > Configure... > Debug对话框。

使用特权

评论回复
8
jtracy3| | 2024-5-4 13:58 | 只看该作者
在代码中使用ITM相关的printf语句,然后将编译好的程序烧写到微控制器中,再通过ST-LINK Utility软件来捕获和分析通过SWO发送的调试信息。这种方法的优点是可以脱离IDE环境进行调试,而且ST-LINK Utility提供了更多的调试功能,如实时查看寄存器状态、观察内存信息等。

使用特权

评论回复
9
lihuami| | 2024-5-6 12:40 | 只看该作者
在使用SWO功能之前,可能需要在STM32的NVIC设置中启用SWO。

使用特权

评论回复
10
pl202| | 2024-5-6 20:07 | 只看该作者
除了使用Keil内置的SWO调试功能外,还可以使用第三方SWO调试工具来实现对目标设备的调试。以下是使用第三方SWO调试工具的步骤: a. 选择一个适合的SWO调试工具,如SWO Viewer、SWO Analyzer等。 b. 在Keil中,打开项目选项(Project Options)。 c. 在“Debug”选项卡中,选择“Use SWO for printf output”。 d. 在“SWO Settings”中,设置SWO的频率、端口、速率等参数。 e. 在“Debug”选项卡中,选择“Use ST-Link Debugger”。 f. 在“ST-Link Debugger Settings”中,设置ST-Link的端口、速率等参数。 g. 保存设置,并重新编译项目。 h. 使用ST-Link连接目标设备,并在Keil中启动调试。 i. 在第三方SWO调试工具中,设置SWO的频率、端口、速率等参数。 j. 在第三方SWO调试工具中,查看SWO输出。

使用特权

评论回复
11
bartonalfred| | 2024-5-7 09:28 | 只看该作者
你可以使用Keil提供的SWO函数库来控制SWO输出的行为。例如,你可以发送数据、控制时钟信号等。

使用特权

评论回复
12
yeates333| | 2024-5-7 13:02 | 只看该作者
通常涉及到在ST-Link软件或Keil uVision中设置SWO参数,并确保STM32微控制器的寄存器配置正确,以启用SWO输出。

使用特权

评论回复
13
sanfuzi| | 2024-5-7 17:53 | 只看该作者
SWO调试使用的是单引脚、异步串行通信,这意味着调试信息的发送和接收不需要额外的时钟线,只需一根信号线即可完成。

使用特权

评论回复
14
biechedan| | 2024-5-8 20:18 | 只看该作者
调试过程中,你可以使用SWV模式来查看和分析SWO输出的数据。这可以通过Keil的软件逻辑分析仪或者外部的逻辑分析仪工具来实现。

使用特权

评论回复
15
Henryko| | 2024-5-8 21:45 | 只看该作者
能正常调试就可以吧

使用特权

评论回复
16
mmbs| | 2024-5-9 11:48 | 只看该作者
在Keil中打开你的项目,并配置调试选项。选择ST-Link作为调试器,并启用SWO调试。

使用特权

评论回复
17
pmp| | 2024-5-9 17:44 | 只看该作者
在Keil的Debug选项中,选择ST-Link作为调试工具,并配置相应的接口和目标芯片。

使用特权

评论回复
18
abotomson| | 2024-5-10 09:37 | 只看该作者
使用ST-LINK Utility进行SWO调试时,需要确保ST-LINK Utility的设置与微控制器的SWO输出相匹配,包括波特率和数据格式等。

使用特权

评论回复
19
chenci2013| | 2024-5-12 15:52 | 只看该作者
在Keil的调试过程中使用Debug Printf Viewer打印信息。

使用特权

评论回复
20
Bowclad| | 2024-5-12 20:13 | 只看该作者
两种调试方法吗

使用特权

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

本版积分规则

104

主题

4986

帖子

3

粉丝