|
我们来回顾一下在本系列的前两篇文章中做的事情。在第一篇文章中,我们配置了Eclipse和GCC用来在ARM Cortex平台建立应用程序。我们使用GNU ARM Eclipse插件为STM32 Nucleo板生成一个最小化但能工作的例程(简单的LED闪烁应用)。然后,我们使用ST的CubeMX工具为Nucleo板生成了正确的初始化代码。最后,我们使用ST-Link Utility将生成的二进制代码文件上载到目标MCU。在第二篇文章中,我们更深入的探讨了调试主题。我们配置了OpenOCD和GDB,允许我们的应用程序可以在Nucleo板上一步一步的执行。
在这篇文章中,我们将看到更多的调试工具,它们在调试固件过程中会非常有用。首先,我们将安装Eclipse插件,允许我们查看内部的MCU寄存器。然后,我们将看到如何配置ARM半主机,其属于ARM CMSIS框架的一项功能,允许将来自目标MCU的信息打印输出到OpenOCD的控制台。
安装EmbSysRegView
当我们进行在线调试目标MCU的固件时,检查MCU寄存器是非常有用的,特别是如果我们使用集成的外设如UART、SPI、CAN等等。像STM32F4之类的高级微控制器有非常多的内部寄存器。它们有不同的配置信息。例如,物理PIN可以有几个通过使用专用寄存器的不同设置启用的逻辑函数。EMBedded SYStems REGister VIEW(以下简称EmbSysRegView)是一个非常好的Eclipse插件,允许访问ARM Cortex MCU的内部的存储器映射寄存器。按照以下步骤安装插件。
转到Help->Eclipse Marketplace...,然后在Find文本框输入EmbSysRegView。当插件显示时,点击“Install”。
在下个页面,勾选所有的选项,然后点击“Confirm”。
在下个页面,接受许可,然后点击“Finish”。Eclipse将在一段时间后完成安装。重新启动IDE。 现在我们需要为目标MCU配置EmbSysRegView(我的NUCLEO板的MCU是STM32F401RE)。转到Window-> Preferences,然后转到C/C++->Debug->EmbSys Register View并且选择你的控制器,如下图所示。
接下来,调试我们的test1工程(在第一篇文章中我们创建的测试项目)。为显示EmbSysRegView控制台,转到Window->Show View->Other.... ,在选择对话框,转到Debug,然后选择EmbSys Registers。单击“OK”。
EmbSysRegView控制台显示在底部区域,如下所示。
EmbSysRegView插件是非常直观的。然我们来看一个例子。打开BlinkLed.c文件,并在第23行插入一个断点,该断点位于blink_led_init()函数里面,在函数中对PortA端口进行了配置使得第5引脚作为输出端口(Nucleo板的LED LD2连接到该引脚)。
点击Eclipse工具栏的运行图标。当执行自动停止在该条指令时,打开EmbSysRegView控制台,然后选择GPIO->GPIOA项。默认晴空下,查看寄存器功能是禁用的(可以通过看图标来辨别 - 当查看禁用时,图标是灰色的,否则是绿色的)。
在靠近寄存器名字的图标上双击。图标转成绿色。
现在,我们来单击StepOver图标,运行第23行的指令。EmbSysRegView将会显示MODER5寄存器已经改变了状态。
如果你点击一个寄存器,也可以改变它的值。例如。我们将MODER5寄存器从0x01恢复到0x00,LED LD2停止闪烁,因为该引脚现在配置成了输入引脚。只有当固件暂停执行时才能更改寄存器的值。 |