|
本篇文章主要介绍了如何使用Visual Studio和VisualGDB开发STM8元件项目。我们将展示如何创建一个基本的闪烁LED项目,使用Visual Studio构建和调试。
STM8元件不受主流GCC编译器的支持,因此VisualGDB通过与Cosmic CXSTM8编译器集成来支持STM8元件。您可以在此页面上下载CXSTM8的免费版本。
另一种选择是使用开源SDCC编译器,但它与STM8 StdPeriph库不兼容,原因是: ◾ 不支持将函数放入单独的部分。构建库而不手动注释掉未使用的函数会溢出FLASH。 ◾ 不支持将函数放入RAM。STM8 FLASH驱动程序不起作用。 因此,STM8设备的VisualGDB支持依赖于Cosmic CXSTM8编译器。确保在继续本文之前安装它。安装CXSTM8后,请按照以下步骤创建、构建和调试基本项目:
1. 启动Visual Studio,然后找到VisualGDB Embedded Project Wizard:
2. 输入项目的名称和所在位置:
3. 选择“创建新项目 -> 嵌入式应用程序 -> MSBuild”。请注意,CXSTM8编译器与GCC有很大不同,因此基于GNU Make和CMake的项目不支持它:
4. 如果你已经安装了CXSTM8编译器,VisualGDB会自动定位并显示在工具链列表中。如果没有,您可以使用下拉列表底部的链接手动找到它:
5. 选择编译器后,选择您想要定位的元件型号。在本文中,我们将选择STM8VLDISCOVERY开发板中使用的STM8003K3元件:
如果您之前没有创建过基于STM8的项目,请单击“安装”按钮以自动下载STM8 BSP。VisualGDB将自动下载包含所有支持设备的StdPeriph库的 BSP,以及来自ST的SDK的示例项目。 6. 下载BSP后,从列表中选择您的元件,然后单击“下一步”:
7. 测试STM8元件的最简单方法是选择“Blink”示例并手动指定LED端口,如下所示:
8. 或者,您可以从STM8 SDK克隆其中一个示例,但它们可能无法与所有设备兼容:
9. 将你的开发板连接到USB端口,让VisualGDB检测调试设置。单击“测试”以验证与设备的连接:
10. 请注意,STM8元件使用单独的OpenOCD包(使用相同的二进制文件,但脚本和USB驱动程序不同)。如果您遇到奇怪的错误,请确保您使用的是“com.sysprogs.stm8.openocd”包:
11. 按“完成”完成向导。VisualGDB将生成一个包含基本LED闪烁代码、STM8矢量文件和STM8 StdPeriph库的项目:
12. 按Ctrl-Shift-B构建项目:
13. 按F5开始调试项目。如果您选择了正确的LED端口,板载LED将开始闪烁:
14. 在调用GPIO_WriteReverse()时设置断点。它几乎会立即触发:
15. 您可以像往常一样评估变量并逐步执行代码。但是,由于CXSTM8编译器保存寄存器的方式,函数的回溯和单步执行/退出可能不起作用(GDB 将显示“Register 4 was not saved”错误):
您可以使用常规的VS属性GUI来编辑特定于CXSTM8编译器的设置。VisualGDB将自动显示它们而不是常规的GCC特定属性:
VisualGDB使用的gdb的STM8端口与Cosmic CXSTM8编译器生成的二进制文件配合得相当好,除了单步调试(step over)。我们已经修补了stm8 gdb以从堆栈展开错误中恢复(请参阅 VisualGDB 目录中的 stm8-gdb.patch 文件),因此尝试跨过受影响的函数将导致跨入它们。作为一种快速的解决方法,请考虑在函数调用后立即设置一个临时断点,然后恢复程序。要使展开正常工作,需要进一步修补gdb以通过解析函数序言来重建前一帧位置。如果您的公司正在使用stm8 gdb并且有兴趣进一步改进它,请随时与我们联系以讨论可能的选择。 |