STM32基于库函数工程模板

2020-05-22来源: eefocus关键字:STM32  库函数  工程模板

#下载stm32官方(标准库/HAL库)下载链接
http://www.openedv.com/thread-295843-1-1.html
在这里插入图片描述
##文件夹介绍:
Libraries文件夹下面有CMSIS和STM32F4XX_StdPeriph_Driver两个目录,这两个目录包含固件库核心的所有子文件夹和文件。


1.CMSIS文件夹存放的是符合CMSIS规范的一些文件。包括STM32F4核内外设访问层代码。DSP库,RTOS API,以及STM32F4片上外设访问层代码等。


2.STM32F4XX_StdPeriph_Driver放的是标准外设库源码文件和对应的头文件。inc目录存放的是stm32f4xx_ppp.h头文件,无需改动。src目录下面放的是stm32f4xx_ppp.c格式的固件库源文件。每一个.c文件和一个相应的.h文件对应。这些文件也是固件库外设的关键文件,每个外设对应一组文件。


project文件夹下面有两个文件,其中STM32F4XX_StdPeriph_Examples文件夹下面存放的是ST官方提供的固件库实例源码,在以后的开发中,可以参考修改这个官方提供的实例来快速驱动自己的外设,很多开发板的实例都是参考官方提供的例程源码。这些源码对以后学习非常重要。


STM32F4XX_StdPeriph_Template文件夹下面存放的是工程模板。
Utilities文件下就是官方评估板的一些对应源码。
根目录中还有一个stm32f4xx_dsp_stdPeriph_um.chm文件,直接打开可以知道,这是一个库函数的帮助文档。

##关键文件介绍
在这里插入图片描述
core_cm4.h 文件位于LibrariesCMSISInclude 目录 下面的,这个就是 CMSIS 核心文件,提供进入 M4 内核接口,这是 ARM 公司提供,对所有 CM4 内核的芯片都一样。你永远都不需要修改这个文件。


stm32f4xx.h 和 system_stm32f4xx.h 文件位于LibrariesCMSISDeviceSTSTM32F4xxInclude 下。system_stm32f4xx.h是片上外设接入层系统头文件。主要是申明设置系统及总线时钟相关 的函数。与其对应的源文件 system_stm32f4xx.c 在目录ProjectSTM32F4xx_StdPeriph_Templates 可以找到。这个里面有一个非常重要的 SystemInit()函数申明,这个函数在我们系统启动的时候都会调用,用来设置系统的整个系统和总线时钟。


stm32f4xx.h 是 STM32F4 片上外设访问层头文件。这个文件就相当重要了,只要你做 STM32F4 开发,你几乎时刻都要查看这个文件相关的定义。这个文件打开可以看到,里面非常 多的结构体以及宏定义。这个文件里面主要是系统寄存器定义申明以及包装内存操作。


stm32f4xx_it.c,stm32f4xx_it.h 以及stm32f4xx_conf.h 等文件,可以在ProjectSTM32F4xx_StdPeriph_Templates 文件夹中找到。 这几个文件我们后面新建工程也有用到。stm32f4xx_it.c 和 stm32f4xx_it.h 里面是用来编写中断服务函数,中断服务函数也可以随意编写在工程里面的任意一个文件里面,个人觉得这个文件 没太大意义。

stm32f4xx_conf.h 是外设驱动配置文件。文件打开可以看到一堆的#include,这里你建立工程 的时候,可以注释掉一些你不用的外设头文件。


对 于 上 图 中 的 misc.c,misc.h,stm32f4xx_ppp.c,stm32f4xx_ppp.h以及 stm32f4xx_rcc.c 和stm32f4xx_rcc.h 文件,这些文件存放在目录 LibrariesSTM32F4xx_StdPeriph_Driver。这些文件 是 STM32F4 标准的外设库文件。其中 misc.c 和 misc.h 是定义中断优先级分组以及 Systick 定时 器相关的函数。stm32f3xx_rcc.c 和 stm32f4xx_rcc.h 是与 RCC 相关的一些操作函数,作用主要 是一些时钟的配置和使能。在任何一个 STM32 工程 RCC 相关的源文件和头文件是必须添加的。
stm32f4xx_ppp.c和stm32f4xxx_ppp.h就是stm32标准外设固件对应的源文件和头文件。包括一些实用外设GPIO、ADC、USART等。


