OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4131|回复: 11

Windows环境下CubeMX+VScode+Gcc+OpenOCD开发STM32环境搭建

[复制链接]

58

主题

499

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1920
金钱
1920
注册时间
2013-11-18
在线时间
268 小时
发表于 2019-9-8 01:18:00 | 显示全部楼层 |阅读模式
本帖最后由 mzwhhwj 于 2019-9-16 09:25 编辑

      为啥要这么麻烦嘛,这个不解释,生命在于折腾,相信很多人都在折腾,也很多人去百度过,按百度的教程估计还是有很多人不会弄,所以写这篇教程为那些还没有折腾成功的砖工提供点线索。

       VScode现在真的很强大,界面跟配色都是一流,再加个各种强大的插件,使VScode越来越成为万能的IDE,可以开发各种语言。这里不多说,VScode相信绝大部分的人都会安装使用,就不再重复了。

      Gcc对应CortexM的编译器arm-none-eabi-gcc,只要百度下,都可以下载到。这里直接搬砖https://developer.arm.com/tools- ... in/gnu-rm/downloads,点页面右边的Download然后选择对应的版本就可以下载了。安装包是exe文件,安装就是一直next就可以了。最后一步,一定要勾上Add path to environment varibale这个选项,把Gcc增加到环境变量,否则就要自己去环境变量那里增加。安装完成后会自动打开CMD,输入arm-none-eabi-gcc -v就可以看到gcc版本号,安装完成。
20190907232354605.png 20190907233403200.png

       在CMD下试下make,发现找不到该命令,这点比较坑,Gcc里没有自带Make。这玩意在百度上还真不好。我这边已经找到了,X64版本跟X86版本都有。还就是尽量不要用Ghost系统,不然会发现缺失一些Dll,导致make无法执行,自行在网上下载缺失的DLL补回去应当可以了。把make.exe复制到gcc安装目录下的bin文件夹里面(C:\Program Files\GNU Tools ARM Embedded\8 2019-q3-update\bin),然后在CMD下执行make,就可以看到make已经执行了。
20190908000111351.png
       目前可以用gcc来编译STM32了,打开CubeMX新建工程,CubeMX的使用就不多说了,最后生成工程的时候选择Makefile工工程就可以了。在生成的工程目前下,按住Shift+右键,点在此次打开命令窗口,就可以快速打开CMD,直接敲入make 或者make -j4(-j4就是4线程编译,大家自行根据电脑配置选择线程数据,我这是用的虚拟机,只配置了2个核,所以用了4线程)。回车后就可以看到gcc在编译工程了,最后编译完成,生成elf、Hex、Bin等文件。
20190908013910182.png
     接下来就是OpenOCD,这里直接转到https://sourceforge.net/projects/openocd/files/latest/download就可以下载openocd-0.10.0.zip。解压OpenOCD,把OpenOCD/Bin目录下的三个文件同样复杂到Gcc目录下的Bin文件夹里。在CMD下执行openocd。可以看到openocd可以执行了。接下来就是复制OpenOCD的脚本文件,在原来解压的OpenOCD文件夹里的OpenOCD\share\openocd\scripts下最关键的两个目录,interface跟target,interface就是放的调试器的脚本,target放的是芯片脚本,我这边用的STM32F105跟ST-link,把interface下的stlink.cfg,target下的stm32f1x.cfg、swj-dp.tcl,scripts目前下的mem_helper.tcl4个文件复制到STM32工程目录下。然后在CMD下输入 openocd -f stlink.cfg -f stm32f1x.cfg,此时发现提示找到sw-dp.tcl文件。用记事本或者Notepad++打开stm32f1x.cfg文件,在第6行source [find target/swj-dp.tcl],swj-dp.tcl是在当前目前下,所以修改成source [find swj-dp.tcl]后保存,再次在CMD下执行openocd -f stlink.cfg -f stm32f1x.cfg,就可以看到OpenOCD通过stlink连接上了芯片。

20190908001832849.png 20190908002004770.png 20190908002043293.png
20190908002821999.png
20190908003309568.png
     到这一步,前期工作已经完成了,接下来就是拿出来我们的VScode。在拓展那里直接搜索cortex,就可以看到Cortex-Debug调试插件,后面三个插件是调试插件的器件包,我们一并安装上。用VScode打开STM32的工程。按ctrl+~就可以快速打开控制台,在控制里make -j4先编译,如果还没有编译过。点开VS的Debug栏,然后点打开配置lunch.json,选择Cortex Debug。就会打开Debug的配置文件,这里最关键的部分,也是很多百度上教程没有说明白的地方。
20190908003553124.png
20190908004104913.png
    "configurations": [
        {
            "name": "Cortex Debug",
            "cwd": "${workspaceRoot}",
            "executable": "./build/stm32f105.elf",
            "request": "launch",
            "type": "cortex-debug",
            "svdFile":"C:/Users/Administrator/.vscode/extensions/marus25.cortex-debug-dp-stm32f1-1.0.0/data/STM32F105xx.svd",
            "servertype": "openocd",
            "configFiles": [
                "stlink.cfg",
                "stm32f1x.cfg"
            ]
        }
    ]
