本文重点参考了一位博主的文章,他的文章写的也是十分详细,推荐阅读。
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
我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,
我试图在rails中了解rubygems是如何变得可以自动使用的,而不是在使用required的文件中gem? 最佳答案 这是通过bundler/setup完成的:http://bundler.io/v1.3/bundler_setup.html.它在您的config/boot.rb文件中是必需的。简而言之,它首先将环境变量设置为指向您的Gemfile:ENV['BUNDLE_GEMFILE']||=File.expand_path('../../Gemfile',__FILE__)然后它通过要求bundler/setup将所有ge
从一开始,我就是一个Windows高手。我从MS-DOS开始。我安装了Windows2.1以及此后的所有Windows。现在,我家里有10台不同的Windows机器在运行,从Windows7Ultimate到各种版本的WindowsServer。我还没有完成Windows8,也不想去那里。我在服务器和各种软件方面都有UNIX经验,但它并不是我的首选环境。但是,我想我正在转换。我试图假装使用Cygwin和MSYS在Windows下运行UNIX。我的目的是搭建一个开发环境。两者都让我失望了。我花了比开发更多的时间来解决一系列技术问题。这是NotAcceptable。到目前为止,我的Ruby
如果特定语言环境中缺少翻译,如何配置i18n以使用en语言环境翻译?当前已插入翻译缺失消息。我正在使用RoR3.1。 最佳答案 找到相似的question这里是答案:#application.rb#railswillfallbacktoconfig.i18n.default_localetranslationconfig.i18n.fallbacks=true#railswillfallbacktoen,nomatterwhatissetasconfig.i18n.default_localeconfig.i18n.fallback
我给自己买了一个新的8gigUSBkey,我正在寻找一个合适的解决方案来拥有一个可移植RoR环境来学习。我在谷歌上搜索了一下,发现了一些可能性,但我很想听听一些现实生活中的经历和意见。谢谢! 最佳答案 我喜欢InstantRails,非常容易使用,无需安装程序,也不会修改您的系统环境。 关于ruby-on-rails-可移植RubyonRails环境,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/q
在我的双语Rails4应用程序中,我有一个像这样的LocalesController:classLocalesController用户可以通过此表单更改其语言环境:deflocale_switcherform_tagurl_for(:controller=>'locales',:action=>'change_locale'),:method=>'get',:id=>'locale_switcher'doselect_tag'set_locale',options_for_select(LANGUAGES,I18n.locale.to_s)end这有效。但是,目前用户无法通过URL更改
我在跑Fastlane(适用于iOS的持续构建工具)以执行用于解密文件的自定义shell脚本。这是命令。sh"./decrypt.shENV['ENCRYPTION_P12']"我想不出将环境变量传递给该脚本的方法。显然,如果我将密码硬编码到脚本中,它就可以正常工作。sh"./decrypt.shmypwd"有什么建议吗? 最佳答案 从直接Shell中扩展假设这里的sh是一个faSTLane命令,它以给定的参数作为脚本文本调用shell命令:#asafastlanedirectivesh'./decrypt.sh"$ENCRYPTI