STM32有两个调试端口,即JTAG和SW。Keil 的ULINK2 USB-JATG接口适配器支持这两种调试接口。

本文描述了如何配置和使用SW接口来获取各种调试信息。

一、目标调试阶段的配置

1.调试器的选择

选择μVision->Debug ->Options for Target –>Debug,并选择ULINK Cortex Debugger调试器。

2.调试目标初始化文件

按照路径\Keil\ARM\Startup\ST,将文件STM32DBG.ini拷贝到工程文件夹中。选择μVision->Debug -> Options for Target –>Debug,同时在Initialization File选项中选择该文件。

3.Cortex-M目标设备调试驱动配置

选择Options for Target – Debug – Settings,设置SWJ,端口选择SW。

4.Trace功能的配置

Trace功能包括:Core Clock, Trace Port 以及定义TraceEvents 等。

二、实时跟踪

1.μVision的状态栏信息

在μVision的状态栏中显示了实时跟踪的状态信息。

2.实时跟踪窗口

调试时选择Peripherals – Trace。

1)  Trace Records窗口

该窗口显示了所有被捕获的跟踪记录,每一个跟踪记录都包含了详细的信息。可以选择Peripherals - Trace – Records来查看。

2)  Exception Trace 窗口

该窗口显示了异常和中断的统计信息,这些信息是基于Trace Records中所捕获的跟踪记录的。可以选择Peripherals - Trace - Exceptions来查看。

3)  Event Counters窗口

这个窗口显示了特殊事件计数器的值,计数值是基于Trace Records中所捕获的跟踪记录的。

3.ITM Viewer窗口

可以通过ITM的激励端口0在ITM Viewer窗口上输出ASCII 或 Hex格式的数据,目前只有ITM 端口0可以在ITM Viewer窗口显示。要使用ITM Viewer窗口来显示调试跟踪的输出信息,需要进行以下的操作。

l   在源代码中添加ITM激励端口寄存器的定义。

#define ITM_Port8(n)    (*((volatile unsigned char *)(0xE0000000+4*n)))

#define ITM_Port16(n)   (*((volatile unsigned short*)(0xE0000000+4*n)))

#define ITM_Port32(n)   (*((volatile unsigned long *)(0xE0000000+4*n)))

#define DEMCR           (*((volatile unsigned long *)(0xE000EDFC)))

#define TRCENA          0x01000000

l   在源代码中添加fputc函数,它向ITM的激励端口0寄存器写数据。如果有了fputc函数,则可以用printf函数做为调试输出。ITM的激励端口0与ITM Viewer窗口固定连接。

struct __FILE { int handle; /* Add whatever you need here */ };

FILE __stdout;

FILE __stdin;

int fputc(int ch, FILE *f) {

if (DEMCR & TRCENA) {

while (ITM_Port32(0) == 0);

ITM_Port8(0) = ch;

}

return(ch);

}

l   在源代码中添加printf函数来显示调试跟踪信息。

printf("Serial Wire Output Debug Trace message");

l   在Cortex-M Target Driver Setup窗口中使能ITM激励端口0

l   在目标调试期,打开ITM Viewer窗口

选择μVision-> View -> Serial Window -> ITM Viewer

完成这些步骤以后,可以在目标调试期通过ITM Viewer窗口查看到调试跟踪信息,例如显示AD转换的结果。

ITM Viewer的功能类似串口打印调试信息,使用ITM更简单,而且不需要串口以及相关驱动程序。

4.Logic Analyzer窗口

在调试的时候,可以通过逻辑分析器观测至多4个变量值的变化。执行以下步骤来使用逻辑分析器。

l   在Cortex-M Target Driver Setup窗口使能Timestamps并选择合适的Prescaler值。

要想在逻辑分析器的窗口中观测到精确的时间值,必须使能Timestamps。

l   添加准备观测的变量到逻辑分析器中

l   在调试过程中观测变量值的变化

当运行RTX系统时,RTX Kernel Event Viewer窗口中显示了任务的切换过程,任务切换信息通过专门的ITM激励端口31来传输。

执行以下步骤来使能RTX Kernel Event Viewer。

l   在Cortex-M Target Driver Setup窗口使能ITM 激励端口31

l   选择Trace Enable,设置正确的Core Clock。

l   核查Timestamps为enabled.

l   在目标调试过程中打开RTX Kernel窗口

选择Peripherals -> RTX Kernel

l   在RTX内核窗口选择Event Viewer标签

在窗口中更新了每个任务转换过程。选择in或者out按钮放大或缩小窗口。点击all按钮可以显示所有事件记录。

