ARM-GCC环境搭建:适用STM32/GD32的编译调试总结

本文重点参考了一位博主的文章,他的文章写的也是十分详细,推荐阅读。

Win10配置 STM32/GD32 单片机 GCC+VScode 编译调试总结 2021版_秋阳 Cody的博客-CSDN博客_gd32 vscode

部分工程源码及安装包放在文章末尾,那么我们进入正题:

一、本次环境搭建所用的软硬件

1)Win10系统

2)JLink、STLink烧录器

3)GNU Arm Embedded Toolchain交叉编译器

4)Mingw-w64 GCC for Windows 64 & 32 bits

5)Debug 调试工具 openocd 0.10.0

6)Visual Studio Code

7)STM32CubeMX

二、软件的安装

1.安装ARM-GCC交叉编译器

进入arm开发者官网,往下滑动选择下载解压可用的ZIP压缩包文件

下载链接: Downloads | GNU Arm Embedded Toolchain Downloads – Arm Developer

  笔者建议在你要安装ARM-GCC套件的磁盘中建一个名为“ARM-GCC”的文件夹,将后续所用到的所有软件都放入其中,便于查找。将下载好的压缩包文件解压在“ARM-GCC”文件夹中,并记住文件内“bin”文件的路径,后续需添加到系统环境变量Path中。

2.安装Mingw-w64 GCC

 点击链接进入到SourceForge官网,往下翻可以找到很多版本的下载链接,选择红色框内型号即可,不同前后缀的具体差异请参考:

MinGW gcc下载链接及sjlj、dwarf、seh异同以及gcc安装_AMDDMA的博客-CSDN博客_seh和sjlj

下载链接:

MinGW-w64 – for 32 and 64 bit Windows – Browse Files at SourceForge.net

 同样,将下载好的文件解压到“ARM-GCC”文件夹下,记住目录下的“bin”文件路径

进入“bin”文件内找到“mingw32-make”应用程序文件,复制一份并重命名为“make”。这么做有利于在命令行执行make指令,而不是输入mingw32-make。

 3.安装vscode

进入VScode官网点击右上角的Download,选择下载Windows版本的即可。

下载链接:Visual Studio Code – Code Editing. Redefined

 4.安装调试软件openocd 0.10.0

有了以上三个软件的支持,已经可以在VScode中编译并生成bin文件和hex文件了,但众所周知,程序员最大的工作是Debug,那就免不了需要一款调试软件了。

在本文中Debug用的硬件有STLink、JLink,当然其他硬件例如CMSIS-DAP也是可以的。

openocd官网下载链接:http://openocd.org

笔者推荐链接:sysprogs公司网站上(是卖一个叫做VisualGDB软件的 )提供的win系统编译版本,版本新,下载速度比较快
https://sysprogs.com/getfile/1364/openocd-20201228.7z

同样将下载好的压缩包解压至“ARM-GCC”,记住文件内“bin”文件的路径。

三、添加环境变量Path路径

 依次打开“此电脑”,右击选择“属性”,在左侧找到“高级系统设置”,

 分别添加上文提到的三个“bin”文件路径:

1)执行make指令的mingw32的bin文件路径

2)执行交叉编译的GNU-ARM的bin文件路径

3)执行openocd调试程序的bin文件路径

添加完成后,打开cmd命令行或者进入到vscode,在下面的终端输入查询工具版本的指令

1)make -v,查询make的版本

2)arm-none-eabi-gcc -v,查询交叉编译器的版本

3)openocd -v,查询openocd的版本

正常情况下,命令行会返回各软件的版本,如下图

 若提示“不是内部或外部命令,也不是可运行的程序或批处理文件” , 说明环境变量不正确,需要重新检查Path环境变量的添加是否正确。

在vscode内,按快捷键“Ctrl+~”,调出power shell终端,输入make -v指令,效果同上。

四、STM32工程编译与调试

1.安装 STM32CubeMX,生成工程模板

使用STM32CubeMX的原因是,该工具能生成带makefile文件的工程,且配置完整,能够直接将工程文件使用vscode打开,进行编译。下载地址:

STM32CubeMX – STM32Cube初始化代码生成器 – STMicroelectronics

选择下载windows版本,安装路径无要求。

2.生成STM32带makefile文件的工程

打开STM32CubeMX,点击ACCESS TO MCU SELECTOR,输入需要的芯片型号,会自动下载相关数据包

 选择好芯片后,直接跳到Project Manager按图中设置,最重要的是第③点,选择编译链生成makefile的工程

3.程序编译

工程生成后,将工程文件夹拖入vscode,STM32CubeMX提供了很完整的工程模板,配置好了诸多例如:启动.s文件、链接脚本.ld文件、makefile文件。接着按住Ctrl+~键,调出命令框,输入make -j进行编译。如图编译成功,生成了hex文件和bin文件

 4.程序烧录

笔者使用了两种方法烧录程序

方法一:使用Jlink OB/V8/V9 使用J-flash下载Bin文件。

方法二:使用OpenOCD, 硬件使用CMSIS-DAP/STLink v2。

以STLink为例,命令行执行:

openocd -f stlink-v2.cfg -f stm32f1x.cfg -c init -c "reset halt; wait_halt; flash write_image erase build/TEST.bin 0x8000000" -c reset -c shutdown

在“ARM-GCC”文件夹下找到你安装的openocd目录,找到stlink-v2.cfg和stm32f1x.cfg两个配置文件复制到你的工程文件内

打开makefile文件,找到clean指令,原指令适用linux系统,windows系统下我们改为-del /q $(BUILD_DIR),并添加flash烧录指令

-openocd -f stlink-v2.cfg -f stm32f1x.cfg -c init -c "reset halt; wait_halt; flash write_image erase build/TEST.bin 0x8000000" -c reset -c shutdown

这样我们在命令行输入make flash即可实现烧录工作。

 5.Debug调试

 在调试前,我们需要下载两个扩展工具,

1)Cortex-Debug

2)  c/c++

 在Debug下创建一个.json文件

 点击右下角的Add Configuration,增加openocd Debug

修改下图第一个红色方框内.elf文件的位置,在第二个红色方框内增加两个配置文件的名称

 点击开始Debug,出现调试窗口后即可进行单步调试。

五、GD32工程编译与调试

1.工程文件的准备

要想使用GCC+vscode实现GD32的编译和调试必须准备三个文件:

makefile文件、.s启动文件、.ld链接脚本文件(见文章末尾)

这三个文件可以通过自己修改上述STM32提供的标准模板,也可以自己找渠道向GD官方人员获取或者自己写一个。笔者暂时也只是略懂皮毛,后续深入研究后在发表文章。

那么笔者在这也是通过修改STM32的标准模板进行试验的。

2.程序编译与烧录

与STM32编译相同,按住Ctlr+~键调出终端,输入make -j实现编译

 生成bin文件后,硬件使用Jlink烧录器,通过JFlash将bin文件烧录到芯片中。本次使用的是J-Link V6.40版本

软件及驱动链接:SEGGER – The Embedded Experts – Downloads – J-Link / J-Trace

安装后找到JFlash双击打开,按下图设置,选择合适的芯片型号。

 找到刚才vscode编译成功后生成的bin文件,将其拖入到新建的JFlash工程中,然后点击上方Target选项,选择第①项connect,然后选择第②项烧录到芯片。 注意芯片重启后生效。

3.Debug调试

首先添加JLinkGDBServer.exe的路径到环境变量中,路径为你安装JFlash的位置

 调用JLinkGDBServer的命令行指令是

JLinkGDBServer  -device GD32F303CG -if SWD -speed 500

为了便于操作,我们在makefile文件中增加一条命令,在vscode命令行输入make gdb即可调出JLinkGDBServer

在vscode下输入此指令即可调出如下窗口

 随后创建一个.json文件,选择C++(GDB)类型

 点击右下角添加C/C++:(gdb)启动

 创建后做三处修改:

1)"program",填入工程编译生成的.elf文件的路径,注意在windows环境中,路径需使用 /或者 \\

2)"miDebuggerPath",填入gcc路径下得gdb.exe文件,如本文中E:\ARM-GCC\gcc-arm-none-eabi-10.3-2021.10\bin\arm-none-eabi-gdb.exe,路径符号需更改

3)添加GDB的tcp连接端口,使用本地端口localhost

"miDebuggerServerAddress": "localhost:2331"

 到此所有准备工作都完成了,输入JLinkGDBServer  -device GD32F303CG -if SWD -speed 500调出JLinkGDBServer,然后点击Debug即可开始调试

 到此处以及初步实现了STM32/GD32的编译与调试了,但还存在一些小问题,例如调试添加变量到WATCH窗口时,变量的值是无法看到的,网上说修改优化等级,添加修饰词都没用,如果是你有问题或者是你有答案,欢迎评论留言。

STM32/GD32工程模板链接 

链接:https://pan.baidu.com/s/1yMY4azU32qC4LhWffcbTog?pwd=hf5m

物联沃分享整理
物联沃-IOTWORD物联网 » ARM-GCC环境搭建:适用STM32/GD32的编译调试总结

发表评论