天南地北客
发表于: 2015-11-12 09:28:44 | 显示全部楼层

stm32nucelo-gcc-eclipse-toolchain.jpg


在本系列教程的第一部分,我们已经成功建立了一个最小化但是能工作的开发STM32系列应用程序的工具链(尤其关注STM32 Nucleo开发板)。我们基于Eclipse IDE和ARM Crotex平台的GCC交叉编译器建立了工具链。我们还创建了一个测试工程(一个简单的LED闪烁程序),然后使用ST Link Utlity上载到Nucleo板。

这种方法有可能足以开发任何类型的基于STM32系列的应用程序。使用Nucleo集成的虚拟串口,我们可以打印信息进行调试固件(这是调试Arduino sketches的常用方法)。但是,我们可以只使用一些其他的工具在Nucleo板进行在线调试、放置断点、单步调试以及访问内部的寄存器和存储器。

在这篇文章中,我们将重点介绍如何使用GDB进行一步步的调试。我们将配置Nucleo成另一种工具的客户端:OpenOCD,它可以通过ST-Link接口连接Nucleo板。


安装OpenOCD

OpenOCD是由Dominic Rath发起的真正具有挑战性的项目。OpenOCD的目标是开发出一种能够接入市场上大多数常见MCU平台的通用片上调试器。OpenOCD是设计用来连接ARM Cortex-M处理器并且提供驱动程序连接到ST-Link调试接口。OpenOCD是开发源码的软件。Freddie Chopin已经创建了Windows平台下该工具的预编译版本。

在开始安装OpenOCD之前,我想谈几句关于OpenOCD是如何工作的,特别是当它被用来做调试STM32微控制器。我认为,了解调试过程是如何工作的,哪怕是一部分,也是非常有助于更好地理解如何定制调试环境。

OpenOCDarchitettura.jpg

我们通常需要外接一个叫做编程器的硬件(有时也叫做加密狗、片上编程器等)用来编程MCU(最终进行调试)。每个MCU的厂商针对特定的MCU系列生产至少一种类型的编程器。ST为STM32平台提供了一系列的编程器,叫做ST-Link。Nucleo板已经集成了ST-Link编程器(并且他可以从主板上拆卸下来,然后用作独立的编程器)。所以我们不需要任何外部的硬件工具来编程Nucleo的MCU。



跳转到指定楼层
天南地北客
发表于: 2015-11-13 09:22:08 | 显示全部楼层

OpenOCD有连接ST-Link编程器接口所需的全部驱动程序,并且通过使用一些脚本文件进行配置。这些文件包含指导OpenOCD使用USB接口连接到Nucleo板的USB口和使OpenOCD在3333 TCP端口上进入服务器模式的命令。GDB将使用此端口来和OpenOCD交换命令。此外,OpenOCD使用另一个TCP端口4444通过Telnet会话接收用户的命令。由于这些连接,OpenOCD可以按照指示来上载固件到目标MCU、设置断点、检查存储器状态等等。而且,该工作可以通过使用在本系列的第一部分安装的Eclipse和插件实现自动化以及变得更加简单。

我们来开始安装OpenOCD。首先我们需要从这里下载OpenOCD for Windows的最新版本。建议使用至少0.8或者更高版本,因为通过OpenOCD使用Nucleo我遇到了几个问题。下载文件是一个使用7-zip utility压缩的ZIP压缩包。解压压缩包的文件到C:\STM32Toolchain文件夹。接下来,将OpenOCD的目录由openocd-0.8重新命名为简单的openocd。然后进入C:\STM32Toolchain\openocd\bin文件夹,将openocd-0.8.0.exe文件重新命名为openocd.exe。


设置Eclipse

OpenOCD安装完成后,我们需要正确配置Eclipse IDE使其能够跟GDB和OpenOCD一起正常工作。有两种方法配置Eclipse和OpenOCD:

方法1:第一种方法是涉及配置Eclipse,这样在每次调试会话中它会自动先启动OpenOCD然后再启动GDB。

方法2:第二种方法是涉及配置启动一次的OpenOCD作为外部工具,然后配置GDB通过3333 TCP端口连接到OpenOCD。

在本系列教程的第一部分安装的插件允许我们使用这两种配置配置方法。但是,我在使用第一种方法时遇到一些问题。不幸的是,经常会出现当重复启动/停止OpenOCD时,它会无法连接到St-Link调试器。解决该问题的唯一方法是从USB端口拔出Nucleo板,然后重新连接。我到处查阅发现该问题与ST提供的驱动程序有关。但是,很奇怪为什么使用ST-Link Utility该问题并不会发生。我认为该问题可能和OpenOCD与ST-Link如何相互作用有关。所以,最好的方法是启动一次OpenOCD,然后通过3333 TCP端口使用GDB连接到OpenOCD。

