使用Keil5创建STM32工程
Keil对于做单片机开发的人员来所再熟悉不过了。Keil成立与1982年,在2005年10月被ARM公司收购。
相信对于很多STM32的初学者来说从零开始创建一个STM32工程是比较困难的,很多人都是把之前的工程复制过来,再进行改编的,这样可以省掉很多烦恼。笔者最近也在学习STM32的开发,顺便整理一下自己的方法跟大家分享,下面来介绍如何使用Keil μVision5创建一个STM32的工程。
下载ST官方库
在ST官网:https://www.st.com/zh/microcontrollers-microprocessors.html下载STM32 Standard Peripheral Libraries库文件,打开后进入工具与软件 -> 嵌入式软件 -> MCU及MPU嵌入式软件:
笔者购买的开发板是使用STM32F103C8T6微控制器的开发板,所以选择STSW-STM32054:
下载完成后解压文件你会得到以下文件,这里主要用到的是Libraries和Project文件夹:
创建工程文件夹
创建文件夹Template作为工程文件的根目录,然后在Template目录下再创建以下文件夹:CMSIS、USER、FWLIB、STARTUP。 CMSIS用于存放内核函数,USER存放用户自己的函数,FWLIB存放库函数,STARTUP存放启动引导文件。
将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport中的文件复制到工程目录的CMSIS文件夹中,
将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x中的.c和.h文件复制到工程目录的CMSIS文件夹中,复制完成后的CMSIS文件夹应该是这样的:
- 将STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template目录下的.c和.h文件复制到工程目录的USER文件夹中,复制完成后的USER文件就是这样的:
- 将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver目录下的inc文件夹和src文件夹复制到工程目录的FWLIB文件夹中,复制完成后的FWLIB文件夹应该是这样的:
- 将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm中的startup_stm32f10x_md.s文件复制到工程文件夹的STARTUP文件夹中,这里的是单片机的启动引导文件,可以根据芯片的FLASH容量来区分属于小容量、中容量和大容量从而决定使用哪个启动引导文件:
FLASH容量 | 分类 | 对应的启动引导文件 |
---|---|---|
FLASH <= 32K | 小容量 | startup_stm32f10x_ld.s |
64K <= FLASH <= 128K | 中容量 | startup_stm32f10x_md.s |
256K <= FLASH <= 512K | 大容量 | startup_stm32f10x_hd.s |
笔者购买的开发板是使用STM32F103C8T6的微控制器,拥有64K的FLASH,属于中容量的微控制器,所以启动引导文件选择arm中的startup_stm32f10x_md.s,复制完成后的STARTUP文件夹应该是这样的:
新建μVision工程
打开Keil,新建工程Template,工程文件保存在上一步的Template目录中,保存后选择芯片,这里我们用到的是STM32F103C8,在Search中输入STM32F103C8选中后点OK,在下一步弹出的Manager Run-Time Environment中我们点击Cancel,不需要让Keil来为我们添加库文件,我们使用之前下载好的库文件自己手工添加。
点击Manager Project Items按钮,将Project Targets更名为Template。 删除默认的Groups,并创建以下Groups:CMSIS、USER、FWLIB、STARTUP。
在CMSIS Group中添加工程文件目录的CMSIS文件夹里的.c文件;在USER Group中添加工程文件目录的USER文件夹里的.c文件;在FWLIB Group中添加工程文件目录的FWLIB\src文件夹里的.c文件;在STARTUP Group中添加工程文件目录的STARTUP文件夹里的startup_stm32f10x_md.s文件;添加完成后点击OK。
点击Options for Target按钮(魔术棒)选择C/C++设置页,在Preprocessor Symbots的Define中填写:USE_STDPERIPH_DRIVER, STM32F10X_MD
这里的STM32F10X_MD是因为启动引导文件使用的是中容量的引导文件;Include Paths中填写:.\CMSIS;.\FWLIB\inc;.\FWLIB\src;.\USER;.\CMSIS\startup\arm
,完成后点击OK。
编译调试
编译工程出现报错:
1 | Rebuild started: Project: Template |
原因是没有找到文件stm32_eval.h,修改main.c文件,将不需要的内容删除,修改后的main.c文件如下:
1 | /* Includes ------------------------------------------------------------------*/ |
重新编译工程,依然有错:
1 | Rebuild started: Project: Template |
原因是system_stm32f10x.c文件重复,在CMSIS中和USER中都有一份,我们需要将USER中的system_stm32f10x.c文件移除出工程,点击Manager Project Items,选择USER Group,选择USER里的stm32f10x.c然后点击删除按钮。完成后点击OK。
重新编译工程,此时没有报错了:
1 | Rebuild started: Project: Template |
保存工程作为以后开发的模板工程,下次开发新项目时复制一份出来可以直接在这上面开发了。
测试工程文件
编辑main.c文件:
1 | /** |
点击Options for Target按钮(魔术棒)选择Output设置页,勾选Create HEX File然后点击OK,重新编译工程,完成后在工程文件夹下会生产Objects文件夹,HEX文件会存放在该文件夹中。
将LED和电阻串联连接到开发板的PB10引脚:
下载HEX文件到STM32F103C8T6开发板,运行效果:
LED灯闪烁,说明我们手动创建的工程文件可用。
使用Keil5创建STM32工程