本文主要是将 在KEIL上能够成功编译的 STM32F103VE 芯片项目转移到 VS
Code 的 EIDE 插件中,主要是针对 Keil MDK-ARM 中的
Option 进行参数复制,即 EIDE 的配置。
需要以下两个工具:
Keil MDK-ARM
Keil.STM32F1xx_DFP.2.4.0.pack
其实还是依托于 Keil MDK-ARM ,只是换了 VS Code 的皮。
EIDE INSTALL
首先需要在 VS Code 中安装 Embedded IDE(如下),官方手册:EIDE在线文档 。
image-20220414214014581
EIDE CONFIGURATION
对 EIDE 的配置主要包括 扩展设置 、芯片支持包安装 、构建参数设置 和 项目属性设置 。
image-20220414211312253
扩展设置
可以在 VS Code 的插件中选中 Embedded IDE
,在齿轮状设置图标菜单里选择
扩展设置
,在里面配置好编译工具链的路径还有一些可设置选项。
STM32 可以用 ARM CC 和 ARM GCC 进行编译,具体需要看芯片要求,Keil
的话用的是 ARM CC 5版本或者 ARM CC 6 版本。
可以到 Keil MDK-ARM 的安装路径下进行查看,例如 在
D:\Keil_v5\ARM\ARMCC\bin
中,选择右键
用 Powershell 打开
,然后输入 ./armcc.exe
即可查看版本号。
主要配置六个参数即可,需要根据本地的 Keil
安装路径来进行设置(不要盲目复制粘贴)。
芯片支持包安装
Keil 的芯片支持包主要看 Option
-> Target
下的 STM32F103xx.svd
。
通过本地搜索可以看到这个文件需要通过安装 .pack
扩展包得到。
image-20220414190916865
到 MDK5 Software Packs
(keil.com) 中搜索对应芯片的扩展包,如 Keil.STM32F1xx_DFP.2.4.0.pack
。
点击 芯片支持包 右侧的 加号,即可选择通过
在线安装 (From Repo) 或者
离线安装 (From Disk)。
image-20220414212238565
image-20220414212220319
安装完扩展包之后 再点击下图中的加号,输入芯片型号进行进一步选择。
即可查看芯片的大致信息:
构建参数设置
构建参数的依据是 Keil 中的这几个参数选项卡:
方法:
提取 Keil 中的构建参数 (如下 C/C++ 参数设置)
提取 EIDE 中的构建参数
对比差异,以 Keil 为准对 EIDE 进行增删
C/C++ 参数设置
下方是 Keil 中对 C/C++ 的构建参数管理页面:
以下是从 Keil MD5 的 Option
中扒下来的编译参数,即最后一行的 Compiler Control String
:
1 2 3 4 5 6 -c --cpu Cortex-M3 -D__MICROLIB -g -O3 --apcs=interwork --split_sections -I include -I ../ -I ../../../Libraries/CMSIS/CM3/CoreSupport -I ../../../Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x -I ../../../Libraries/STM32F10x_StdPeriph_Driver/inc -I ../../../Utilities/STM32_EVAL -I ../../../Utilities/STM32_EVAL/STM3210B_EVAL -I ../../../Utilities/STM32_EVAL/Common -I ../../STM32F10x_StdPeriph_Template -I ../MDK-ARM -IF:/Workspace/xiwang_production_test_embedded/Project/STM32F10x_StdPeriph_Template/MDK-ARM/RTE/_STM3210B-EVAL -ID:/Keil_v5/ARM/PACK/ARM/CMSIS/5.0.0/CMSIS/Include -ID:/Keil_v5/ARM/PACK/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="522" -D_RTE_ -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD -DUSE_STM3210B_EVAL -o .\build\STM3210B-EVAL\*.o --omf_browse .\build\STM3210B-EVAL\*.crf --depend .\build\STM3210B-EVAL\*.d
以下是从 EIDE 中扒下来的编译命令:
1 2 3 4 5 6 7 8 9 10 11 ...... C command line (armcc): -c --apcs=interwork --cpu Cortex-M3 --li --c99 -D__MICROLIB -O0 --split_sections --diag_suppress=1 --diag_suppress=1295 -g -I.\.. -I.\..\..\..\Libraries\CMSIS\CM3\CoreSupport -I.\..\..\..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x -I.\..\..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I.\..\..\..\Utilities\STM32_EVAL -I.\..\..\..\Utilities\STM32_EVAL\STM32100E_EVAL -I.\..\..\..\Utilities\STM32_EVAL\Common -I.\.cmsis\dsp_lib -I.\.cmsis\include -I.\RTE\_STM32100E-EVAL -I.\.eide\deps -I.\include -I.\.eide\deps -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD_VL -DUSE_STM32100E_EVAL -DGD32F10X_HD CPP command line (armcc): -c --cpp --apcs=interwork --cpu Cortex-M3 --li -D__MICROLIB -O0 --split_sections --diag_suppress=1 --diag_suppress=1295 -g -I.\.. -I.\..\..\..\Libraries\CMSIS\CM3\CoreSupport -I.\..\..\..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x -I.\..\..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I.\..\..\..\Utilities\STM32_EVAL -I.\..\..\..\Utilities\STM32_EVAL\STM32100E_EVAL -I.\..\..\..\Utilities\STM32_EVAL\Common -I.\.cmsis\dsp_lib -I.\.cmsis\include -I.\RTE\_STM32100E-EVAL -I.\.eide\deps -I.\include -I.\.eide\deps -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD_VL -DUSE_STM32100E_EVAL -DGD32F10X_HD ......
EIDE 中查看编译命令的方法 :项目名称右键点击
查看生成的编译器命令行
即可。
互相比对二者之间的编译参数差异,发现以下差异:
Keil 中的代码优化等级为 3
即参数 -O3
,而
EIDE 中为 0
即参数 -O0
。
EIDE 比 Kei多了几个参数
--diag_suppress=1 --diag_suppress=1295
,需要删除。
ASM 和 Linker 参数设置
对比过 Keil 的参数之后,保持如下设置:
image-20220414213239217
image-20220414213257541
项目属性设置
包含路径设置
这个就不多说了。
需要注意的是,RTE路径下的 STM32xxx-EVAL
一定要是正确的,可以多,不要少。
image-20220414213503962
预处理定义
从 EIDE 导入 Keil 项目时,可能回设置很多不需要或者错误的
预处理定义 (宏定义),需要跟 Keil 保持一致。
DEBUG RECORDS
EXPECTED A }
提示 少了 }
,该文件是官方文件,应该不会错。经过检查,发现是宏定义过多导致的错误,修改过
预处理定义 中的宏定义设置就解决了。
如下,STM32F10X_HD
和 STM32F10X_HD_VL
冲突了。
最后,编译结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 [ INFO ] start building at 2022-04-14 20:22:39 [ TOOL ] ARM Compiler 5.06 update 4 (build 422) [ INFO ] file statistics (rebuild mode) +---------+-----------+-----------+-----------+--------+ | C Files | Cpp Files | Asm Files | Lib Files | Totals | +---------+-----------+-----------+-----------+--------+ | 46 | 0 | 1 | 0 | 47 | +---------+-----------+-----------+-----------+--------+ [ INFO ] start compilation (jobs : 4) ... >> [ 2%] CC '../../../Libraries/CMSIS/CM3/CoreSupport/core_cm3.c' >> [ 4%] CC 'main.c' >> [ 6%] CC '../../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_flash.c' >> [ 8%] CC '../../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_usart.c' ...... >> [ 89%] CC 'source/stm32f10x_it.c' >> [ 91%] CC '../../../Utilities/STM32_EVAL/STM32100E_EVAL/stm32100e_eval_lcd.c' >> [ 93%] CC 'source/system_stm32f10x.c' >> [ 95%] CC '../../../Utilities/STM32_EVAL/stm32_eval.c' >> [ 97%] CC 'source/write.c' >> [100%] AS '../../../Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/arm/startup_stm32f10x_hd_vl.s' [ INFO ] start linking ... Program Size: Code=9028 RO-data=340 RW-data=156 ZI-data=1412 Total RO Size (Code + RO Data) 9368 ( 9.15kB) Total RW Size (RW Data + ZI Data) 1568 ( 1.53kB) Total ROM Size (Code + RO Data + RW Data) 9524 ( 9.30kB) RAM : [ ] 2.4% 1.5KB/64.0KB FLASH: [ ] 1.8% 9.3KB/512.0KB [ INFO ] start outputting file ... >> output hex file [done ] file path: "build/STM32100E-EVAL/FT_Test.hex" >> output s19 file [done ] file path: "build/STM32100E-EVAL/FT_Test.s19" >> output bin file [done ] file path: "build/STM32100E-EVAL/FT_Test.bin" [ DONE ] build successfully !, elapsed time 0:0:9 [ INFO ] run tasks after build ... >> axf to elf [done ]