STMCU小助手
发布时间:2022-5-6 09:33
|
1 概述 1.1 资源概述/ W1 z4 ?2 U7 Q; C" g2 u 开发板:ST官方NUCLEO-F103RB开发板 CUBEMX版本:1.3.0 MDK版本:5.23 主控芯片型号:STM32F103RBT60 X5 t o$ v) i+ c% b1 g5 U1 Y2 G3 L I' _) |' s) A: T0 \; G
! O4 z4 ?) V# ]* g 1.2 SWO功能简介 SWO也叫做trace(跟踪)功能,通过此功能,只需要在SWD调试基础上增加一条SWO线缆,就可以实现类似串口输出功能,配合printf函数打印相应的信息到utility窗口中。此功能不占用串口资源,无需在中断中执行。 0 C& ^) K, X# z$ u0 o; s H+ [1 n4 X 1.3 ITM(指令跟踪微单元)简介 我们此次功能实现是通过调用ITM实现的。' v/ Q" v. k2 E; N3 p ITM是一应用驱动的跟踪源,它支持printf类的调试手段来跟踪操作系统(OS)和应用事件,并发布判定的系统信息。ITM以包的形式发布跟踪信息,它由以下部分组成: ● 软件跟踪:软件可以通过直接写ITM激发寄存器来发布包信息。 ● 硬件跟踪:ITM会发布由DWT产生的信息包。3 G- S1 f" ?7 U! p) O2 ?. l& r: E5 u ● 时间戳:时间戳被发布到相应的包上。ITM包含一个21位的计数器以产生时间戳。Cortex-M3的时钟或串行线观测器(Serial Wire Viewer)的位时钟率给计数器提供时钟。3 L Q: R( {5 u. ?' t9 W 由ITM发送的信息包输出到TPIU(Trace Port Interface Unit),TPIU再添加一些额外的包(参考TPIU),然后输出完整的包序列给调试器。11 k7 _- k2 ~0 b0 N* _ # g. Q4 [: ~1 H) h+ k6 m2 g 1.4 实现功能7 l7 C" A6 f- L3 j8 W# @ 本次程序实现的功能如下9 T# y1 S1 o8 \4 ?% p- M# P 1、复位后,向Serial Wire Viewer(utility)打印信息; 2、按按键BUTTON,LED2灯实现翻转; 对于第二条实现,此次文档不详细描述。 2 硬件连接以及CUBEMX配置$ _' D; Q0 \ U7 l W: L 2.1 硬件连接1 D) x9 r Q: m2 y: ]& h: O* t( s 开发板内部已经将线接好,如下图所示 对于目标板与STLINK仿真器分开的情况,我们需要使用5根线进行连接,如下表所示。" C6 i4 X0 T" Q- ]# W% e2 L
4 n2 `. p+ _$ x# U; I 2.2 CUBEMX配置 选择异步跟踪模式,此时PB3将会自动定义为SWO端口。8 |/ }$ C( o2 F4 A Q3 r! H
: G9 ^& U" Q3 b6 B4 v; l, X 3 软件开发2 Z/ R3 [5 R4 |. L. ~: J5 W7 @6 ^ _ 3.1 KEIL软件设置+ M# n' w0 H, i/ g1 F+ S, H KEIL软件设置如下,这里由于程序使用的内部HSI,系统频率是64MHz,因此填写64MHz,需要根据实际情况进行填写。$ {2 U* s3 U, \3 T" e9 f: p" p- A5 w1 A
' k" e/ h; z, h; [* |' c 3.2 程序设计 使用CUBEMX生成代码。在主函数中进行修改。 主程序中包含stdio.h函数的头文件,否则将不能识别printf函数。4 B/ g0 t4 @4 J, O% I 3 H+ U* f' l% R
fputc 函数宏定义。
函数定义,由于printf调用的是fputc函数,通过这么一个转换,printf函数就能调用ITM函数实现输出功能。
TIM_Sendchar()函数在core.cm3.h头文件中有进行定义,如下所述
在主函数main()中增加printf函数,实现输出。8 i$ p& L2 M0 [) }; q" i % {9 {+ e" x& B7 E6 j5 O
4 实验结果与总结 4.1 实验结果8 d9 U; x1 I3 p; `/ ^% g! r 打开utility软件,点击printf via SWO viewer。$ ^! @3 X/ ?5 {9 S) G( K; ?% b; } ' z) q2 I5 i% q; I1 }1 N2 R3 W: ~
设置频率,点击Start,将调试板复位(程序设置只运行一次printf,因此每输出一次均需要重新复位),即可发现SWV窗口输出了相应的信息。
. U1 n+ e& M! _$ P 4.2 总结 o9 P+ n: ^, B; b 在传统的调试中,我们可能偏向于断点分析或者LED灯的亮灭来判定程序运行状态,但是都不是太直观,对于程序越大越不好操作。使用这个SWO功能能很大程序解决这个问题。我们可以在各种错误处理函数增加相应的提示信息,协助我们进行软件开发工作。 3 M! t( r; _1 |7 I5 t1 w # m% S C! ~2 e6 _( U |
想找个ST芯片
[GPIO] 使用新型抽象开始C++嵌入式编程,从GPIO开始
技术手册stm32f1xx中的一个小问题
【经验分享】STM32 HAL库移植FreeModbus详细步骤
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
实战经验 | Keil工程使用NEAI库的异常问题
经验分享 | FDCAN数据段波特率增加后发送失败的问题分析
STM32几种流行开发环境的优缺点
好用软件推荐-TouchGFX Designer
OpenSTLinux 6.1发布:M33-TD加持+安全升级,STM32MPU开发效率翻倍!
微信公众号
手机版