Keil开发环境配置
方式一:离线安装(推荐)
通常,我们可以在Arm为Keil准备的官方网站搜索所需的所有ARM相关开发包。
- 搜索:
STM32F407
Arm Keil | Devices。点开STM32F407ZGTx
- 选择:
CMSISPack
下的STM32F4xx_DFP
会发现STM32F4xx用的都是同一个开发包
- 继续点击下载即可:Download Recommended Pack
如果下载慢(文件大小280M左右),建议在链接上按鼠标右键,复制链接地址https://www.keil.com/pack/Keil.STM32F4xx_DFP.2.17.1.pack到迅雷下载,会比较快。
- 双击下载到的文件,按照默认路径进行安装
- 不能也不用输入目标文件夹,直接点
Next >>
- 安装完成,Finish关闭即可
方式二:在线安装
文档获取
参考手册
https://www.st.com/content/st_com/zh/search.html#q=stm32f407-t=resources-page=1
数据手册
https://www.st.com/zh/microcontrollers-microprocessors/stm32f407zg.html#tools-software
标准外设库获取
标准外设库获取我们可以从官网进行下载。
下载链接:https://www.st.com/zh/embedded-software/stsw-stm32065.html#get-software
下载完成后,进行解压,解压后目录如图
标准外设库目录介绍
打开下载的 STM32F4xx 标准固件库,里面的目录如图
- Project:此文件夹包含的是官方编写的示例代码,涉及芯片的大部分功能。还包含了模板代码。
- Libraries:此文件夹里面有 2个文件夹,包含 CMSIS和固件库,方便用户开发使用。
- Utilities:此文件夹包含一些第三方组件和 STM32 配套的开发板文件。
Libraries
- CMSIS:微控制器软件接口标准(CMSIS:Cortex Microcontroller Software Interface Standard) 是Cortex-M 处理器系列的与供应商无关的硬件抽象层。规定了处理器内核与外设的接口,统一了内核访问外设寄存器的方法
POSIX(Portable Operating System Interface of UNIX),可移植操作系统接口,它定义了操作系统应该为应用程序提供的接口
- STM32F4xx_StdPeriph_Driver: 从名称也可以看出,这个是 STM32F4 系列的标准外设库,存放一些封装了寄存器的库函数,我们后面编程也是依赖于这个库进行开发。
Libraries/CMSIS
内部主要是汇编代码,这个是直接和芯片进行交互的,每种不同的芯片需要配套不同的cmsis接口实现。
Libraries/STM32F4xx_StdPeriph_Driver
这个里面都是一些外设库文件,包含 STM32F4 芯片的绝大部分功能,包含 ADC,CAN,SDIO,SPI 等。
这个库是嫁接在cmsis的基础上的,F4系列不同的芯片可用公用这一套实现。
项目模板搭建
前期准备
- 已经安装好 Keil 软件
- 已经安装好 STM32F4xx 的 Pack 包
- 已经下载好 STM32F4xx 标准固件库
工程文件目录创建
- Project:放工程文件,编译文件等。
- Firmware:放 ARM 内核文件,标准外设库文件等。
- Hardware:放开发板的硬件驱动文件。
- User:放 main 函数,stm32f4xx_it 文件,systick 文件。
- Doc: 放 readme.txt 文件,工程说明文件。
固件库移植
找到我们的固件库的下载目录,将STM32F4xx_DSP_StdPeriph_Lib_V1.9.0\Libraries
文件夹下的内容全部拷贝到新建目录的Firmware 下
程序入口移植
找到我们的固件库的下载目录,将STM32F4xx_DSP_StdPeriph_Lib_V1.9.0/Project/STM32F4xx_StdPeriph_Templates
中的如下文件进行拷贝:
将文件拷贝到工程目录的User
目录中
Keil工程创建
打开 keil,点击最上面的 Project 选项卡,选择 New uVision Project 选项新建一个工程
选择保存路径为我们刚才创建的文件夹下的 Project,文件名为 STM32Template,然后点击保存
设备选择
点击保存之后,弹出工程配置窗口,选择所需芯片,这里依次选择GigaDevice->GD32F4xx Series->GD32F470->GD32F470ZG,然后点击 ok
确定所需芯片之后,弹出 RTE 的环境配置对话框,选择工程所需的组件,不用配置,点击取消
keil分组创建
我们的工程已经创建完成,但是可以看到工程里面还没有文件,我们可以创建一些分组和添加一些文件。
我们打开管理工程项去创建分组和添加文件
首先我们新建分组:
- User
- CMSIS
- Firmware
- Hardware
- Doc
CMSIS分组添加
来到Firmware\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm
目录下,选择如下:
Firmware分组添加
来到Firmware\STM32F4xx_StdPeriph_Driver\src
目录下,选择如下:
- stm32f4xx_rcc.c
- stm32f4xx_gpio.c
- misc.c
程序代码修改
打开 main.c 文件,删除一些不必要的代码,剩余部分如图:
打开 gd32f4xx_it.c 文件,拉到最后面,然后删掉 Systick_Handler 下面的代码,剩余部分如图:
- Target配置
点击魔法棒,进入配置中的Target
,选择ARM compiler 为V6
勾选Use MicroLIB
- Output配置
选择创建hex文件
- C/C++配置
-
- Define配置为:
USE_STDPERIPH_DRIVER,STM32F40_41xxx
- Warings选择
AC5-like warnings
- 选择
c99
和c++03
- Optimization选择
-O1
- Define配置为:
- Include配置
添加如下几个目录:
User
Firmware\CMSIS\Device\ST\STM32F4xx\Include
Firmware\CMSIS\Include
Firmware\STM32F4xx_StdPeriph_Driver\inc
编译错误
通常在编译过程中会报错,是由于当前CMSIS接口定义不符合AC6的编译环境,我们需要覆盖掉CMISIS的编译头文件。
首先,删除Firmware\CMSIS\Include
中所有的头文件。
然后,找到你的Pack安装目录,查找方式如下:
来到这个目录中的Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include
中:
拷贝这个目录中所有的.h
文件,拷贝到你的项目目录的Firmware/CMSIS/Include
目录中