这里直接放上我的配置,最关键的是servertype要选择openocd,跟configFiles要加上stlink.cfg跟stm32f1x.cfg,这两个文件就是上一步复制到工程目录下的,调试器调用 OpenOCD的时候会去找这两个文件,前面 用openocd -f stlink.cfg -f stm32f1x.cfg测试过可以连接上芯片,这里配置就不会有问题。然后就是executable可执行文件,gcc编译出来的是elf文件,相当于MDK的axf文件,在工程目录下的build里面,大家可以找到,修改成自己工程对应的可以了。再然后就是svd文件,这是芯片的寄存器列表文件,具体位就是在Windows用户目录下的C:\Users\Administrator\.vscode\extensions\marus25.cortex-debug-dp-stm32f1-1.0.0\data。大家根据路径一级一级去找就可以找到对应芯片的svd,这是前面要安装CortexDebug的器件包插件才会有的。
20190908004810256.png
    一切都准备完毕,接下来就是激动人心的时候了,按F5进入调试,过了一会就可以看到进到调试界面,左边的Cortex Peripherals也可以看到外设寄存器,再按F5,就可以看到调试全速运行了,其它打断点什么,单点之类的,跟MDK没有太多区别,就不多复述了。
2019090800550522.png
     最后还有几个点,在VScode的输出那里选择Adapter Output就可以看到OpenOCD的输出信息,可以帮助我们查看OpenOCD是否正常连接上芯片跟查找问题。还有就是Makefile默认没有打开调试编译,要做到源码级调试,我们还要修改下Makefile,在Makefile的C_DEFS宏定义那里拉架-DDEBUG打开调试编译。最后修改下make clean命令,清除工程编译文件,用于重新编译工程,Makefile里的命令是Linux下的,我们修改成Windows CMD的命令 -rmdir /s /q $(BUILD_DIR),其实就是删除build文件夹。
20190908005916275.png
20190908010321869.png 20190908010536620.png
    目前为止我们已经可以在VScode下编译STM32并调试,用起来比Eclipse要方便强大的多。而且是全开源的软件,不用担心版权的问题。后面会继续写Ubuntu下的环境搭建,其实比Windows下的搭建简单很多^_^。End
make for windows.zip (480.59 KB, 下载次数: 124)
20190908001605174.png
已经放下多年的FPGA,要重新再拾起来,却是如此的陌生
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2019-5-16
在线时间
32 小时
发表于 2019-9-9 10:01:40 | 显示全部楼层
生命在于折腾,哈哈啊
回复 支持 反对

使用道具 举报

0

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2019-9-10
在线时间
19 小时
发表于 2020-1-3 17:52:46 | 显示全部楼层
学习了 之前去配置有各种问题一直没配好
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2019-7-25
在线时间
22 小时
发表于 2020-2-3 01:52:48 | 显示全部楼层
正是我所需要的,学习了谢谢
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2019-7-25
在线时间
22 小时
发表于 2020-2-3 15:54:29 | 显示全部楼层
本帖最后由 gmn234567 于 2020-2-3 15:57 编辑

楼主您好,我按照您的帖子步骤调试了很久,还是有些问题:openocd通过了,但是图中两个频率被我改过:原来都是2000。调试控制台等如图,请问错误原因是什么
QQ图片20200203031525.png
2.png
3.png
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2019-5-26
在线时间
2 小时
发表于 2020-3-3 23:54:54 | 显示全部楼层
请问下楼主,你的全局变量是否是实时更新的,还有__weak这类的关键字有没有报错。
回复 支持 反对

使用道具 举报

6

主题

52

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2023-9-1
在线时间
24 小时
发表于 2023-9-15 16:10:06 | 显示全部楼层
大佬,能不能出一个ubuntu的?
学习至上
回复 支持 反对

使用道具 举报

3

主题

805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3830
金钱
3830
注册时间
2017-3-7
在线时间
1670 小时
发表于 2023-9-15 16:35:31 | 显示全部楼层
tonychen0924 发表于 2023-9-15 16:10
大佬,能不能出一个ubuntu的?

有cubeide,直接集成好的,有linux版
回复 支持 反对

使用道具 举报

6

主题

52

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2023-9-1
在线时间
24 小时
发表于 2023-9-15 16:45:13 | 显示全部楼层
a5820736 发表于 2023-9-15 16:35
有cubeide,直接集成好的,有linux版

就是类似CortexM的功能吧?我这复现的一个开源项目YAPLC,他用的是libopencm3的底层库,我在想是不是装个双系统ubuntu下复现会不会好一些
学习至上
回复 支持 反对

使用道具 举报

3

主题

805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3830
金钱
3830
注册时间
2017-3-7
在线时间
1670 小时
发表于 2023-9-15 17:14:34 | 显示全部楼层
tonychen0924 发表于 2023-9-15 16:45
就是类似CortexM的功能吧?我这复现的一个开源项目YAPLC,他用的是libopencm3的底层库,我在想是不是装个 ...

虽然不知道你这个项目是啥,但是看到库名字带open,那大概率使用gcc-for-arm编译的,cubeIDE默认就是gcc,所以只要你有库的源码基本上可以直接编译链接的
回复 支持 反对

使用道具 举报

6

主题

52

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2023-9-1
在线时间
24 小时
发表于 2023-9-18 09:58:10 | 显示全部楼层
a5820736 发表于 2023-9-15 17:14
虽然不知道你这个项目是啥,但是看到库名字带open,那大概率使用gcc-for-arm编译的,cubeIDE默认就是gcc ...

嗯,我看了这个帖子感觉也应该是,我决定装一个双系统ubuntu去做
学习至上
回复 支持 反对

使用道具 举报

22

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
242
金钱
242
注册时间
2018-8-1
在线时间
43 小时
发表于 2023-12-7 11:31:53 | 显示全部楼层
很好的文章,学习了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 09:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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