完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
1 概述
1.1 资源概述 开发板:ST官方NUCLEO-F103RB开发板 CUBEMX版本:1.3.0 MDK版本:5.23 主控芯片型号:STM32F103RBT6 1.2 SWO功能简介 SWO也叫做trace(跟踪)功能,通过此功能,只需要在SWD调试基础上增加一条SWO线缆,就可以实现类似串口输出功能,配合printf函数打印相应的信息到utility窗口中。此功能不占用串口资源,无需在中断中执行。 1.3 ITM(指令跟踪微单元)简介 我们此次功能实现是通过调用ITM实现的。 ITM是一应用驱动的跟踪源,它支持printf类的调试手段来跟踪操作系统(OS)和应用事件,并发布判定的系统信息。ITM以包的形式发布跟踪信息,它由以下部分组成: ● 软件跟踪:软件可以通过直接写ITM激发寄存器来发布包信息。 ● 硬件跟踪:ITM会发布由DWT产生的信息包。 ● 时间戳:时间戳被发布到相应的包上。ITM包含一个21位的计数器以产生时间戳。Cortex-M3的时钟或串行线观测器(Serial Wire Viewer)的位时钟率给计数器提供时钟。 由ITM发送的信息包输出到TPIU(Trace Port Interface Unit),TPIU再添加一些额外的包(参考TPIU),然后输出完整的包序列给调试器。1 1.4 实现功能 本次程序实现的功能如下 1、复位后,向Serial Wire Viewer(utility)打印信息; 2、按按键BUTTON,LED2灯实现翻转; 对于第二条实现,此次文档不详细描述。 2 硬件连接以及CUBEMX配置 2.1 硬件连接 开发板内部已经将线接好,如下图所示 对于目标板与STLINK仿真器分开的情况,我们需要使用5根线进行连接,如下表所示。 [tr]序号连接网络备注[/tr]
选择异步跟踪模式,此时PB3将会自动定义为SWO端口。 3 软件开发 3.1 KEIL软件设置 KEIL软件设置如下,这里由于程序使用的内部HSI,系统频率是64MHz,因此填写64MHz,需要根据实际情况进行填写。 3.2 程序设计 使用CUBEMX生成代码。在主函数中进行修改。 主程序中包含stdio.h函数的头文件,否则将不能识别printf函数。 #include "stdio.h" 1 fputc 函数宏定义。 #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) 1 函数定义,由于printf调用的是fputc函数,通过这么一个转换,printf函数就能调用ITM函数实现输出功能。 PUTCHAR_PROTOTYPE { ITM_SendChar(ch); return ch; } TIM_Sendchar()函数在core.cm3.h头文件中有进行定义,如下所述 __STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) { if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ { while (ITM->PORT[0U].u32 == 0UL) { __NOP(); } ITM->PORT[0U].u8 = (uint8_t)ch; } return (ch); } 在主函数main()中增加printf函数,实现输出。 printf("** Test finished successfully. ** nr"); 4 实验结果与总结 4.1 实验结果 打开utility软件,点击printf via SWO viewer。 设置频率,点击Start,将调试板复位(程序设置只运行一次printf,因此每输出一次均需要重新复位),即可发现SWV窗口输出了相应的信息。 4.2 总结 在传统的调试中,我们可能偏向于断点分析或者LED灯的亮灭来判定程序运行状态,但是都不是太直观,对于程序越大越不好操作。使用这个SWO功能能很大程序解决这个问题。我们可以在各种错误处理函数增加相应的提示信息,协助我们进行软件开发工作。
|
||
|
||
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1936浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
729浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
569浏览 3评论
594浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
552浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 19:29 , Processed in 0.806265 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号