mdk5实时调参_使用RealView MDK进行SW调试和实时跟踪STM32相关推荐

  1. jtag keil v11驱动_Keil for ARM/ Realview MDK 中用JTAG调试的方法

    首先说明,在ARM中运行程序的方法其实和我们PC机差不多,程序开始是放在Flash中的,在芯片加电启动后,Flash中的程序会通过内存映射的方式加载到RAM中运行,这一步是由启动代码来完成的(我还没看 ...

  2. RealView MDK 使用

    1.分散加载文件(链接脚本文件)的格式 问题描述: 在链接的时候,要在不同的地址处添加链接文件,暨分散加载文件,这个分散加载文件有什么样的格式呢? 问题解答:         程序正确编译生成目标文件 ...

  3. RealView MDK使用

    作者:蓝色星宇 转自:http://www.cnblogs.com/glguan/archive/2011/05/04/2036138.html 来源:http://hi.baidu.com/hqy5 ...

  4. RealView MDK集成开发环境的使用

    熟悉RealView MDK集成开发环境的使用 一.实验目的 1. 掌握RealView MDK集成开发环境的安装过程: 2. 掌握RealView MDK集成开发环境的使用方法: 3. 掌握创建工程 ...

  5. ADS与RealView MDK

    在 ARM + Linux 培训班学习,讲师一般首先讲解用 ADS 或 RealView MDK 去调试 ARM 开发板.原因在于: 1.掌握 ARM 体系结构.ARM 是一种计算机,掌握其体系结构也 ...

  6. RealView MDK在链接时提示空间不够的解决方案总结

    RealView MDK具有强大的编译.链接功能.嵌入式设备拥有的资源往往有限,如果一个程序编译.链接之后的可执行文件大小略大于存储大小时,则不能生成可执行文件进行调试或固化到Flash中.在这种情况 ...

  7. S3C2440 由ADS移植到 RealView MDK kile4

    RealView MDK在中国推出已经有一段时间了,而且作为未来发展的趋势必将取代ADS1.2,成为工程师广泛应用的开发平台. 但是,以前的S3C2440的项目都是由ADS开发,而且我在网上搜索并没有 ...

  8. ARM指令寻址方式及RealView MDK开发环境ARM汇编程序实践

    内容简介 本文根据作者在CSDN发表的树莓派ARM汇编语言编程十讲(第3讲) (CSDN链接https://blog.csdn.net/yuanzywhu/article/details/104975 ...

  9. 【ARM嵌入式】实验报告一 熟悉RealView MDK集成开发环境的使用

    实验一 熟悉RealView MDK集成开发环境的使用 一.实验目的 1. 掌握RealView MDK集成开发环境的安装过程: 2. 掌握RealView MDK集成开发环境的使用方法: 3. 掌握 ...

最新文章

  1. vscode 搜索结果 整行_如何用VSCode愉快的写Python
  2. Leetcode刷题 155题: 最小栈(基于python3和c++两种语言)
  3. mybaits三:全局配置文件
  4. ubuntu 16.04 apt源使用阿里云镜像
  5. 硬件平台(1)---骁龙710移动平台强势来袭
  6. linux关机方法有哪些?有何区别_茅台酒都有哪些容量?一升装的与一斤装的到底有何区别?...
  7. java获取数据库列的别名_java – JDBC ResultSet获取具有表别名的列
  8. Atiitt 软件设计之道 attilax著 1. 总概念 隶属于软件工程。。 2 2. 需求分析 3 3. 设计分类 3 3.1. 按照力度 总体设计架构设计 概要设计 详细设计 3 3.2.
  9. 使用Java生成PDF文件
  10. MVC架构下,使用NPOI读取.DOCX文档中表格的内容
  11. mousewheel事件
  12. springcloud之gateway的使用
  13. 商务智能大总结4 聚类分析
  14. 分享一个网页截图html代码
  15. 华为HCNA网络工程师【从入门到精通】自学视频[肖哥]-肖宗鹏-专题视频课程
  16. 太阳能电池系统行业调研报告 - 市场现状分析与发展前景预测
  17. Vue 记账凭证模块组件
  18. oralce 经典习题系列-查询
  19. 2011~至今 百度指数采集方法与工具、支持百度指数、资讯指数、媒体指数
  20. 2018美团CodeM 题解

热门文章

  1. c语言课程设计fir滤波器设计,fir滤波器设计c语言
  2. 知客CRM携手湖南省粮油食品进出口集团有限公司
  3. “京东云合伙人”围堵京东:本想年入百万,结果被割了韭菜
  4. ubuntu 20.10 安装 pip3(python3-pip) 出错的解决方案
  5. 明锐更换变速箱油方法
  6. hrbust 1674充电【贪心】
  7. 讲课笔记01:数据分析概述
  8. 浪涌保护器的前端防线:SCB后备保护器
  9. 纯CSS3 实现的新闻联播图标动画
  10. 微信小程序开发 - 修改globalData的值