STM32F4xx固件库的说明及使用
一、固件库介绍1、先从网站上找到STM32F4xx固件库文件(文件名为STM32F4xx_DSP_StdPeriph_Lib_V1.4.0),这里我上传到了。2、解压打开。3、Libraries文件夹,里面有CMSIS、和STM32F4xx_StdPeriph_Driver两个文件夹,CMSIS 文件夹存放的是符合 CMSIS 规范的一些文件。包括 STM32F4 核内外设访问层代码,DSP 软件
一、固件库介绍
1、先从网站上找到STM32F4xx固件库文件
(文件名为STM32F4xx_DSP_StdPeriph_Lib_V1.4.0),这里我上传到了。
2、解压打开。
3、Libraries文件夹,里面有CMSIS、和STM32F4xx_StdPeriph_Driver两个文件夹,CMSIS 文件夹存放的是符合 CMSIS 规范的一些文件。包括 STM32F4 核内外设访问层代码,DSP 软件库, RTOS API, 以及 STM32F4 片上外设访问层代码等。STM32F4xx_StdPeriph_Driver 放的是 STM32F4 标准外设固件库源码文件和对应的头文件。inc 目录存放的是 stm32f4xx_ppp.h 头文件,无需改动。 src 目录下面放的是 stm32f4xx_ppp.c 格式的固件库源码文件。每一个.c 文件和一个相应的.h 文件对应。
4、Project文件夹,是由ST官方提供的固件实例源码。
5、Utilities 文件夹是官方评估板的一些对应源码。
二、固件库说明
1、core_m4.h是 CMSIS核心文件,提供进入M4内核接口由ARM公司提供,所有的CM4内核的芯片都适用。
2、system_stm32f4xx.h是片上外设接入层系统头文件。主要用来申明设置系统以及总线时钟相关的函数。源文件对应为system_stm32f4xx.c。
3、stm32f4xx.h是STM32F4片上外设访问层头文件,主要是系统寄存器定义申明以及包装内存操作。
4、stm32f4xx_it.c,stm32f4xx_it.h 以 及stm32f4xx_conf.h 等 文 件 用来编写中断服务函数(中断服务函数也可以写在任意文件中)。
5、stm32f4xx_conf.h 是外设驱动配置文件。
6、misc.c,misc.h,stm32f4xx_ppp.c,stm32f4xx_ppp.h 以及 stm32f4xx_rcc.c 和stm32f4xx_rcc.h 文件是STM32F4 标准的外设库文件。misc.c和misc.h是定义中断优先级分组和Systick定时器相关的函数。stm32f3xx_rcc.c 和 stm32f4xx_rcc.h 是与 RCC 相关的一些操作函数,作用主要是一些时钟的配置和使能。在任何一个 STM32 工程 RCC 相关的源文件和头文件是必须添加的。 stm32f4xx_ppp.c 和 stm32f4xx_ppp.h,是 STM32F4 标准外设固件库对应的源文件和头文件。包括一些常用外设 GPIO,ADC,USART 等。
7、Application.c就是应用层代码。
8、有了上述文件还差一个启动文件,启动文件一般叫做startup_xxxx.s。启动文件主要用来进行堆栈的初始化,中断向量表以及中断函数的定义。启动文件需要引导进入main函数。Reset_Hardler中断函数是唯一实现了的中断处理函数(在系统复位之后进入main函数,进入之前调用SystemInit系统初始化函数),其他的中断函数基本都是死循环。
三、固件库的使用
1、新建一个工程文件夹命名为Template,并创建5个子文件夹分别为CORE、FWLIB、OBJ、SYSTEM、USER。
2、用Keil新建project,定位到刚新建的USER子目录中,工程名为Template。选择STMicroelectronics -> STM32F4 Series -> STM32F407 -> STM32F407ZG。
3、将需要固件库相关文件复制到工程目录中。将固件包里的STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\STM32F4xx_StdPeriph_Driver里的src和inc拷贝到刚新建的FWLIB中,将固件库的STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm里的启动文件startup_stm32f40_41xxx.s复制到CORE中,将\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Includ 里 面 的 四 个 头 文 件 :core_cm4.h、 core_cm4_simd.h、 core_cmFunc.h 以及 core_cmInstr.h 同样复制到 CORE 目录下面。将固件库的STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include 将里面的 2 个头文件 stm32f4xx.h 和 system_stm32f4xx.h 复制到 USER 目录之下。再将\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Project\STM32F4xx_StdPeriph_Templates里面的5 个文 件 main.c , stm32f4xx_conf.h , stm32f4xx_it.c , stm32f4xx_it.h ,
system_stm32f4xx.c复制到USER中。
4、在Keil的Project Targets中添加组(USER,CORE,FWLIB),并将相应的文件加入其中。(注意:FWLIB中的stm32f4xx_fmc.c文件只有STM32F42和STM32F43需要用到,这里应该删除)
5、在MDK中设置头文件存放路径,也就是告诉MDK应该去那些目录里寻找包含的头文件。在魔术棒的C/C++选项卡输入Define输入框输入:STM32F40_41xxx,USE_STDPERIPH_DRIVER。并在Output选择中间文件编译后存放目录(及刚刚新建的OBJ目录)同时将下方的三个选项都勾上。
6、将main.c里的内容改为:
#include "stm32f4xx.h" void Delay(__IO uint32_t nCount); void Delay(__IO uint32_t nCount) { while(nCount--){} } int main(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;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_UP; GPIO_Init(GPIOF, &GPIO_InitStructure); while(1){ GPIO_SetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10); Delay(0x7FFFFF); GPIO_ResetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10); Delay(0x7FFFFF); } }
同时将USER里的stm32f4xx_it.c内容清空。点击编译按钮完成编译及可以将工程代码下进开发板中。
这样就完成了固件库的使有啦!今天就介绍到这里,有问题可以在下面评论。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)