三、VSCode_写代码和编译3.1_编译和下载 将 CubeMX 生成的工程文件夹拖入到 VSCode 中打开,这时候如果不出意外的话在 VSCode 的终端中输入 make 就可以成功的编译你的工程了(前提是正确安装了 "GNU Arm Embedded Toolchain" 和 "make" 并配置了环境变量)。
程序编译完成就可以得到 hex 文件了,想要把这个文件下载进单片机有一百种办法,你可以在 J-Flash、OpenOCD、pyOCD 等工具中选择一个你喜欢的。 3.2_vscode的配置文件通过上面的介绍已经可以对工程进行编译和下载了,但是仍有很多不足。比如工程文件中会有一大堆画波浪线的错误(前提是安装了C/C++插件)、工程的编译下载过程很繁琐等,因此我们还需要进一步配置些东西。 vscode的配置文件是放在与 .vscode 这个文件夹下的,如果 VSCode 未自动创建的话我们就需要手动创建,它在工程的根目录下。 c_cpp_properties.json
- 在 .vscode 目录下建立 c_cpp_properties.json 文件,需要用这个文件记录头文件的包含路径和全局宏定义。具体要哪些路径和哪些宏定义可以去 Makefile 目录下的 C_INCLUDES 和 C_DEFS 找。
- 不过只把那几项添加进来还是不够的,有些用到的头文件 CubeMX 生成的工程里并没有携带,这些C语言的标准库头文件是需要在 arm-none-eabi-gcc 的安装路径里找的。至于怎么找当然是有技巧的,在命令行里输 echo 'main(){}' | arm-none-eabi-cpp -E -v -(CMD) 就可以看到 arm-none-eabi-cpp 默认的头文件和库文件路径了,把它们添加进去。
- 但是当你把这几个头文件加进去你会发现还是会报错,多半是什么 uint32_t 未定义之类的。这是因为 GNU-ARM 的 stdint.h 会向下钻取并生成 stdint-gcc.h ,后者依赖于一个宏,同时它也依赖其他宏才能到达那里,但是由于这些宏我们未定义所以会报错。解决这个问题的办法就是手动定义那些宏,使用 arm-none-eabi-gcc -dM -E - < nul(CMD) 可以查看 arm-gcc 的内置宏定义,查出来结果可能有几百条,不过不要在乎那些,把这些全添加进去报错就会消失了,(在添加的时候只保留第一个空格前边的内容,这点小事让Excel干就好了)。
- 如果还是提示有问题那多半是 VSCode 的问题,重启一下试试(打开命令窗口输 ">reload windw")。
- (PS.额外添加的这点东西只是为了告诉vscode我们有哪些东西,并不会影响gcc的编译(毕竟我们添加的都是gcc默认包含的),更不要在Markfile文件中同步修改)
- {
- "configurations": [
- {
- "name": "Win32",
- "includePath": [
- "${workspaceFolder}/**",
- "c:/42hdst/software/hardware/gcc-arm-none-eabi/9.2.1/bin/../lib/gcc/arm-none-eabi/9.2.1/include",
- "c:/42hdst/software/hardware/gcc-arm-none-eabi/9.2.1/bin/../lib/gcc/arm-none-eabi/9.2.1/include-fixed",
- "c:/42hdst/software/hardware/gcc-arm-none-eabi/9.2.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include",
- "${workspaceFolder}/Inc/*",
- "${workspaceFolder}/Drivers/STM32F1xx_HAL_Driver/Inc/*",
- "${workspaceFolder}/Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/*",
- "${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32F1xx/Include/*",
- "${workspaceFolder}/Drivers/CMSIS/Include/*"
- ],
- "defines": [
- "_DEBUG",
- "UNICODE",
- "_UNICODE",
- "USE_HAL_DRIVER",
- "STM32F103xB",
- "__DBL_MIN_EXP__",
- "__HQ_FBIT__",
- ......
- ......
- ......
- "__ATOMIC_RELEASE"
- ],
- "intelliSenseMode": "msvc-x64"
- }
- ],
- "version": 4
- }
tasks.json 和 launch.json
至此用 VSCode 愉快的写代码就已经没有问题了,剩下的就是调试方面的工作了。这两个文件分别是任务和调试用的,用VSCode调试代码痛快不痛快方便不方便就全看这两个文件的水平高低了,想要写得好就得有个好老师,先观摩观摩 github 上的一个项目:
|