转载的感觉很有意义--STM32F4 使用 Keil MDK 逻辑分析仪参与硬件调试的教程

2019-07-20 23:55发布

原作者 :K.O.Carnivist ,原网址:http://www.amobbs.com/thread-5639976-1-1.html
这是一篇 STM32F4 处理器使用 Keil MDK 中的逻辑分析仪参与硬件调试的实验教程,节选自 ARM Keil Application Note 230 的前半部分。
这个功能其实一直就有,但感觉能搜到的资料比较少(倒是做软件仿真的资料比较多),所以在这里分享一下。

原文前半部分还包括断点、观察点等常规调试实验,完整翻译在[这个链接里]缓慢更新,排版可能比这个帖子好一点。
原文废话特多,我翻译着都觉得累。

原文使用的是 STM32F4-Discovery 开发板,我这里都改用 NUCLEO-F401RE 实现了。Discovery 板卡在新版本的 Pack Installer 中已没有 Blinky 例程支持,可以用 CMSIS-RTOS Blinky 来做,变量定义的位置等会有变化。
这篇教程针对 MDK 5.10 及更新版本。MDK 4 有另一篇教程对应。

教程使用C:MDK做为例程目录,并以默认 MDK 安装路径为例:C:Keil_v5。
这个实验可以用评估版本(MDK-Lite)来完成,不需要购买授权。
不需要额外的调试器,只需准备 NUCLEO-F401RE 开发板、USB 线,以及在电脑上安装 MDK 5.10+ 就可以了。

6) μVision Software Pack 的下载和安装步骤

1) 启动 μVision 并打开 Pack Installer

1. 将电脑连接到外网上,下载 Software Pack 需要外网连接。

2. 点击桌面上的图标启动 μVision。

3. 点击工具栏上的按钮 打开 Pack Installer。

4. 这里应该出现下面这个窗口。在 Board 选项卡中,选择 NUCLEO-F401RE,右侧 Packs 选项卡中的列表会自动筛选。


5. 注意:窗口右下角应该显示“ONLINE”。如果显示的是“OFFLINE”,请检查外网连接之后再继续下面的步骤。

6. 如果在 Pack Installer 启动的时候没有连接到外网,列表中将不会显示内容。这时候需要在连接到网络后,点击菜单 Packs/Check for Updates 或者工具栏中 按钮刷新一下。

2) 安装 STM32F4 Software Pack

1. 点击 Packs 选项卡,可以看到 ARM::CMSIS Software Pack 是默认安装好的。

2. 选择 Keil::STM32F4xx_DFP 和 Keil::STM32NUCLEO_BSP 并点击 Install,这两个 Software Pack 会下载并安装在默认文件夹 C:Keil_v5ARMPackKeil 中。下载估计需要两三分钟的时间。

3. 下载完成后,Action 栏应显示“Up to date”状态。

3) 安装 Blinky MDK 例程

1. 选择 Examples 选项卡,出现如下窗口:


2. 选择 Blinky (NUCLEO-F401RE)。

3. 点击右侧的 Copy。

4. Copy Example 窗口如图所示。选择 Use Pack Folder Structure,取消选择 Launch μVision。


5. 输入 C:MDK,点击 OK 完成 Blinky 工程的复制。

6. Blinky 工程已经复制到 C:MDKBoardsSTNUCLEO-F401RE 了。
提示:复制例程时,一开始的默认路径是 C:Users< user >Documents,这篇教程使用 C:MDK 做为默认路径。实际上可以选择任意路径。

7. 关闭 Pack Installer。

7) 测试 ST-Link V2 的连接

1. 用 USB 线将 NUCLEO 开发板连接到电脑上。

2. 如果 ST-Link USB 驱动程序安装正确,应该可以听到正常的 USB 设备连接的系统声音。否则需要手动安装驱动程序。

3. 两个红 {MOD} LED 应该点亮:LD1 (COM)和 LD3(PWR)。

4. 启动 μVision 并选择 Project/Open Project。

5. 选择 Blinky 工程 C:MDKBoardsSTNUCLEO-F401REBlinkyBlinky.uvprojx。

6. 在这个地方选择 STM32F401 Flash:

7. 点击工具栏上 Target Options 按钮 或者按 ALT+F7,并选择 Debug 选项卡:


8. 点击 Settings,会出现下面所示的窗口。如果显示出了 IDCODE 和 Device Name,说明 ST-Link 工作良好,可以继续下面的教程。另外请确认 Download to Flash 是不选中的。点击两次 OK 返回 μVision 主界面。


9. 如果 SW Device 框中没有显示,或者显示 error,这个问题在继续本教程之前必须要解决。请参照完整版原文内容:安装 ST-Link USB 驱动程序。

10. 如果已经显示正常,ST-Link USB 驱动程序安装良好。点击两次 OK 退出 Target Options 窗口并从第9章继续。

提示:在上图 Port 框中选择 JTAG,然后在选回 SW,可以刷新 SW Device 框的显示。也可以关闭再重新打开这个窗口。

9) 使用 NUCLEO 开发板运行 Blinky 例程

我们将使用板载 ST-Link V2 调试器连接 Keil MDK 开发平台和真实的目标硬件。

1. 启动 μVision,用 USB 线将 NUCLEO 开发板的 CN1 连接到电脑上。