实际上一个完整的 STM32F4 的工程光有上面这些文件还是不够的。还缺少非常关键的启 动文件。STM32F4 的启动文件存放在目录

LibrariesCMSISDeviceSTSTM32F4xxSourceTemplatesarm下面。对于不同型号的 STM32F4 系列对应 的启动文 件也不一样。我们的开发板是 STM32F407系 所以我们选择的启动文件startup_stm32f40_41xxx.s。 启动文件到底什么作用,其实我们可以打开启动文件进去看看。启 动文件主要是进行堆栈之类的初始化,中断向量表以及中断函数定义。启动文件要引导进入 main 函数。Reset_Handler 中断函数是唯一实现了的中断处理函数,其他的中断函数基本都是死 循环。 Reset_handler 在我们系统启动的时候会调用,下面让我们看看 Reset_handler 这段代码:
在这里插入图片描述
这段代码的作用是在系统复位之后引导进入 main 函数,同时在进入 main 函数之前,首先要调 用 SystemInit 系统初始化函数。


#建立工程

  • 1.新建工程文件夹template,在工程文件夹里创建CORE,FWLIB,OBJ,SYSTEM,USER.至于这些文件夹的名字是可以随便取的,我们这样是为了方便识别。

  • 2.打开Keil,点击Keil菜单:Project—>New Uvision Project , 然后将目录定位到刚刚建立的文件夹template的子目录USER下。工程名字取为template之后点击保存。(新建的工程文件夹的名字template 和 在USER目录下的工程名字template也可以根据项目名称取别的名字)
    在这里插入图片描述
    在这里插入图片描述

  • 3.接下里会出现一个选择Device的界面,就是选择我们选用芯片的型号. STMicroelectronics—>STM32F4 Series—>STM32F407—>STM32F407ZG(如果使 用的是其他系列的芯片,选择相应的型号就可以了)
    特别注意:一定要安装对应的器件 pack 才会显示这些内容哦
    在这里插入图片描述
    点击 OK,MDK 会弹出 Manage Run-Time Environment 对话框
    在这里插入图片描述
    这是 MDK5 新增的一个功能,在这个界面,我们可以添加自己需要的组件,从而方便构建 开发环境,不过这里我们不做介绍。点击 Cancel。
    在这里插入图片描述

  • 4.打开工程文件夹的子文件夹USER下面包含两个文件。
    在这里插入图片描述
    这里我们说明一下, Template.uvprojx 是工程文件,非常关键,不能轻易删除,MDK51.4 生成的工程文件是以.uvprojx 为后缀。Listings 和 Objects 文件夹是 MDK 自动生成的文件夹,用 于存放编译过程产生的中间文件。这里,我们把两个文件夹删除,我们会在下一步骤中新建一 个 OBJ 文件夹,用来存放编译中间文件。当然,我们不删除这两个文件夹也是没有关系的,只 是我们不用它而已。