在本篇文章的剩余部分,我假设你已经打开并编译了在第一篇文章中创建的test1工程。点击“External tools”配置图标,然后点击“External Tools Configurations....”,如下图所示:

Schermata-2014-12-25-alle-10.13.41.png

现在,点击“New launch configuration”图标,如下所示:

2014-12-25-10_22_40-External-Tools-Configurations.jpg

配置窗口显示。填写配置字段,如下图所示:

2014-12-25-10_39_45-External-Tools-Configurations.png

以下是每个字段的含义:

Location:安装OpenOCD的绝对路径,即C:\STM32Toolchain\openocd\bin\openocd.exe

Working Directory:OpenOCD处理工程中的工作目录(也就是UNIX操作系统的cwd)。该路径用作OpenOCD的脚本和配置文件的基础路径。

Arguments:是传递到OpenOCD命令行的参数。在我们的例子中,需要Nucleo板传递配置脚本(我用的是STM32Nucleo-F401RE板,如果你用的是不同的Nucleo板,检查C:\STM32Toolchain\openocd\scripts\board目录,使用正确的配置文件)。


st_nucleo_f401re.cfg文件究竟包含了哪些内容?该文件是一个配置脚本,其中包含以下命令:

  1. # This is an ST NUCLEO F401RE board with a single STM32F401RET6 chip.
  2. # http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/LN1847/PF260000

  3. source [find interface/stlink-v2-1.cfg]

  4. source [find target/stm32f4x_stlink.cfg]

  5. # use hardware reset, connect under reset
  6. reset_config srst_only srst_nogate
复制代码

第一个source命令表示让OpenOCD加载用于ST-Link接口的配置文件(注意,Nucleo板嵌入的ST-Link编程器的固件版本与独立的ST-Link编程器是不同的)。其他文件中包含确认正确USB接口的指令。

另一个source命令表示让OpenOCD加载描述Nucleo板上的STM32F4微控制器的配置文件。

点击“Apply”,然后点击“Run”。你会在Eclipse的控制台看到这些信息。

  1. Open On-Chip Debugger 0.8.0 (2014-04-28-08:39)
  2. Licensed under GNU GPL v2
  3. For bug reports, read
  4.         http://openocd.sourceforge.net/doc/doxygen/bugs.html
  5. srst_only separate srst_nogate srst_open_drain connect_deassert_srst
  6. Info : This adapter doesn't support configurable speed
  7. Info : STLINK v2 JTAG v23 API v2 SWIM v6 VID 0x0483 PID 0x374B
  8. Info : using stlink api v2
  9. Info : Target voltage: 3.245204
  10. Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints
复制代码

此外,LD1发光二极管(靠近mini-USB接口)开始闪烁绿色/红色。这意味着,OpenOCD已经正确建立了与ST-Link调试器的连接。现在,我们需要配置GDB。点解调试配置菜单,然后点击“Debug Configurations...”,如下图所示:

2014-12-25-10_55_36-Debug-test1_src_main.c-Eclipse.png

在接下来的窗口,我们需要选择第一个“GDB Hardware Debug”项,然后点击“New launch configuration”图标。

2014-12-25-10_55_06-Debug-Configurations.png

在接下来的窗口,你会看到一系列的选项卡(Main, Debugger, Startup, Source, Common),在“Main”选项卡选择“Enable auto build”。

2014-12-25-10_58_25-Debug-Configurations.png

在“Debugger”选项卡,配置字段,如下图所示:

2014-12-25-10_53_39-Debug-Configurations.png

以下是每个字段的含义:

GDB Command:GDB安装的路径。在本例中为C:\STM32Toolchain\gnu-arm\4.8-2014q3\bin\arm-none-eabi-gdb.exe

JTAG Device:是我们使用的编程器型号,选择“GNU ARM OpenOCD”。

Host name e Port number:该字段必须设置为localhost3333

现在转到“Startup”选项卡,配置每个字段,如下图所示:

2014-12-25-10_54_02-Debug-Configurations.png

点击“Apply”,然后“Debug”。几秒钟后,我们的测试工程将会加载带Nucleo板。执行会自动停止在main()函数。我们成功为Nucleo板配置Eclipse来调试应用程序。我不会详细介绍如何设置断点、做一步一步的调试等等。我假设你熟悉这些调试工具。在本系列的下一篇文章中,我将介绍其他调试相关的工具。

回复

使用道具 举报

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

本版积分规则

主题 37 | 回复: 55



手机版|

GMT+8, 2024-4-19 10:22 , Processed in 0.142324 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

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