上次折腾足足1天没有搭起来开发环境,最终不得不屈服于keil。心里憋屈啊。今天重打锣鼓,再战,终于跑通vs2019+cubemx的stm32开发环境。
话说自从使用vs2019+c#开发过上位机后,就对vs智能的代码补全等编程辅助功能非常感兴趣。对比之下keil的编辑辅助功能就是一坨翔,无比想把mcu开发环境从keil上迁移出来。
考虑过vscode,但看开发个单片机又要搞python,又要写makefile,不符合我这个嵌入式彩笔朴素的需求:低脑细胞消耗量!so pass...
回来看看亲切的vs2019,安装了visualGDB之后她是支持嵌入式工程开发的,可以使用arm-eabi工具链编译,可以使用visualGDB调试。
主要的思路是用cubemx生成这个东东,GPDSC文件,以及工程文件。然后使用vs2019建立新的嵌入式工程,读入这个文件,建立工程。
1,vs2019开新工程,类型选择
注意,这个项目类型只有在安装visualGDB插件后才会出现;
BTW,visualGDB支持vs2019的版本并不好找,建议使用vs2017,我是软件只要能用就用新不用旧,找合适版本的GDB花了不少功夫;
2,在这之前,需要如下东西:
arm toolchain 工具链用于编译工程,stm32 devices是元件库, openOCD是调试工具。这些东西最好提前下载好。sysprogs的下载速度... emmmm... 50MB我下载了1个小时。
3,先执行下载下来的arm-eabi_xxxx.exe工具链安装程序,然后开个vs窗口,工具-visualGDB-manage visualGDB packages装好剩下那俩。
4,接步骤1,打开cubemx并配置好工程参数,工具链/IDE选择 Other Toolchains,生成GPDSC文件以及工程文件;
BTW:这里有坑,vs不像keil可以直接更新 keil工程文件 读取工程内子文件变化(至少我还没找到法子),因此cubemx最好一次配置到位,省的之后费劲。同样是这个原因,最好选择copy all used libraries
5,回到vs2019,开始配置embedded类型新工程
嗯,然后你就可以在2019中(早期版本也可以导入)导入cubemx生成的GPDSC文件。在device selection那一步,如果你之前没有下载好stm32 device文件,你就得等着GDB从sysprogs的土豆服务器上把这玩意儿扒拉下来。或者可以打开坎巴拉放松一下? debug Method选usb device,如果插着stlink GDB可以自动识别,剩下的我懒得打字截图了,请自行琢磨吧。
6,好了,点击finish,恭喜工程导入成功。如果没有启用freeRTOS,那么只需要检查下资源管理器里 源文件-StartUp文件夹下system_stm32f1xx.c文件能否打开即可。不能打开需要删掉该文件,并重新添加core/src下同名文件。再打开main.c看看有没有提示未include的头文件,有的话按照vs代码提示加入引用路径即可,剩下的不用看了。
BUT,如果你跟我一样非常悲剧使用了freeRTOS,那么事儿还没完。干完这一步生成一下,一堆错误。主要集中在osThreadID_t未声明,osThreadNew函数未声明等问题上。别着急,看下编辑框顶部vs的提示,会提示cmsis_os.h未引用,但给出的引用建议跑到这里去了。这是绝对不行的。要知道freeRTOS的相关源码全部在这个路径里,
关联关系大概是freertos.c引用了cmsis_os.h,cmsis_os.h又引用了cmsis_os2.h
解决方案是为header files-stm32cube hal-freertos文件夹下增加未引用的头文件,
为source files-stm32cube hal-freertos文件夹增加cmsis_os2.c源文件。
如果一切正常,那么当你修改完之后再点生成,就能改可以愉快地看到一下界面了:
BTW,如果依然不行,keil开一个相同工程,对照着keil工程检查未声明函数对应的头文件是否被引用吧。
thats all.
btw1,我只试过烧写,调试还没来及试... 有空更新(没空咕咕咕
btw2,这里使用的freertos-cmsisv2
btw3,非常不建议导入之后再修改工程引用的hal文件(增删),建议一次到位
btw4,想起来再说,先睡了。