参考:1、为VSCode搭建STM32开发环境 零基础教程
2、使用STM32标准库构建VSCode+gcc+openOCD开发STM32
一、软件、插件安装
1、需要安装的软件及其作用
序号 | 软件名称 | 作用 |
---|---|---|
1 | VS Code | 代码编辑 |
2 | STM32CubeMX | STM32芯片图形化配置工具。可生成Makefile工程。 |
3 | arm-none-eabi-gcc | 编译代码 |
4 | mingw64 | 管理代码编译顺序 |
5 | openocd | 烧录与调试 |
2、软件安装
对于后三个软件,若下载的是安装包,则需要执行一定的安装步骤;如下载的是压缩文件,则解压后根据自己的习惯放到任意的文件路径,然后将每个软件bin文件夹的路径添加到环境变量。系统变量对所有用户起作用,用户变量对当前用户起作用。
对于mingw64,找到mingw32-make.exe文件,然后重命名为make.exe。
3、验证是否安装成功
打开power shell窗口,分别执行以下命令,可以查看对于软件的版本。若能够输出正确的版本号,则说明安装成功。
make -v
openOCD -v
arm-none-eabi-gcc -v
4、插件安装
打开VS Code,安装以下插件:
Chinese language-pack:中文支持包
C/C++:提供 C/C++ 的语法智能感知、加亮及调试功能。
C/C++ intellisense
cortex debug
bracket pair colorizer 2:把括号变成彩色
二、用STM32CubeMX创建工程
三、在VS Code做一些配置
1、实现编译功能
用VS Code打开工程文件夹,这时候会出现一些报错。
在Makefile文件里面找到并复制
-DUSE_HAL_DRIVER
-DSTM32F103xE
按ctrl + shift + p(也可以点击 管理->命令面板),“编辑配置(UI)”
在界面中找到 “定义”,把刚才复制的粘贴过去,并删掉前面的“-D”(“-D是Makefile文件的格式”)
编译器路径:选择D:\Program Files\mingw64\bin\gcc.exe(安装并且添加了环境变量后才会有该选项)。
IntelliSense 模式:选择gcc-arm
点击“终端” ->“ 新终端”,输入make命令,可以编译工程。
为了可以像Keil那样,点击任务栏的按钮进行编译,需要做如下配置:
点击“终端” ->“配置任务” -> “gcc.exe build active file”,把原来的代码进行删改,保存。
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "Build",
"command": "make",
"args": [
],
"problemMatcher": [
"$gcc"
],
"group": "build"
}
]
}
点击“终端”->“运行任务”,选项中就会出现“Build”任务,点击“Build”,也可以实现编译。
2、实现下载功能
继续更改原来的代码
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "Build",
"command": "make",
"args": [
],
"problemMatcher": [
"$gcc"
],
"group": "build"
},
{
"type": "shell",
"label": "Build & update",
"command": "openocd",
"args": [
"-f" ,//打开文件
"D:/Program Files/OpenOCD-20200729-0.10.0/share/openocd/scripts/interface/stlink-v2.cfg",
"-f",
"D:/Program Files/OpenOCD-20200729-0.10.0/share/openocd/scripts/target/stm32f1x.cfg",
"-c",
"program build/test.elf verify reset exit"
],
"problemMatcher": [
"$gcc"
],
"group": "build"
}
]
}
D:\Program Files\openocd-0.10.0\scripts\interface\stlink-v2.cfg //指明调试工具
D:\Program Files\openocd-0.10.0\scripts\target\stm32f1x.cfg //目标芯片系列
“program build/test.elf verify reset exit” //program是烧录命令;test.elf是编译后生成的文件(文件名不一定的test,而是你的工程名);verify代表烧录后验证;reset代表烧录后重置;exit为退出。可以参考《OpenOCD User’s Guide》的Flash Programming章节。
连接ST-link,到“设备管理器->串行总线设备”查看st-link是否连接成功。
点击“终端”->“运行任务”-> “Build & update”,可以下载程序。下载成功后会出现以下信息。
3、实现调试功能
依次点击VS Code界面左侧的“运行”按钮 -> “创建lunch.json文件” -> C++(GDB/LLDB)-> ”默认配置“。
删掉自动生成的代码,留下这些:
"version": "0.2.0",
"configurations": [
]
}
点击右下角“添加配置“
选择“cortex debug:openOCD”
自动生成代码后
"executable"后面填写自己的elf文件路径。
然后添加:
"configFiles":
[
"D:/Program Files/openocd-0.10.0/scripts/interface/stlink-v2.cfg",
"D:/Program Files/openocd-0.10.0/scripts/target/stm32f1x.cfg"
]
最后变成:
{
"version": "0.2.0",
"configurations": [
{
"cwd": "${workspaceRoot}",
"executable": "build/test.elf",
"name": "Debug Microcontroller",
"request": "launch",
"type": "cortex-debug",
"servertype": "openocd",
"configFiles":[
"D:/Program Files/openocd-0.10.0/scripts/interface/stlink-v2.cfg",
"D:/Program Files/openocd-0.10.0/scripts/target/stm32f1x.cfg"
]
}
]
}
点击“运行按钮” ,可以看到一个三角符号,点击三角符号启动调试。
四、遇到的问题
1、加入RT-Threa源码后编译出错
现象
使用RT-Thread官方“基于 CubeMX 移植 RT-Thread Nano”生成的 Makefile工程在编译时有错误。
原因
汇编文件后缀.S和.s是有区别的,.S文件里面可以有预处理指令。.s格式的汇编文件中,只能包含纯粹的汇编代码,汇编器只对其进行汇编操作,没有预处理操作;.S格式的汇编文件中,还可以使用预处理命令,汇编器会先进行预处理,然后再进行汇编。
解决方法
在工程目录找到context_gcc.S文件,将文件拓展名为大写的 .S 改成小写 .s,并在 Makefile 中添加这个 .s 文件。
2、调试时不能进入main函数
原因
stm32启动文件中指定的入口地址不是基于GCC编译器的,而是基于MDK编译器的。
解决方法
修改启动文件(startup_stm32f070x6.s),将 bl main 改为 bl entry。