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

news2024/11/18 1:22:08

关于代码的调试手段,我在自己的一篇文章(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。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。(点击找小助理领取)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/129957.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习——细节补充

1.matplotlib与seaborn的区别 来源:https://geek-docs.com/matplotlib/matplotlib-ask-answer/difference-between-matplotlib-and-seaborn.html 2.%matplotlib inline使图片嵌入notebook,而不需要使用show()方法 3.IPython与python:IPyth…

中小企业如何选择进销存软件?

企业信息化转型趋势的推动,让很多中小企业也开启了转型的探索。对于企业,一款合适的进销存管理软件,绝对是转型之路上的必备工具,可以帮助企业对经营中的采购、库存、销售等环节进行有效管理监督。 目前,市面上的各种…

three.js 的渲染结构

理解three.js 的渲染结构 1 three.js 的渲染 Three.js 封装了场景、灯光、阴影、材质、纹理和三维算法,让你不必再直接用WebGL 开发项目。three.js 在渲染三维场景时,需要创建很多对象,并将它们关联在一起。 下图便是一个基本的three.js 渲…

Python通知Epic白嫖游戏信息

每周都有免费游戏 - Epic Games 近期看到Epic在送游戏,目前每周都会有活动白嫖。 身为白嫖党,肯定要操作一下。 游戏列表:Epic Games Store 每周免费游戏(331) | indienova GameDB 游戏库 大致思路: 1、…

把teamtalk中的网络库(netlib)拆出来单独测试实现双工通信效果

这篇文章的基础是上一篇对于将teamtalk中的线程池,连接池单独拆出来的讲解 不是说这个网络库会依赖线程池,连接池,而是上一篇文章中讲了一些base目录中的文件,并且这个网络库会依赖一些base目录里的文件, 文末会将所有…

基于fpga的自动售货机(三段式状态机)

目录 1、VL38 自动贩售机1 题目介绍 思路分析 代码实现 仿真文件 2、VL39 自动贩售机2 题目介绍: 题目分析 代码实现 仿真文件 3、状态机基本知识 1、VL38 自动贩售机1 题目介绍 设计一个自动贩售机,输入货币有三种,为0.5/1/2元&…

JS概览 (JS基础 DOM BOM)

目录 JavaScript JS基础 JS数据类型 函数 变量的作用域 作用域链 预解析 DOM DOM树 获取元素的方法 事件高级 注册和解绑事件 DOM事件流 BOM 和DOM的区别 window 对象的常见事件 window.onload JS执行机制 具体的执行流程 例子 JavaScript JS基础 JS数据类…

鉴源论坛 · 观模丨基于AUTOSAR的TTCAN通信协议的形式化建模与分析

作者 | 郭建 上海控安可信软件创新研究院特聘专家 版块 | 鉴源论坛 观模 汽车工业发展至今,硬件方面如车身材料、发动机等已无太大升值空间,而汽车电子则有着广阔的前景。为此各大汽车厂商对汽车电子的研究都投入了大量的人力财力。2003 年&#xff0c…

链式二叉树的代码总结

今天我带来链式二叉树的代码总结。 目录前言链式二叉树代码实现的五个文档二叉树的例子前序遍历中序遍历后序遍历层序遍历求结点个数的函数求叶子的个数的函数求k层结点个数的函数查找某一个值的函数求二叉树高度的函数判断二叉树是否是完全二叉树的函数开辟二叉树结点的函数销…

【设计模式】工厂方法模式

简单工厂模式的弊端 在简单工厂模式中只提供一个工厂类,该工厂类处于对产品类进行实例化的中心位置,它需要知道每一个产品对象的创建细节,并决定何时实例化哪一个产品类。简单工厂模式最大的缺点是当有新产品要加入到系统中时,必…

实现isReactive和isReadonly

08_实现isReactive和isReadonly 一、实现isReactive isReactive: 检查一个对象是否是由 reactive 创建的响应式代理。 1. 单元测试 // src/reactivity/tests/reactive.spec.tsimport { reactive, isReactive } from ../reactive;describe(reactive, function () {it(happy pa…

Callable接口

前言 获取多线程的方法,我们都知道有三种,还有一种是实现Callable接口 实现Runnable接口实现Callable接口实例化Thread类使用线程池获取Callable接口 Callable接口,是一种让线程执行完成后,能够返回结果的 在说到Callable接口…

【Unity天空盒】卡通渲染中如何实现云的消散效果

写在前面 完成大气渲染之后,接下来就是考虑云渲染了。因为我想做的天空盒本身是想跟着这位大佬Unity 卡通渲染 程序化天空盒 - 知乎里叙述的进程来的,里面云实现的是原神里的云,原神又是在崩3的基础上加上了消散效果。但现在能找到的一些教程…

线程中的sleep, yield, join

1. 前言 今天以具体实例的方法来详细记录下实战中的sleep, yield, join。 到底是什么意思,应该怎么用呢??? 2. 适合人群 对该类方法的概念比较模糊的人 3. 开始 3.1 sleep 此方法是一个静态方法,可以通过类名直接调…

【MyBatis】安装 + 框架搭建 + 使用 + 优化(全程一条龙服务讲解~)

目录 前言 一、准备工作 1.1、下载MyBatis 1.2、数据库设计 二、搭建框架 2.1、创建Maven项目 2.2、jar包、引入依赖 2.3、创建MyBatis核心配置文件 2.4、映射文件 2.5、通过junit测试功能 2.6、框架优化 三、小结——注意事项 前言 本篇全程从0到1搭建MyBatis框架…

Python编程 简单春节倒计时教程(附源代码)

作者简介:一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.应用的技术 1.Tkinter 2.PHotoimage 函数 3.label组件 二.效果图 三…

pytorch 咖啡豆识别

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍦 参考文章地址: 365天深度学习训练营-第P6周:好莱坞明星识别🍖 作者:K同学啊一、前期准备 1.设置GPU import torch from torch import nn …

2022 年 pnpm 为什么这么火?

pnpm是 Node.js 的替代包管理器。它是 npm 的直接替代品,但速度更快、效率更高。 为什么更有效率?当你安装一个包时,我们将它保存在你电脑上的全局存储中,然后我们从它创建一个硬链接而不是复制。也就是说:对于模块的…

8.移动端学习-rem适配方案

1.适配方案 1、当设备尺寸发生变化时,页面宽高等比例变化 2、使用媒体查询根据不同设备按比例设置html字体大小,页面元素使用rem做单位,当html字体大小变化,元素尺寸也会发生变化,从而达到等比缩放的适配 2.rem实际开…

ubuntu18.04运行ORB_SLAM2

1、基础工具安装 安装cmake、git、gcc、g。 sudo apt-get install cmake git gcc g 2、安装Eigen库 在终端输入以下代码。 sudo apt-get install libeigen3-dev 3、安装Pangolin0.5 版本过高会导致错误,安装依赖项。 sudo apt-get install libglew-dev libpyth…