|
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....”,如下图所示:
现在,点击“New launch configuration”图标,如下所示:
配置窗口显示。填写配置字段,如下图所示:
以下是每个字段的含义: 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文件究竟包含了哪些内容?该文件是一个配置脚本,其中包含以下命令: - # This is an ST NUCLEO F401RE board with a single STM32F401RET6 chip.
- # http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/LN1847/PF260000
- source [find interface/stlink-v2-1.cfg]
- source [find target/stm32f4x_stlink.cfg]
- # use hardware reset, connect under reset
- reset_config srst_only srst_nogate
复制代码第一个source命令表示让OpenOCD加载用于ST-Link接口的配置文件(注意,Nucleo板嵌入的ST-Link编程器的固件版本与独立的ST-Link编程器是不同的)。其他文件中包含确认正确USB接口的指令。 另一个source命令表示让OpenOCD加载描述Nucleo板上的STM32F4微控制器的配置文件。 点击“Apply”,然后点击“Run”。你会在Eclipse的控制台看到这些信息。 - Open On-Chip Debugger 0.8.0 (2014-04-28-08:39)
- Licensed under GNU GPL v2
- For bug reports, read
- http://openocd.sourceforge.net/doc/doxygen/bugs.html
- srst_only separate srst_nogate srst_open_drain connect_deassert_srst
- Info : This adapter doesn't support configurable speed
- Info : STLINK v2 JTAG v23 API v2 SWIM v6 VID 0x0483 PID 0x374B
- Info : using stlink api v2
- Info : Target voltage: 3.245204
- Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints
复制代码此外,LD1发光二极管(靠近mini-USB接口)开始闪烁绿色/红色。这意味着,OpenOCD已经正确建立了与ST-Link调试器的连接。现在,我们需要配置GDB。点解调试配置菜单,然后点击“Debug Configurations...”,如下图所示:
在接下来的窗口,我们需要选择第一个“GDB Hardware Debug”项,然后点击“New launch configuration”图标。
在接下来的窗口,你会看到一系列的选项卡(Main, Debugger, Startup, Source, Common),在“Main”选项卡选择“Enable auto build”。
在“Debugger”选项卡,配置字段,如下图所示:
以下是每个字段的含义: 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:该字段必须设置为localhost和3333。 现在转到“Startup”选项卡,配置每个字段,如下图所示:
点击“Apply”,然后“Debug”。几秒钟后,我们的测试工程将会加载带Nucleo板。执行会自动停止在main()函数。我们成功为Nucleo板配置Eclipse来调试应用程序。我不会详细介绍如何设置断点、做一步一步的调试等等。我假设你熟悉这些调试工具。在本系列的下一篇文章中,我将介绍其他调试相关的工具。 |