关于代码的调试手段,我在自己的一篇文章(http://bbs.ickey.cn/index.php?app=group&ac=topic&id=54944链接中的《STM32F030 Nucleo-开发调试的经验USART的重要性.pdf》)中已经详细谈到,为什么在调试中我们通常使用J-Link或ULINK或ST-Link(ST)或Open SDK(飞思卡尔)或Nu-Link(新唐)等在线仿真调试,而是选择串口这种慢速的设备作为调试的手段之一。
因为通常我们使用串口作为调试工具,那么久意味着占用至少一个I/O口(通常只用Tx),并且还得存在一个COMS转TTL电平的模块,并且串口慢速,所以STM32提供了ITM。关于STM32的ITM,我也只是粗略的了解!所以在此对于它的概念不多废话!我只知道一件事,那就是使用它,可以通过SWO接口进行像串口一样的与PC机进行通信,实现UART/USART与PC机的串口助手功能,读写均可。
OK!干这件事,首先需要准备好如下几件东西!
1、ST-Link驱动,stsw-link009,但是通常有些童鞋的电脑安装ST-Link驱动是,只安装成功了ST-Link的驱动,而没有安装成功虚拟串口的驱动。特别注意:这两个驱动,必须都安装好,否则玩不了ITM。安装好的示意图如下:
如果不能安装成功的童鞋,请参看我的另一篇文章进行安装,通常来说,还没遇见不行的!嘿嘿!地址:http://bbs.ickey.cn/group-topic-id-55579.html
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_CLK和SW_DIO,这种情况是不能使用ITM的,因为SWO引脚并没有接!那么这个神秘的SWO引脚到底是什么引脚呢?呵呵!快的方法是在原理图当中找,如下图:
呵呵!这是从STM32F7-Discovery板卡的原理同中抠出来的!这个可以根据ST官方的权威确定它的正确性!哈哈!那么还有木有什么其他的证据了呢?其实这种基础的东西,可能是在F7的手册里找不到的,但是在入门型的MCU的手册了肯定是有的,所以我就在F103的参考手册中找到了如下图:
没错!就是上图了,不多说,证据已经充足!如果有兴趣,可以详细了解J-Link和ST-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)点击图中位置2,Start,成功启动后,就可以看到图中3有字符串打印了!这么这就算是完事了。
嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!
无偿分享大家一个资料包,
差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。(点击找小助理领取)