真.从“零”搞 VSCode+STM32CubeMx+C <1>构建
目录
前言
准备工作
创建STM32CubeMx项目
VSCode导入项目&配置
构建错误调试
后记
前言
去年10月开始接触单片机,一直在用树莓派的Pico,之前一直用Micropython,玩的不亦乐乎,试错阶段优势明显,很快就能鼓捣一些小玩意出来。这两天准备往“C+STM32”的路线走一走,也是因为市场上还是这个路线比较通用。
准备工作
- 开发工具1:STM32CubeMx,用于生成项目及基础代码,我理解就是把依赖都弄好,毕竟是人家官方的开发工具。
- 开发工具2:VSCode,装插件,主要是C和EIDE这两个插件,原来还不知道为啥要多加个VSCode,直到我第一次运行STM32CubeMx,实在不知道点哪里,上手有点难度,而且巨慢,时不时报个错,但是能用,我这是新装的WIN10,没有乱七八糟的软件。
- 其实这个组合就是一个亲爹负责生出来,后爹负责养育,后边只要改依赖什么的都需要亲爹重新生成一下子。
- STM32单片机一个:我之前买了4个,拿看着最简单的先来试试,STM32F103C8T6。
- STM32CubeMx注册账号一个,下载需要,另外创建项目的时候需要下载相关的依赖,也需要。
创建STM32CubeMx项目
- 打开软件,第一次打开无所适从,最后选的红框处
- 脑袋嗡嗡的,最后按箭头所指摸索的
- 默认进到的页面选针脚,单片机领域的HelloWorld都是点灯
- 然后选Project Manager,我主要是奔着Makefile来的,第三个框选的就是这个,中间的框好像是默认的,不确定是否对后续的操作有无影响。
VSCode导入项目&配置
- 这个直接打开STM32CubeMx创建的项目没有反应,我就又创建了EIDE项目,然后把所有文件都拷贝到这个新目录里,然后就开始各种找资料,没有一个准确的,但是思路基本有了。需要配置如图红框处的内容,这些都是拷贝过来的,需要人工指定一下。
- 最后两个框,在Makefile文件中找
构建错误调试
- 配置好了就可以点构建了
- 哈,噼里啪啦一通报错,大概有两种情况
1.引入了不该引入的内容,如:
stm32f1xx_hal_timebase_rtc_alarm_template.c:73:1: error: unknown type name 'RTC_HandleTypeDef'; did you mean 'DMA_HandleTypeDef'?
73 | RTC_HandleTypeDef hRTC_Handle;
| ^~~~~~~~~~~~~~~~~
| DMA_HandleTypeDef2.Gcc版本问题,如:
c:/users/administrator/.eide/tools/gcc_arm/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld.exe:d:/A_WorkPlaces/C/NewProject1/STM32F103XX_FLASH.ld:105: non constant or
forward reference address expression for section .ARM.extab
collect2.exe: error: ld returned 1 exit status
- 问题1解决,禁用掉报错的文件,都是模板文件,不会有无问题:
- 问题2解决,是因为eide自动装的Gcc是版本10,而生成的文件是Gcc11的,可以先看看自己系统是用的哪个版本,然后修改生成文件,看注释删掉“(READONLY)” 连括号一块删,我的一共五个,另外注意,“.ARM :”的ARM和冒号之间要有空格,不然也要报错!
- 再次执行构建,成功!
后记
花了大概三个小时,中途卡点有点多,好在晕晕乎乎编译成功了,下一篇继续。