5.下面我们要将官方的固件库包里的源码文件复制到我们的工程目录文件夹下面。 打开官方固件库包,定位到我们之前准备好的固件库包的目录:
LibrariesSTM32F4xx_StdPeriph_Driver 下面, 将目录下面的 src,inc 文件夹 copy 到我们刚才建立的 FWLib 文件夹下面。src 存放的是固件库的.c 文件,inc 存放的是对应的.h 文件,您不妨打开这两个文件目录过目一下里面的文件,每个外设对应一个.c 文件和一个.h 头文件。
在这里插入图片描述
-6.下面我们要将固件库包里面相关的启动文件复制到我们的工程目录 CORE 之下。 打开官方固件库包,定位到目录
LibrariesCMSISDeviceSTSTM32F4xxSourceTemplat esarm 下面,将文件 startup_stm32f40_41xxx.s 复制到 CORE 目录下面。然后定位到目录
LibrariesCMSISInclud ,将里面 的 四个 头 文 件 :core_cm4.h、core_cm4_simd.h、core_cmFunc.h 以及 core_cmInstr.h 同样复制到 CORE 目录下面。现在看看我们的 CORE 文件夹下面的文件.
在这里插入图片描述
-7.接下来我们要复制工程模板需要的一些其他头文件和源文件到我们工程。首先定位到目录: LibrariesCMSISDeviceSTSTM32F4xxInclude 将里面 的 2 个头文件 stm32f4xx.h 和 system_stm32f4xx.h 复制到 USER 目录之下。这两个头文件是 STM32F4 工程非常关键的两个头文件。后面我们讲解相关知识的时候会给大家详细讲解。然后 进入目录ProjectSTM32F4xx_StdPeriph_Templates , 将目录下面的 5 个 文 件 main.c , stm32f4xx_conf.h , stm32f4xx_it.c , stm32f4xx_it.h , system_stm32f4xx.c 复制到 USER 目录下面.在这里插入图片描述
相关文件复制到 USER 目录之后 USER 目录文件如下
在这里插入图片描述
-8.前面 7 个步骤,我们将需要的固件库相关文件复制到了我们的工程目录下面,下面我们将 这些文件加入我们的工程中去。右键点击 Target1,选择 Manage Project Items.
在这里插入图片描述
-9.Project Targets 一栏,我们将 Target 名字修改为 Template,然后在 Groups 一栏删掉一个 Source Group1,建立三个 Groups:USER,CORE,FWLIB。然后点击 OK,可以看到我们的 Target 名字以及 Groups
在这里插入图片描述
在这里插入图片描述
-10. 下面我们往 Group 里面添加我们需要的文件。我们按照步骤 9 的方法, 右键点击点击 Tempate,选择选择 Manage Project Items.然后选择需要添加文件的 Group,这里第一步我 们选择 FWLIB,然后点击右边的 Add Files,定位到我们刚才建立的目录FWLIBsrc 下面, 将里面所有的文件选中(Ctrl+A),然后点击 Add,然后 Close.可以看到 Files 列表下面包含 我们添加的文件,如下图 3.3.2.15。 这里需要说明一下,对于我们写代码,如果我们只用到了其中的某个外设,我们就可以不 用添加没有用到的外设的库文件。例如我只用 GPIO,我可以只用添加 stm32f4xx_gpio.c 而 其他的可以不用添加。这里我们全部添加进来是为了后面方便,不用每次添加,当然这样 的坏处是工程太大,编译起来速度慢,用户可以自行选择。
在这里插入图片描述
这里有个文件 stm32f4xx_fmc.c 比较特殊。这个文件是 STM32F42 和 STM32F43 系列才用到, 所以我们这里要把它删掉(注意是 stm32f4xx_fmc.c 要删掉,不要删掉 stm32f4xx_fsmc.c)。
在这里插入图片描述
-11. 用同样的方法,将 Groups 定位到 CORE 和 USER 下面,添加需要的文件。这里我们的 CORE 下面需要添加的文件为 startup_stm32f40_41xxx.s(注意,默认添加的时候文件类 型为.c,也就是添加 startup_stm32f40_41xxx.s 启动文件的时候,你需要选择文件类型为 All files 才能看得到这个文件 ) , USER 目 录 下 面 需 要 添 加 的 文 件 为 main.c , stm32f4xx_it.c , system_stm32f4xx.c。 这样我们需要添加的文件已经添加到我们的工程中去了,最后点击 OK, 回到工程主界面。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

