本文重点参考了一位博主的文章,他的文章写的也是十分详细,推荐阅读。
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
进入arm开发者官网,往下滑动选择下载解压可用的ZIP压缩包文件
下载链接: Downloads | GNU Arm Embedded Toolchain Downloads – Arm Developer
笔者建议在你要安装ARM-GCC套件的磁盘中建一个名为“ARM-GCC”的文件夹,将后续所用到的所有软件都放入其中,便于查找。将下载好的压缩包文件解压在“ARM-GCC”文件夹中,并记住文件内“bin”文件的路径,后续需添加到系统环境变量Path中。
点击链接进入到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。
进入VScode官网点击右上角的Download,选择下载Windows版本的即可。
下载链接:Visual Studio Code - Code Editing. Redefined
有了以上三个软件的支持,已经可以在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”文件的路径。
依次打开“此电脑”,右击选择“属性”,在左侧找到“高级系统设置”,
分别添加上文提到的三个“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指令,效果同上。
使用STM32CubeMX的原因是,该工具能生成带makefile文件的工程,且配置完整,能够直接将工程文件使用vscode打开,进行编译。下载地址:
STM32CubeMX - STM32Cube初始化代码生成器 - STMicroelectronics
选择下载windows版本,安装路径无要求。
打开STM32CubeMX,点击ACCESS TO MCU SELECTOR,输入需要的芯片型号,会自动下载相关数据包
选择好芯片后,直接跳到Project Manager按图中设置,最重要的是第③点,选择编译链生成makefile的工程
工程生成后,将工程文件夹拖入vscode,STM32CubeMX提供了很完整的工程模板,配置好了诸多例如:启动.s文件、链接脚本.ld文件、makefile文件。接着按住Ctrl+~键,调出命令框,输入make -j进行编译。如图编译成功,生成了hex文件和bin文件
笔者使用了两种方法烧录程序
方法一:使用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即可实现烧录工作。
在调试前,我们需要下载两个扩展工具,
1)Cortex-Debug
2) c/c++
在Debug下创建一个.json文件
点击右下角的Add Configuration,增加openocd Debug
修改下图第一个红色方框内.elf文件的位置,在第二个红色方框内增加两个配置文件的名称
点击开始Debug,出现调试窗口后即可进行单步调试。
要想使用GCC+vscode实现GD32的编译和调试必须准备三个文件:
makefile文件、.s启动文件、.ld链接脚本文件(见文章末尾)
这三个文件可以通过自己修改上述STM32提供的标准模板,也可以自己找渠道向GD官方人员获取或者自己写一个。笔者暂时也只是略懂皮毛,后续深入研究后在发表文章。
那么笔者在这也是通过修改STM32的标准模板进行试验的。
与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,然后选择第②项烧录到芯片。 注意芯片重启后生效。
首先添加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