2. 选择 Project/Open Project,打开文件 C:MDKBoardsSTNUCLEO-F401REBlinkyBlinky.uvprojx。

3. 点击工具栏上的 Rebuild 按钮 编译源文件。

4. 点击 Download 按钮 对 STM32 的 flash 进行编程。Output 窗口中会显示这个过程。

5. 点击 Debug 按钮 进入 Debug 模式,如果出现 Evaluation Mode 对话框,点击 OK。

6. 点击 RUN 图标 。注意:点击 STOP 图标 可以停止程序运行。

NUCLEO 开发板上的绿 {MOD} LED 会开始闪烁。
按下开发板上蓝 {MOD}的 USER 按键会暂停闪烁。

12) Watch 窗口及其使用方法

Watch 和 Memory 窗口实时显示变量的值,这是通过 ARM CoreSight 调试技术实现的,这项技术是包含在 Cortex-M 处理器中的一部分。同时,也可以在这些存储器地址上实时地“put”或插入数值。这两个窗口都可以通过拖拽变量名,或者手动输入来添加变量。
添加全局变量: 除非程序停止在局部变量所在的函数,否则 Watch 和 Memory 窗口不能观察局部变量。

1. 停止运行处理器 并退出 Debug 模式 。

2. 在 Blinky.c 的第24行左右,**一个全局变量(这里变量名叫做 value):unsigned int value = 0;。

3. 在第104行左右添加语句 value++; 和 if (value > 0x10) value = 0;,如图:


4. 选择菜单 File/Save All

5. 点击 Rebuild ,点击 Download 下载到 flash。

6. 进入 Debug 模式 ,点击 RUN 。

7. 在 Blinky.c 中,右键点击变量 value 并选择 Add value to … 及 Watch 1,Watch 1 窗口会打开并显示 value 如下图。

8. value会实时增加到0x10。


提示: 请确认菜单 View/Periodic Window Update 在选中状态。

9. 也可以在 Name 下面区域双击或按 F2,再手动输入或复制粘贴变量名。或是打开菜单 View/Symbols Window 来输入变量。

14) 使用 Logic Analyzer 图形化观察变量

这一章将在 Logic Analyzer 中显示全局变量的值。这个功能使用 Serial Wire Viewer,因此不会窃取 CPU 周期用户代码中也不需要加入任何代码片段

配置 Serial Wire Viewer (SWV):

1. 停止运行处理器 并退出 Debug 模式 。

2. 点击工具栏上的 Target Options 或者按 ALT+F7,并选择 Debug 选项卡,点击窗口右侧的 Settings,确认选择的是 SW 模式。

3. 选择 Trace 选项卡,选择 Trace Enable,取消选择 Periodic 和 EXCTRC,设置 Core Clock 为 48 MHz。其他选项如图所示。
译者注:CPU 时钟频率很重要,请务必按照实际值设置。Blinky 工程的时钟频率在 Abstract.txt 中可以找到。如果使用的是其他板卡,请自行检查时钟频率。

4. 点击 OK 返回 Target Options。

5. 再次点击 OK 返回主界面。


配置 Logic Analyzer:

1. 进入 Debug 模式 。打开菜单 View/Analysis Windows 并选择 Logic Analyzer,或者选择工具栏上的 LA 按钮

2. 点击 Blinky.c 选项卡,右键点击 value 变量并选择 Add value to… 及 Logic Analyzer。也可以手动拖拽来添加。

3. 点击 LA 左上角的 Setup… 按钮进入 LA 设置窗口。

4. 选择 value,设置 Display Range Max 为 0x15。

5. 点击 Close。


运行程序:

1. 点击 RUN 。点击 Zoom Out 使图形中网格大小是5秒左右。

2. 变量 value 的值将增加到 0x10(十进制16)再重新设为 0。

提示: 如果没有看到波形,请退出并重新进入 Debug 模式以刷新 LA。可能还需要重新上电 NUCLEO 板卡。另请确认 Core Clock 的数值正确。
提示: Logic Analyzer 中最多可以显示4个变量,必须是全局变量、静态变量或原始地址如 *((unsigned long*)0x20000000)。

3. 请注意当 USER 按钮按下时,变量的值会随之停止增加。当然也请注意这个现象的观察是如此直观。

4. 选择 Signal Info、Show Cycles、Amplitude 及 Cursor,观察 LA 的测量功能。点击 Update Screen 栏的 Stop 按钮可以停止 LA。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
2013的弹子球
1楼-- · 2019-07-21 05:49
 精彩回答 2  元偷偷看……
jermy_z
2楼-- · 2019-07-21 05:56
2013的弹子球 发表于 2015-12-28 12:49
硬件波形仿真啊很有用~~

直接用JTAG看更方便。。。。
2013的弹子球
3楼-- · 2019-07-21 07:08
jermy_z 发表于 2015-12-28 13:21
直接用JTAG看更方便。。。。

原来直接也行么~~我以为打开swd仿真了,波形仿真那里就打不开了呢~~·
LTY
4楼-- · 2019-07-21 10:36
2013的弹子球 发表于 2015-12-28 21:57
原来直接也行么~~我以为打开swd仿真了,波形仿真那里就打不开了呢~~·

JTAG模式不能实现trace功能吧!应该是不能调用逻辑分析仪的

一周热门 更多>