[1] [2]
关键字:STM32  库函数  工程模板 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic497985.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32之寄存器开发
下一篇:案例说明stm32官方库函数使用方法 (库版本v3.5, Keil MDK 5)

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32MxCube配置串口
基于上一次将第一章:STM32MxCube 基本使用方法,本章直接讲叙述STM32配置串口2的。查看STM32F407电路图:可得USART2接在PA2、PA3。下面新建STM32MxCube工程,开始配置。这里我们配置IO(定义PF9、PF10引脚为LED)、RCC(使用HSE)、USART(串口)。配置USART(串口)USART的配置有好几种,也是最常见的一种”UART异步串行通信”配置来讲述。选择USART2模式为“asynchronous”(异步通信)对应的引脚自动转换为USART。对于系统时钟应该都知道它的作用,就是驱动整个芯片工作的心脏,如果没有了它,就等于人没有了心跳。时钟的快慢也就决定了程序的快慢。STM32
发表于 2020-05-04
STM32MxCube配置串口
STM32CubeMX学习教程之一:GPIO输出之跑马灯
完整源码下载:https://github.com/simonliu009/STM32CubeMX-GPIO-Control软件版本:STM32CubeMX V4.25.0 System Workbench V2.4固件库版本:STM32Cube FW_F1 V1.6.1硬件:OneNet 麒麟座V2.3在STM32CubeMX中新建项目,选择正确的MCU型号首先设置RCC和SYS,如下图然后根据板子实际情况设置时钟(麒麟座外部晶振是12M,STM32F103x的最高主频是72M),如下图GPIO设置 PC7, PC8, PA12和 PC10为GPIO_OUTPUT, (这是麒麟座V2.3的四个LED管脚),如下图
发表于 2020-05-04
STM32CubeMX学习教程之一:GPIO输出之跑马灯
STM32CubeMX学习--(3)串口通信
Cube配置USART配置在Connectivity中选中USART1MODE = AsynchronousHardware Flow Control = DisableParameter Settings中配置Baud Rate = 115200Word Length = 8bitParity = NoneStop Bits =1Data Direction = Receive and TransmitOver Sampling = 16 SamplesNVIC Setting勾选Enable,Preemption Priority =2生成代码修改代码生成代码后,即可使用HAL_UART_Transmit_IT(&
发表于 2020-04-29
STM32CubeMX系列教程 5.0版本环境开发——2.Uart串行通信功能
;                         PS:在明白原理的情况下建议自己手写一次模拟UART。明白了之后,代码重复的事就由STM32芯片的硬件功能来实现就可以了,你只需要会看逻辑分析仪或者示波器分析数据便可。 所谓硬件功能 就是你把数据填充到寄存器,然后配置好相关参数,他会自动帮你发送出去。通俗点说,自己手写整个协议代码实现实现就像你自己把一个快件送到到别人那里再回来,而硬件功能则是你把快件给快递员,快递员帮你送过去。  明显 后者会帮你节省大量时间和精力。它是一个硬件组成,并且你也为此付费
发表于 2020-04-29
STM32CubeMX系列教程 5.0版本环境开发——2.Uart串行通信功能
串口通信(用CubeMX学习STM32)
前言: STM32串口介绍串行通信是单片机与外部设备或其他计算机交换信息的一个方式, 数据一位一位的按顺序传送, 其优点是只需要一条传输线, 协议简单, 但是缺点就是传送速度较慢。串口是单片机上非常便捷的一个工具, 当写程序需要调试的时候, 它可以很方便的提供调试方法, 只要在一些关键代码执行的地方, 通过串口给串口调试助手发送相关信息, 就可以使我们很方便的查看代码在这个位置的执行情况。下面看一下我所使用的单片机上串口的原理图接线外部的发送端TXD就是单片机串口的接收端USART_RX,   外部接收端RXD就是单片机串口的发送端USART_TXTXD : Transmit(TX) Data(D)  Receive(RX
发表于 2020-04-29
【STM32CubeMX】 串口通信(USART) Printf重定向
STM32CubeMX: Version 4.26.1MDK-ARM: Version 5.24.2开发板: 中移onenet 麒麟座MINI板芯片: STM32F103CBT61.STM32CubeMX设置设置外部时钟源设置Debug设置串口 使用USART1 PA9,PA10设置时钟频率设置USART1详细参数生成MDK-ARM工程2.重定向Printf 及 Scanf主要用到两个函数HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout
发表于 2020-04-29
【STM32CubeMX】 串口通信(USART) Printf重定向
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved