二、工程模板创建
器件包的安装
一共分为两种:在线安装和离线安装
在线安装
首先我们打开 Keil 软件,点击小绿图标。
将弹出的窗口关掉。
我们看后面的大窗口,选择 STM,选择 STM32F407VEx这款。
等待安装........
如果出现错误,那大概率是网络出现了问题,可以直接换离线安装方式。
按钮出现这个信息就说明已经安装完成了,就可以关闭窗口了。
离线安装
官网下载地址:https://www.keil.arm.com/packs/stm32f4xx_dfp-keil/boards/
我们点击这个下载。
等待下载完成之后,双击安装。
我们直接 Next 下一步
无脑点击下一步,等待安装完成。
安装完成之后会在 Keil 软件的安装目录下有一个 STM32F4xx_DFP 的文件夹:
注意这个 packs 文件夹是我在安装 Keil 的时候自己设定的,我们其他不用管,只要使用搜索功能能搜得出这个文件夹就证明安装成功了。
标准固件库获取
官网下载地址:https://www.st.com/zh/embedded-software/stsw-stm32065.html
如果没有账号,可以注册一个。
标准固件库目录介绍
文件夹介绍
打开下载的 STM32F4xx 标准固件库,里面的目录如图所示。
- Libraries:此文件夹里面有 3 个文件夹,包含 CMSIS 和标准外设库,存放官方封装的一些库函数,方便用户开发使用。
- Project:此文件夹是工程模板文件夹和官方编写的示例代码,涉及芯片的大部分功能。
- Utilities:此文件夹包含一些第三方组件和 STM32 配套的开发板文件。
Project
Examples 文件夹,内容如图所示。
从上图中可以看出,这个文件夹里是各种外设资源的例程,每个文件夹里面还有更为详细的功能示例,对我们开发具有很高的参考价值。我们一定要多看,多读,多用。
Libraries
打开 Libraries 文件夹之后,内容如图所示。
- CMSIS:微控制器软件接口标准(CMSIS:Cortex Microcontroller Software Interface Standard) 是 Cortex-M 处理器系列的与供应商无关的硬件抽象层。
- STM32F4xx_StdPeriph_Driver: 从名称也可以看出,这个是 STM32F4 系列的标准外设库,存放一些封装了寄存器的库函数,我们后面编程也是依赖于这个库进行开发,覆盖 STM32F4 芯片的绝大部分功能,包含 ADC,CAN,SDIO,SPI 等等。
Utilities
这个是第三方组件文件夹,我们不必太关注。
创建标准固件库模板
建议直接下载下方准备好的模板:
空白模板工程
前提条件
- 已经安装好 Keil 软件
- 已经安装好 STM32F4xx 的 Pack 包
- 已经下载好 STM32F4xx 标准固件库
新建工程目录
新建文件夹,命名为 STM32F407_ProjectTemplate,用来保存新创建的工程。
然后在该文件夹下新建 6 个文件夹,分别命名为:
- project: 存放工程文件(目前只支持 MDK5)。
- libraries:存放各种库文件,CMSIS,芯片固件库,文件系统库,网络库等。
- board:存放和板子初始化和链接文件。
- app: 存放应用程序,由用户编写和放 main 函数。
- bsp:存放和底层相关的支持包。
- module:主要存放各种软件模块,比如软件定时器,PID,FIFO,状态机等。
然后在 project 文件夹下新建一个文件夹:MDK(V5)
在 STM32F407_ProjectTemplate 文件夹下新建一个 README.md 文件,如图所示。
拷贝工程文件
找到我们的固件库的下载目录,将 STM32F4xx_DSP_StdPeriph_Lib_V1.9.0\Libraries 文件夹下的内容全部拷贝到新建目录的 libraries 下。
找到 \STM32F4xx_DSP_StdPeriph_Lib_V1.9.0\Project\STM32F4xx_StdPeriph_Templates 下面的
- stm32f4xx_conf.h
- stm32f4xx_it.c
- stm32f4xx_it.h
复制到 module 文件夹下
我们将 board 这个文件夹下载拖到 STM32F407_ProjectTemplate 文件夹中替换。
board文件夹下载
📌 在 下载中心
->百度网盘
->【STM32F407VxT6版本】百度网盘链接(入门手册)
->第03章【立创·梁山派·天空星STM32F407开发板】软件资料
->空白工程模板
->STM32F407_ProjectTemplate.zip
压缩包中。
在压缩包中有board这个文件夹,下载之后即可使用!!!
新建 Keil 工程
在上面建立的 project
文件夹里面创建一个 MDK(V5)
文件夹用来存放 keil MDK ARM V5
版本的工程文件。 打开 Keil uVision5
创建一个新的工程: 单击->Project
->New uVision Project
-> 选好芯片型号 STM32F407VETx
。
创建分组并添加源文件
右键 Target-> 单击 Manage Project Items 如下所示设计分组(双击可以修改名字):
将 \libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm
目录下的 startup_stm32f40xx.s
(启动文件)添加到 STARTUP 组里(注意最后要点击对话框左下角的 OK
按钮才能生效)
启动文件使用汇编写的,他是上电或复位后执行的第一段代码:
- 设置堆栈大小和 PC 指针。
- 配置中断向量表:设置中断向量表的位置,这样当中断发生时,CPU 能够找到相应的中断服务程序。
- 定义中断服务例程的默认处理函数:通常会定义一个默认的中断处理函数,当未定义特定的中断处理函数时,会调用这个默认函数。在某些启动文件中,都是了弱定义的中断处理函数,允许我们在其 C 代码中重定义。
- 系统时钟初始化。
- 跳转到 c 语言的 main 函数里面。
将 \STM32F407_ProjectTemplate\libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates
目录下的 system_stm32f4xx.c 添加到 APP 组里面:
将 \STM32F407_ProjectTemplate\libraries\STM32F4xx_StdPeriph_Driver\src
目录下的所有文件添加到 Driver 组里面:
添加 \board
目录下的 board.c
文件到 Board 目录下去
添加 README.md
文件到 DOC 目录下去。(注意:文件类型一定要选择 All files 才可以看得到.md 后缀的文件)
然后我们新建一个 main.c 文件,添加到 APP 目录中。
添加头文件路径
配置工程
点击魔法棒弹出页面
- 勾选
Create HEX File
- 使用微库
- 添加全局宏定义 :
USE_STDPERIPH_DRIVER,STM32F40_41xxx,
- C语言使用C99标准
修改工程
修改代码需要我们解除标准库的读写权限
有小钥匙标志表示只读
这时我们发现小钥匙没有了:
天空星是板载了一个8M的高精度外部晶振的,我们设置使用外部晶振,将stm32f4xx.h
文件中的137行修改为:8000000
修改 system_stm32f4xx.c
文件中的:
364行
394行
396行
改为图中的数字:
将stm32f4xx.h
文件中的几行删掉
我们将 stm32f4xx_fmc.c文件从分组中取消
编译测试
将main.c中的代码替换为:
/*
* 立创开发板软硬件资料与相关扩展板软硬件资料官网全部开源
* 开发板官网:www.lckfb.com
* 技术支持常驻论坛,任何技术问题欢迎随时交流学习
* 立创论坛:club.szlcsc.com
* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
* 不靠卖板赚钱,以培养中国工程师为己任
*/
#include "board.h"
int main(void)
{
board_init();
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB, &GPIO_InitStructure);
while(1)
{
GPIO_SetBits(GPIOB, GPIO_Pin_2);
delay_ms(500);
GPIO_ResetBits(GPIOB, GPIO_Pin_2);
delay_ms(500);
}
}
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
我们点击编译
发现 0 错误,0 警告,这样我们的工程模板就完成了!