查看: 607|回复: 7
打印 上一主题 下一主题

STM32F7-Discovery使用ITM作为调试工具

[复制链接] qrcode

38

主题

41

帖子

126

积分

注册会员

Rank: 2

积分
126
楼主
跳转到指定楼层
发表于 2015-9-18 12:54 PM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

**************************************************************************

                                       东方青学STM32F7

                                        ———————转载请注明ICKey————————

**************************************************************************




STM32F7-Discovery使用ITM作为调试工具

------东方青

关于代码的调试手段,我在自己的一篇文章(http://bbs.ickey.cn/index.php?app=group&ac=topic&id=54944链接中的《》)中已经详细谈到,为什么在调试中我们通常使用J-LinkULINKST-LinkST)或Open SDK(飞思卡尔)或Nu-Link(新唐)等在线仿真调试,而是选择串口这种慢速的设备作为调试的手段之一。

因为通常我们使用串口作为调试工具,那么久意味着占用至少一个I/O口(通常只用Tx),并且还得存在一个COMSTTL电平的模块,并且串口慢速,所以STM32提供了ITM。关于STM32ITM,我也只是粗略的了解!所以在此对于它的概念不多废话!我只知道一件事,那就是使用它,可以通过SWO接口进行像串口一样的与PC机进行通信,实现UART/USARTPC机的串口助手功能,读写均可。

OK!干这件事,首先需要准备好如下几件东西!

1、ST-Link驱动,stsw-link009,但是通常有些童鞋的电脑安装ST-Link驱动是,只安装成功了ST-Link的驱动,而没有安装成功虚拟串口的驱动。特别注意:这两个驱动,必须都安装好,否则玩不了ITM。安装好的示意图如下:

如果不能安装成功的童鞋,请参看我的另一篇文章进行安装,通常来说,还没遇见不行的!嘿嘿!地址:ST-Link安装虚拟串口失败的完美解决方案

2、ST-Link Utility ST-Link软件编号为stsw-link004。这是一个驱动也是一个工具,而ITM的使用,必须依赖于这个工具。

3、移植好程序代码。

OK!其实就是这么几点!首先呢,还是有必要介绍这个ITM的使用来源的!首先我在STM32所有的内核文件中发现个事实,

在这里使用Cortex-M7内核的内核头文件core_cm7.h作举例,如下图:

呵呵!可以看到,Debug输入/输出函数。我去买还看到了声明输入的数组内存区。再看看函数:

从注释和函数名来看,基本上就已经确定了,这是一个输出函数!现在先不管它往哪里输出!在往下看:

呵呵呵!不用说,一眼就能看出它是一个输入函数,从外部读取数据到MCU。再往下看!

从注释和函数名基本上也能看出,这是一个校验函数,并且是校验输入的缓存空间的。这里也先不管!再往下看!呵呵!已经没有往下了,这已经是core_cm7.h文件的最后一个内联函数了。那么久很明确一个事实了,关于ITM的函数只有3个,并且一个为输出,一个为输入,一个为校验。这绝对不是巧合,而是精心设计的。

通过从上图三个手册中了解,ITM是一种虚拟的串口,可以向串口一样进行将数据打印到指定输出设备上,但是必须满足一个条件,那就是它依赖于SWO引脚,通常我们使用J-Link或者ST-Link简易模块进行多STM32程序的烧录,通常只需要两个端口,SW_CLKSW_DIO,这种情况是不能使用ITM的,因为SWO引脚并没有接!那么这个神秘的SWO引脚到底是什么引脚呢?呵呵!最快的方法是在原理图当中找,如下图:

呵呵!这是从STM32F7-Discovery板卡的原理同中抠出来的!这个可以根据ST官方的权威确定它的正确性!哈哈!那么还有木有什么其他的证据了呢?其实这种基础的东西,可能是在F7的手册里找不到的,但是在入门型的MCU的手册了肯定是有的,所以我就在F103的参考手册中找到了如下图:

没错!就是上图了,不多说,证据已经充足!如果有兴趣,可以详细了解J-LinkST-Link接口。

特别注意:在这里也提供了这种找资料的方法(实际上是因为我想把这种方法表述出来,所以才有以上的证明),当我们在玩高端的芯片是,有些比较基础的资料在详细芯片的手册上可能找不到,那么怎么办呢?通常的做法是,找到这个公司相应的入门级芯片的手册参考,可能会有需要的资料,这一点在玩三星的S3C6410时,参看协处理器寄存器,命令等,需要参考S3C2440的协处理器手册的情况体现的玲离尽致(但是到了Cortex-A系列,由于内核改动比较大,所以S5PV210等的协处理器手册和S3C2440的还是差别很大的,所以也要注意等级)。

OK!废话了一大堆!还没讲咋使用ITM呢!其实没什么实现不实现的,人家已经提供打印函数了,咱就移植一下printf,方便调试打印即可!如下图:

没错!你看的没错!就是一行代码!直接调用内联函数__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch),在printf的预留接口调用即可!这样就可以打印了!关于输入,就不多说了!一样的道理!看如下的调用!

没错!你的眼睛没花!就是这样的简单!

4、使用ITM输出打印在PC端。

该如何使用这个ITM打印在PC端呢?普通的串口助手???这是不行的!这就是前面为毛说必须装ST-Link Utility工具的原因。就是得使用它!安装好ST-Link Utility工具后,在桌面上会看到:

    

这样的快捷方式!双击打开!有如下界面!

进行操作:ST-Link->Printf via SWO viewer得到如下界面:

进行如下步骤设置:

(1)在图中1位置设置系统是在频率,因为这块STM32F7-Discovery板卡目前运行的是216MHz,所以就填写216M了。

(2)点击图中位置2Start,成功启动后,就可以看到图中3有字符串打印了!这么这就算是完事了。

 

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

101

帖子

26

积分

新手上路

Rank: 1

积分
26
沙发
发表于 2015-9-18 12:57 PM | 只看该作者
稳稳滴占了一楼~
回复 支持 反对

使用道具 举报

0

主题

91

帖子

4

积分

新手上路

Rank: 1

积分
4
板凳
发表于 2015-9-18 01:00 PM | 只看该作者
稳稳地占据了一楼

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

1

主题

109

帖子

21

积分

新手上路

Rank: 1

积分
21
地板
发表于 2015-9-18 01:02 PM | 只看该作者
坐坐沙发

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

2

主题

96

帖子

58

积分

注册会员

Rank: 2

积分
58
5#
发表于 2015-9-18 01:04 PM | 只看该作者
VCP安装不了怎么办
回复 支持 反对

使用道具 举报

0

主题

65

帖子

6

积分

新手上路

Rank: 1

积分
6
6#
发表于 2015-9-18 01:11 PM | 只看该作者
你Q一下我,我给你个包试试!
回复 支持 反对

使用道具 举报

274

主题

4305

帖子

8770

积分

论坛元老

Rank: 8Rank: 8

积分
8770
7#
发表于 2015-9-18 02:37 PM | 只看该作者
好东西,顶

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

0

主题

85

帖子

14

积分

新手上路

Rank: 1

积分
14
8#
发表于 2015-11-14 08:36 PM | 只看该作者
赞一个,厉害
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表