【STM32】如何轻松创建第一个工程项目
目录
1、获取 KEIL5 安装包
要想获得 KEIL5 的安装包,在百度里面搜索“KEIL5 下载”即可找到很多网友提供的下载文件,或者到 KEIL 的官网下载:下载官网,一大堆注册非常麻烦。建议使用最新或者靠近最新版本都可以。
2、开始安装 KEIL5
选择安装路径,路径不能带中文,next
提示
: Pack 目录下后续可能会安装以后会用到的各种芯片的芯片包容易占空间,建议 C 盘剩余空间不多的用户可以直接在框中编辑改路径,把 C 改为 D(或其他盘,直接改第一个字符就行,注意不要删错后面符号)
安装ok即可
无需等待, 直接关闭整个软件
2.1、 激活
右键已经安装好的Keil MDK
图标, 选择以管理员方式打开
点开File
菜单栏, 选择License Management
, 在打开的窗口中复制右上角的Computer ID
值, 比如CA2RX-GUTUC
右键安装软件\Keil_MDK_ARM_5.35\keygen\keygen.exe
, 选择以管理员方式打开, 这是Keil MDK
的盗版激活器
将之前复制的CID值拷贝到激活器CID
输入框, Target
选择ARM
, 点击Generate
按钮, 会生成一长串激活码
复制激活码, 填回到Keil MDK
界面的New License ID Code(LIC)
中, 随后点击Add Lic
显示如下LIC Added Sucessfully
说明激活成功
2.2、安装DFP
库
安装软件\Keil.STM32F1xx_DFP.2.4.1.pack
3、工程创建
在D:\workspace-stm32
某个硬盘路径中创建第一个工程的文件结构, 只需要创建前四个文件夹, 其他工程相关文件和文件夹稍后由Keil创建
└─prj1_demo
├─app(我们的应用层代码)
├─driver(我们自行编写或其他人编写的第三方驱动)
├─library(ARM和ST提供的官方库)
├─doc(文档类)
└─keil(存放keil工程文件)
拷贝标准库的文件到我们的工程文件中
Libraries
下的CMSIS
和STM32F10x_StdPeriph_Driver
两个文件夹到工程的library
中Project\STM32F10x_StdPeriph_Examples\GPIO\IOToggle
下的main.c
stm32f10x_conf.h
stm32f10x_it.c
stm32f10x_it.h
四个文件到工程的app
中(不要拷贝system_stm32f10x.c
)对比c语言阶段的学习:
app相当于我们编写的代码, 通常统一以
main.c
的文件作为入口lib相当于标准库或者qt库, 早期嵌入式习惯将一个工程相关的库都放在工程内, 之后的则使用共享库(不要改), 其中
cmsis
是内核相关的操作库, 其他则是厂家的库prj相当于
makefile
,xxx.pro
等项目相关文件, keil/iar等都有自己对应的工程文件, keil的名叫<项目名>.uvprjx
drivers相当于
libmsc.so
等放置的位置doc一般放置自述文件
readme.txt/readme.md
和项目
标准库的开发方式更像是移植, 而不是创建
4、搭建框架
Keil
创建新工程, 工程文件保存在keil
文件夹路径下, 命名stm32prj
通常情况下, 工程名应该与整个工程文件夹的名字一样, 也就是
prj1_demo
考虑到之后的工程都是从这个工程直接复制, 因此使用一个更通用的工程名
选择设备型号f103ve
不添加任何库(不勾选任何选项, 并确定)
我们使用keil仅仅为了帮我们管理工程, 以及使用keil的工具链来编译/下载/调试
project
–manage
–project items
中, Groups
按如下分组和添加文件(工程中的group
不能有二级组, 所以lib
部分需要拆分成三部分)
Groups组名 | 说明 | 添加的文件 |
---|---|---|
app |
用户代码 | apps/main.c apps/stm32f10x_it.c |
driver |
第三方驱动 | [留空] |
cmsis |
内核库 | libraries/CMSIS/CM3/DeviceSupport/STM32F10x/system_stm32f10x.c |
stdLib |
标准库 | libraries/STM32F10x_StdPeriph_Driver/src/xxx.c |
startup |
启动文件 | libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/arm/startup_stm32f10x_hd.s |
main()
函数是C语言部分代码的入库
, 在进入c代码之前, 芯片需要先执行startup
启动文件才能启动, 随后才进入c语言部分, 并且这个启动文件使用的是汇编语言选择
startup_stm32f10x_hd.s
这个文件,因为hd
代表 High Density(高密度),用于区分 STM32F10x 系列不同的 Flash 和 RAM 规格。
分类 后缀 Flash 容量 典型芯片 低密度(Low Density) ld
16KB ~ 32KB STM32F101C4, STM32F103C6 中密度(Medium Density) md
64KB ~ 128KB STM32F103RB, STM32F101R8 高密度(High Density) hd
256KB ~ 512KB STM32F103RE, STM32F103ZC 超高密度(XL Density) xl
512KB ~ 1MB STM32F103ZG, STM32F103VH 标准库选择了全部文件, 实际上如果使用了什么外设, 就只需要包含对应文件即可, 提高编译速度
打开Options for Target
, 对这个项目进行一些额外配置
Target
中设置ARM Compiler
为Use default compiler version 5
此处为设置
编译器
, 可选GCC
或ARMCC
, 新版keil
默认为ARMCC v6
, 标准库是按照ARMCC v5
编写的
Output
中勾选Create HEX File
keil默认生成
axf
文件, 而大多数编程器都使用hex
格式的文件进行烧录这些文件其实就是最终生成的二进制文件
C/C++
中设置Define
STM32F10X_HD USE_STDPERIPH_DRIVER
注意这里是两个词, 中间用空格隔开, 相当于全局增加了两句话:
#define STM32F10X_HD #define USE_STDPERIPH_DRIVER
C/C++
中设置Include Paths
(使用右边的...
按钮, 选择文件夹, keil会自动识别为相对路径)
..\app
..\driver
..\library\CMSIS\CM3\CoreSupport
..\library\CMSIS\CM3\DeviceSupport\ST\STM32F10x
..\library\STM32F10x_StdPeriph_Driver\inc
Debug
中选择右边的Use
为CMSIS-DAP Debugger
教程使用的开发板是
野火F103
, 配套仿真器为CMSIS-DAP
标准的仿真器, 所以选择此项
再点开Settings
Debug
标签页的Max Clock
设置为5MHz
Flash Download
标签页勾选Reset and Run
- 调低烧录速度更稳定
- keil默认烧录完毕后系统不会自动开始运行, 需要手动按一下开发板上的
reset
按键, 而勾选此Reset and Run
选项, 烧录完立刻运行, 不用手动重启
edit-configuration-Editor
中设置Encoding
为第二个选项(utf-8)
Keil默认使用ANSI编码 不支持中文
改为更通用的UTF-8编码
5、开始编写代码
注意代码需要以空行结尾
编译, 使用到的编译选项为:
Traslate(ctrl+F7)
, 相当于gcc -c xxx.c
, 编译当前打开的一个文件为xxx.o
文件Build(F7)
, 相当于make
, 编译整个工程, 只会编译有变动的文件Rebuild
, 相当于make clean && make
, 完全重新编译整个工程作者:不被定义的~wolf