1. 引言
在使用进行STM32F407开发的时候,一般被推荐使用的是Keil。经过一整子的Keil洗礼,我真的要崩溃了,在界面、调试、代码跳转、代码格式化、开发效率等方面一直很抓狂。之前一直使用vs code开发,用着还蛮顺心,界面风格很讨人喜欢。因此,尝试在vs code上进行STM32开发。接下来主要讲述个人将Keil和vs code环境搭建问题以及一些小Tips。
2. 环境搭建
2.1 Keil环境搭建
2.1.1 Keil安装
关于Keil程序的安装,网上已经有很多优秀的教程,此处贴出不错的博文。Keil的下载地址为https://www.keil.com/download/product/,其中会看到MDK-ARM,C51,C251,C166,关于他们的区别可以查看链接Keil 5(C51, MDK) 官方下载方法。若使用的板子是STM32,则选择MDK-ARM,若是51系列的开发板,则选择C51,根据个人所需,选择合适的版本(本人一般使用STM32F407,所以选择MDK-ARM)。安装之后需要对其进行破解,安装及破解步骤可参考链接Keil5的安装破解方法。
2.1.2 Keil魔术棒设置
打开Keil,找到菜单栏Pproject -> New uVersion Project...
创建一个新的工程项目,随意命名(最好不要包含中文字符)并保存在一个新建的文件夹中,之后会弹出提示框选择芯片,搜索自己想要的芯片即可。
将在新创建的文件夹下得到如下图所示:
程序自动创建Listings
、Objects
和DebugConfig
三个文件夹。前两个是我们在日常开发中需要关心的。Listings
存放编译过程的中间文件,Objects
存放编译结果的文件,所生成的.hex
将会在这找到。
接下来重点就是魔术棒的设置。
-
首先找到魔术棒的位置,如图所示。
-
Target设置
这里主要选择合适的编译器,根据自己MDK版本选择合适编译器即可。
-
Output设置
这里的设置将会影响到编译过程中所产生文件的存放位置以及生成的文件名。
Select Folder for Objects...
选择某个文件夹存放编译结果。这里可不用修改,编译结结果存放在当前工程目录的Objects
里。Name of Excuetable
设置生成将要烧写进开发板里的文件名。还要注意,要将Create GEX File
勾选上,产生.hex
文件,方便后续程序烧写。 -
Listing设置
这里的设置主要会影响编译过程中间文件的存放位置,默认存放在当前工程目录下的
Listings
里。 -
C/C++设置
这里是最重要的设置。
一个是预编译器符号,另一个是头文件的路径。
Preprocessor Sysbols
设置两个宏函数,分别为USE_STDPERIPH_DRIVER
,STM32F40_41xxx
。这两个文件的目的就是配置程序正确使用对应芯片的相关外设头文件和源文件。这两个参数对应的标准库的文件为stm32f4xx.h
和stm32f4xx_conf.h
。使用stm32f407的芯片需要配置这两个参数。另一个是头文件的添加。Keil编译器和以往用的编译器不一样,即使在工程目录创建的头文件和源文件,依然要在Keil工作界面添加源文件和头文件的路径。下图是我某个工程的头文件路径,仅作参考。关于其中不同路径下的文件,我将在项目模版中进行一一说明。
-
Debug设置
通过画圈的位置选择合适的仿真器,因为我是用的是野火的stm32f407开发板,他们送的是DAP仿真器,因此选择CMISI-DAP即可。根据个人喜好勾选
Run to main()
,每当烧写完成,程序会自动运行main函数。通过Setting
,设置仿真器的配置。这是主要设置
Flash Download
配置,勾选Reset and Run
,当程序烧写完毕,开发板会复位启动。关于魔术棒的设置基本就是这些。
2.1.3 项目模版说明
如图所示,一个ARM工程的基本模板如下:
-
App
主要存放用户的模块文件,例如呼吸灯、ADC等文件。
-
Doc
存放工程的说明文档或一些其他技术文档。
-
Libraries
这里才存放的就是STM32外设库
STM32F4xx_StdPeriph_Driver
以及芯片驱动文件CMSIS
,包括启动文件、库源码及头文件。这个文件可以在官网进行下载。链接:STM32F4 DSP和标准外设库(https://www.st.com/zh/embedded-software/stsw-stm32065.html#overview)
概述页下拉,选择合适的版本即可。
解压得到
我们只需将Libraries复制到我们的工程目录下即可。
-
User
主要存放
main.h
、main.c
、stm32f4xx_conf.h
、stm32f4xx_it.h
、stm32f4xx_it.c
,后面三个文件是stm32的中断配置以及芯片配置的头文件和源文件。用户的中断函数一般在stm32f4xx_it.h
和stm32f4xx_it.c
中实现。这几个从STM32F4xx_DSP_StdPeriph_Lib_V1.8.0/Project/STM32F4xx_StdPeriph_Templates/
中找到直接幅复制到工程目录下的User文件下即可。
最终的结果如下:
2.1.4 Keil IDE工程文件创建
Keil IDE的工程目录和项目目录有些差别,但是Keil IDE的工程文件源头都是项目中。创建方法是选择Target -> Manager Project Items
,在Groups
中一次添加相关文件,如下所示分别创建几个目录:
-
STARPUP
整个项目的启动文件
startup_stm32f40xx.s
。这个在目录Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm\
中,因为所使用的芯片是ARM,选择ARM目录下的相应的启动文件。除了ARM,还有gcc_ride7、iar等编译器的启动文件。 -
App
这里为用户创建的相关应用源文件,在项目工程中导入即可。
-
CMSIS
这里导入的是芯片的库源程序,主要导入
system_stm32f4xx.c
即可,这个函数涉及系统初始化、系统时钟初始化、外部存储扩展等核心函数,在目录Libraries\CMSIS\E:\ARM_workspace\05\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates
下。 -
StdDrive
这里将芯片外设的源文件全部导入即可。将
Libraries\STM32F4xx_StdPeriph_Driver\src\
里的所有源文件导入。 -
User
导入
main.c
程序入口以及中断配置文件stm32f4xx_it.c
即可。
最终效果如下:
添加完之后,还需要设置相关的头文件路径。
注意:编译的过程中会遇到如下错误,提示FMC_XXX
未定义,此时将StdDriver中的stm32f4xx_fmc.c
删除即可。
2.2 Vs code环境搭建
2.2.1 vs code安装
关于User和 System的版本区别,建议参考这篇文章VS Code User和System版区别_devxzh的博客-程序员秘密_vscode的user和system。个人推荐使用System版本。
2.2.2 vs code常用插件
-
KeilAssistant及设置
打开vs code,步骤1点击插件按钮,然后搜索关键字,选择
Keil Assistant
进行安装,最后一步,也是最关键的一步是配置Keil的启动路径。点击步骤5中设置按钮,得到如下图:依次配置Keil的启动可执行文件即可。至此,用vs code从工程目录打开,即可看到Keil选项。
这个插件允许我们对Keil项目进行编译和烧写。
在vs code对代码的改动,会依次同步到Keil环 IDE相应源码的改动。前提:改动的源码已经被添加到Keil IDE中。图中Target1项目本人并有没有添加相关的源文件,因此此时我改动
main.c
并故意写了一个bug,Keil IDE并没有main.c
源文件,编译(图中画圈的地方从左至右分别为 Build、Download to Device、Rebuild)Keil程序并没有报错。注意:因为本人已经安装号
Keil Assistant
,因此步骤4中的安装
按钮显示为卸载
。如上述步骤,依次安装Chinese翻译、Intelligent 代码提示、C/C++等插件。这些插件根据需要进行相关设置。
3 Tips
-
Tip1 快速注释
可以通过
设置->用户代码->c.json
,创建快捷键注释模版当我们在代码中打出prefix字符时,IDE自动提示prefixVar,选择prefixVar,就会出现注释模版,这个极大提高工作效率。
-
vs code识别c和c++的问题
因为vs code不区分C和C++,当创建某个c文件的时候,vs code自动识别为c++。一般识别为C++文件,用快捷键注释就出现问题。
为此,为了将文件文件识别为C文件,在setting.json中添加如下代码即可。
总结
本文写得比较粗糙,排版很有很多需要学习的地方。若内容如有不对的地方,欢迎在评论区指正。