woshi_ziyu
发表于: 2022-9-2 11:09:41 | 显示全部楼层

本篇文章主要介绍了如何使用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:

01-newprj-2.png

2.  输入项目的名称和所在位置:

02-name-1.png

3.  选择“创建新项目 -> 嵌入式应用程序 -> MSBuild”。请注意,CXSTM8编译器与GCC有很大不同,因此基于GNU Make和CMake的项目不支持它:

03-app.png

4.  如果你已经安装了CXSTM8编译器,VisualGDB会自动定位并显示在工具链列表中。如果没有,您可以使用下拉列表底部的链接手动找到它:

04-toolchain-1.png

5.  选择编译器后,选择您想要定位的元件型号。在本文中,我们将选择STM8VLDISCOVERY开发板中使用的STM8003K3元件:

05-getbsp.png

如果您之前没有创建过基于STM8的项目,请单击“安装”按钮以自动下载STM8 BSP。VisualGDB将自动下载包含所有支持设备的StdPeriph库的 BSP,以及来自ST的SDK的示例项目。

6.  下载BSP后,从列表中选择您的元件,然后单击“下一步”:

06-config.png

7.  测试STM8元件的最简单方法是选择“Blink”示例并手动指定LED端口,如下所示:

07-port.png

8.  或者,您可以从STM8 SDK克隆其中一个示例,但它们可能无法与所有设备兼容:

vendorsamples.png

9.  将你的开发板连接到USB端口,让VisualGDB检测调试设置。单击“测试”以验证与设备的连接:

08-debug.png

10.  请注意,STM8元件使用单独的OpenOCD包(使用相同的二进制文件,但脚本和USB驱动程序不同)。如果您遇到奇怪的错误,请确保您使用的是“com.sysprogs.stm8.openocd”包:

09-tested-1.png

11.  按“完成”完成向导。VisualGDB将生成一个包含基本LED闪烁代码、STM8矢量文件和STM8 StdPeriph库的项目:

10-created.png

12.  按Ctrl-Shift-B构建项目:

11-built.png

13.  按F5开始调试项目。如果您选择了正确的LED端口,板载LED将开始闪烁:

12-debug.png

14.  在调用GPIO_WriteReverse()时设置断点。它几乎会立即触发:

13-bkpt.png

15.  您可以像往常一样评估变量并逐步执行代码。但是,由于CXSTM8编译器保存寄存器的方式,函数的回溯和单步执行/退出可能不起作用(GDB 将显示“Register 4 was not saved”错误):

14-reg4.png

您可以使用常规的VS属性GUI来编辑特定于CXSTM8编译器的设置。VisualGDB将自动显示它们而不是常规的GCC特定属性:

15-settings.png

VisualGDB使用的gdb的STM8端口与Cosmic CXSTM8编译器生成的二进制文件配合得相当好,除了单步调试(step over)。我们已经修补了stm8 gdb以从堆栈展开错误中恢复(请参阅 VisualGDB 目录中的 stm8-gdb.patch 文件),因此尝试跨过受影响的函数将导致跨入它们。作为一种快速的解决方法,请考虑在函数调用后立即设置一个临时断点,然后恢复程序。要使展开正常工作,需要进一步修补gdb以通过解析函数序言来重建前一帧位置。如果您的公司正在使用stm8 gdb并且有兴趣进一步改进它,请随时与我们联系以讨论可能的选择。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 12 | 回复: 16



手机版|

GMT+8, 2024-12-21 22:06 , Processed in 0.071018 second(s), 9 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

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

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