STM32F4xx固件包下载:https://www.st.com/zh/embedded-software/stsw-stm32065.html
理论上来说只需要导入startup(启动)、core(内核)以及system(控制时钟)文件就可以完成最基本的启动工作,但是实际上编译后会出现缺少相关头文件的报错,最终可能还需要添加许多直观上联系不是很大的头文件,比F1系列略微麻烦了一点。(后来发现很大程度上是和编译器版本有关系!keil5默认使用的是v6版本的编译器,用v5版本就不会出现这样的问题)
core_cm4.h文件可能会出现
unknown register name 'vfpcc' in asm
的报错,查了一下资料好像是固件包里的core_cm4.h版本低了的原因,这个时候可以用当时在keil5里下载安装的固件包中的core_cm4来进行替换。
当头文件没有缺少后,由于F4系列是通用的一套固件包(401,402,……407),直接编译可能又会这样的报错:Please select first the target STM32F4xx device used in your application (in stm32f4xx.h file)
意思很简单,因为我们用的是stm32f4xx,具体是40x还是41x程序不知道,从stm32f4xx.h中的代码可知定义的方式,直接define一个STM32F40XX的宏变量就可以了,如图所示。
完成了基本的启动工作后,现在可以根据板子的引脚基于寄存器来进行编程(和点灯),但这样做很麻烦,也不适合做复杂的工作,事实上官方已经写好了很多库函数可以直接调用,调包肯定比造轮子要简单!那么接下来就是引入库函数,包括内核库函数和外设库函数。内核库函数和外设库函数可以在固件包的Libraries\STM32F4xx_StdPeriph_Driver
文件夹里找到,其中src
文件夹里存放着外设功能的实现,inc
是外设功能的一些头文件,把这两个文件夹里的东西都拷贝并添加到工程目录下。在stm32f4xx.h中,如果使用外设的话还需要添加USE_STDPERIPH_DRIVER
的宏定义以及头文件stm32f4xx_conf.h
(该文件在Project\STM32F4xx_StdPeriph_Templates
文件夹,用来配置库函数头文件包含关系)。此外,在stm32f4xx_conf.h同级目录下有两个模板文件stm32f4xx_it.c
和stm32f4xx_it.h
也可以添加进来(这两个文件存放了中断函数)。最终整个工程目录和配置如下图所示。
评论(0)