STM32开发环境有Keil,IAR,STM32CubeIDE等。
本文将介绍在Keil环境下新建STM32工程,以供初学者参考学习。
一,Keil MDK安装
keil安装方法不详细介绍,按照步骤提示 *** 作即可。
目前最新版本是keil MDK5,也叫Keil uVision5。
这里不建议软件汉化,因为汉化之后无法使用编码助手,非常不方便。
二,设备包的安装
不管在什么环境下开发单片机,新建工程时都会有一个选择设备的步骤,在这一步需要正确选择所使用的单片机型号,否则是无法下载程序的。
由于keil还支持很多其他品牌的单片机,所以Keil软件本身是不带STM32的设备包(选择设备包时会发现没有设备可以选择,如下图),需要根据所使用的单片机型号自行安装设备包。
所以keil MDK软件安装完成之后,首先需要安装设备库。
设备库在Keil官网可下载,这里我使用的是F103型,所以下载F1xx_DFP,每个设备库都有历史版本,可根据需要选择。
下载完成之后,打开Keil软件,点击设备包安装:
进入设备安装窗口,然后菜单栏选择File-Import,然后选择刚才下载的pack文件,点击打开,等待Pack安装。
安装完成之后就可以看到STM32F1系列的单片机型号全在里面了(如下图)。
实际上keil可以同时安装多个版本的设备包,但软件默认使用最新版本(如果想用旧版本,就点击Remove把新版本卸载)。
这里我安装了2.4.0,2.3.0,2.2.0三个版本。
之所以不用最新版本,是因为我的Keil版本与最新pack版本存在冲突,每次打开工程都会报错。
实际情况因电脑而异,如果出现该情况,可尝试安装低版本Pack包。
安装完成之后关闭Pack Installer,会d出窗口,提示是否需要需要重载设备,点击确定即可。
三,新建工程
新建工程步骤简单,在菜单栏选择Project -New Project,然后选择一个文件路径保存(最好不要带中文路径)。
然后选择所使用的的单片机型号,这里我使用的是STM32F103C8T6,所以选择STM32F103C8,然后点击OK即可(若设备安装成功之后仍没有设备可以选择,则需要重启软件,再次新建工程即可选择对应的设备了。
)。
选择设备之后,会d出窗口,选择软件组成部分。
这里的软件指的就是STM32的启动代码及标准外设库(例如ADC、GPIO、IIC等)。
需要用到什么功能则将对应的库打钩添加进去。
对于初学者,建议将所有软件打勾,将所有软件添加进去,以免后期再去添加。
后期需要添加的话则在该窗口选择即可。
为了方便后期的调试,在新建工程时应将各个功能的程序分类放置。
例如,系统程序、外设库、个人程序分别放在单独的文件夹里。
不同的功能也写在单独的.C程序中(如下可供参考)。
项目开发时,常常需要对项目内容进行增减,就需要用到项目管理器(打开方式如下)。
项目管理器,可以对每个文件夹里的内容及文件夹进行增删、修改、重命名等 *** 作。
不建议在电脑文件管理器里修改或者删除文件或者文件夹,这样做软件会报错。
完成上面一步后,还需要设置编译器。
如下图在编译选项中点击“C/C++”,在Define中粘贴这句:USE_STDPERIPH_DRIVER,STM32F10X_MD ,然后在Include Paths中将工程中所有的文件夹路径一一添加进去。
否则在头文件使用Define会报错。
在编译选项中还需要设置一个仿真器,如下。
使用的何种仿真器就选择什么,这里我使用的是ST-LInk。
通过ST-LInk就可以通过软件直接将编译(F7)好的程序下载(F8)至单片机以及在线调试(Ctrl+F5)。
四,新建.C文件及.h头文件
工程创建之后,就可以开始写程序了。
为了构建自己的工程框架,需要将不同的功能放在不同的.C程序中。
在需要新建项目的文件夹上右击,选择“Add New item to Group 'xxxx'”.
然后选择.C文件类型,命名后保存即可。
然后项目文件夹中就出现了刚才的.c文件。
Keil中程序中如果想要调用其他.c文件中的程序,还需要新建头文件。
假设我在刚才新建FirstItem的文件中写了两个函数ADD()和SUB()。
如果我在主函数中直接调用这两个函数,会有警告,虽然可以通过编译,但是并不会把这两个子函数编译进去,所以单片机也就不会执行这个子函数。
这就是因为没有头文件的原因。
创建头文件:与.c文件相同的创建方式相同,选择.h文件类型,名称一般命名成与.c文件相同的名字。
创建好了之后,需要在项目管理器中将刚才的.h文件添加到工程中。
在d出的窗口中选择.h文件类型,然后选中创建的.h文件,添加即可。
添加之后,FirstItem.h就能在工程中看到了。
我们打开该文件
然后在空白文件中写入程序
#ifndef _FIRSTITEM_H
#define _FIRSTITEM_H
函数1();
函数2();
#endif
里面的函数即FirstItem.c中声明的函数。
如下图所示。
这样,我想在哪个程序里调用FistItem里的函数(如ADD、SUB),只要在程序前#include 本文仅供参考,实际 *** 作会有差异,如有错误,欢迎指出 欢迎分享,转载请注明来源:内存溢出
评论列表(0条)