STM32标准库(固件库)分析

STM32标准库(固件库)分析

STM32标准外设库(固件库)概述

STM32标准外设库之前的版本也称固件函数库或简称固件库,是⼀个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每⼀个外设的驱动描述和应⽤实例,为开发者访问底层硬件提供了⼀个中间API,通过使⽤固件函数库,⽆需深⼊掌握底层硬件细节,开发者就可以轻松应⽤每⼀个外设。因此,使⽤固态函数库可以⼤⼤减少⽤户的程序编写时间,进⽽降低开发成本。每个外设驱动都由⼀组函数组成,这组函数覆盖了该外设所有功能。每个器件的开发都由⼀个通⽤API (application programming interface 应⽤编程界⾯)驱动,API对该驱动程序的结构,函数和参数名称都进⾏了标准化。

使用标准外设库开发的优势

简单的说,使用标准外设库进行开发最大的优势就在于可以使开发者不用深入了解底层硬件细节就可以灵活规范的使用每一个外设。标准外设库覆盖了从GPIO到定时器,再到CAN、I2C、SPI、UART和ADC等等的所有标准外设。对应的C源代码只是用了最基本的C编程的知识,所有代码经过严格测试,易于理解和使用,并且配有完整的文档,非常方便进行二次开发和应用。

STM32F10XXX标准外设库结构与⽂件描述

标准外设库的文件结构(STM32F10x_StdPeriph_Lib_V3.5.0)

在这里插入图片描述

文件夹说明
_htmresc存放CMSIS LOGO图标和ST公司的LOGO图标
Libraries库源码和启动文件
ProjectST公司提供的外设驱动例程和标准库工程模板
UtilitiesST官方评估板的例程,一般不需要用到
Release_Notes.html库版本更新说明
stm32f10x_stdperiph_lib_um.chm库使用帮助文档

在使用标准库开发时,我们需要把Libraries目录下的库函数文件添加到工程中,并查阅库帮助文档来了解ST提供的库函数,这个文档说明了每一个库函数的使用方法。

Libraries

灰色底的表示文件夹,白底的表示文件

在这里插入图片描述

core_cm3.c、core_cm3.h

这两个文件位于“Libraries\CMSIS\CM3\CoreSupport”目录下,说明此文件属于CMSIS标准文件,是用来提供进入M3内核的接口文件,属于CMSIS的核心文件,由ARM提供。对于所有M3内核的芯片来说这个文件都是相同的,不需要我们修改。

CMSIS标准的英文全称是Cortex Microcontroller Software Interface Standard,翻译过来就是ARM Cortex微控制器软件接口标准。因为基于Cortex内核的芯片生产厂商有很多,不只是ST公司。为了解决不同厂家生产的Crotex芯片软件兼容问题,ARM公司和其他芯片厂商制定了这个CMSIS标准。

在这里插入图片描述

基于CMSIS标准的软件架构主要分为以下4层:
用户应用层、操作系统及中间件接口层、CMSIS层、硬件寄存器层。

其中CMSIS层起着承上启下的作用:

  • 一方面该层对硬件寄存器层进行统一实现,屏蔽了不同厂商对Cortex-M系列微处理器核内外设寄存器的不同定义;
  • 另一方面又向上层的操作系统及中间件接口层和应用层提供接口,简化了应用程序开发难度,使开发人员能够在完全透明的情况下进行应用程序开发。

其中ARM提供了下列部分:

内核设备访问层:包含了用来访问内核的寄存器设备的函数。

中间设备访问层:为软件提供了访问外设的通用方法。芯片供应商应当修改中间设备访问层,以适应中间设备组件用到的微控制器上的外设。

芯片供应商扩展下列软件层:

外设访问层:提供片上所有外设定义的函数。

CMSIS 层在整个系统中是处于中间层,向下负责与内核和各个外设直接打交道,向上提供实时操作系统用户程序调用的函数接口。如果没有 CMSIS 标准,那么各个芯片公司就会设计自己喜欢的风格的库函数,而 CMSIS 标准就是要强制规定,芯片生产公司设计的库函数必须按照 CMSIS 这套规范来设计。

其实不用这么讲这么复杂的,一个简单的例子,我们在使用 STM32 芯片的时候首先要进行系统初始化,CMSIS 规范就规定,系统初始化函数名字必须为 SystemInit,所以各个芯片公司写自己的库函数的时候就必须用 SystemInit 对系统进行初始化。CMSIS 还对各个外设驱动文件的文件名字规范化,以及函数名字规范化等等一系列规定。比如函数GPIO_ResetBits 这个函数名字也是不能随便定义的,是要遵循 CMSIS 规范的。

stm32f10x.h

stm32f10x.h是STM32F10x的头文件,类似于51单片机的reg.51,在开发STM32F10x程序的时候基本上都会调用这个头文件,可见其重要性。此文件内部封装了STM32的总线、内存和外设寄存器等,实现了内核之外的外设寄存器映射,同时该文件还包含了一些时钟相关的定义和中断相关定义等。

system_stm32f10x.c、system_stm32f10x.h

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

startup_stm32f10x_xd.s

编译器启动文件;在后面创建工程模板时,要将STM32的启动文件添加进来,否则系统不能启动。ST固件库提供的启动文件有多,需根据使用的STM32芯片来选择,若开发板上使用的是高容量的STM32F1芯片,选择startup_stm32f1 0x_hd.s启动文件

启动文件主要是进行堆栈之类的初始化,中断向量表以及中断函数定义。启动文件要引导进入main 函数

文件说明
startup_stm32f10x_ld.sSTM32小容量产品启动文件
startup_stm32f10x_md.sSTM32中容量产品启动文件
startup_stm32f10x_hd.sSTM32大容量产品启动文件

小容量:FALSH<=32K

中容量:64K<=FLASH<=128K

大容量:256K<=FLASH

在startup这个目录下,还有很多文件夹,如"arm"、“gcc_ride7”、“iar”、“TrueSTUDIO”,这些文件夹下包含了对应编译平台的汇编启动文件,在实际使用时要根据编译平台来选择。我们使用的 MDK 启动文件在"arm"文件夹中。

文件夹说明
armMDK ARM编译器启动文件
gcc_ride7GCC编译器启动文件
iarIAR编译器启动文件
TrueSTUDIOTrueSTUDIO编译器启动文件

拓展:TrueSTUDIO(TrueStudio)是意法半导体公司针对STM32开发的一款全新的编译软件。TrueStudio是一个强大的基于Eclipse的C / C++集成开发工具。

TrueStudio for STM32是一个灵活的、可扩展的IDE和调试STM32单片机的强大工具。TrueStudio基于开放标准(Eclipse和GNU)和扩展代码的专业特点,给系统的结构和动态行为提供了独特的见解。特别是,TrueStudio for STM32开发商提供广泛的选择,系统的分析功能,帮助他们评估从各种角度设计的合理性、包括内存和堆栈的使用,静态分析以及可视化的运行系统的动态行为。TrueStudio除了支持Windows64位操作系统之外,还增加了对Linux系统的支持

特点:1.免费 2.建立在Eclipse CDT、GCC、GDB 3.项目管理 4.项目向导 5.进口商 6.配置工具 7.cmsis-pack 8.编辑 9.先进的代码编辑 10.导航、重构、样式和结构可视化 11.编译器和构建工具 12.高度优化的C/C++编译器 13.汇编程序、链接器和实用程序 14.内存和堆栈分析器来查找无法识别的bug,研究源代码。 15.具有先进的跟踪、可视化和分析功能的RTOS感知调试器 16.st-link和J-Link的支持 17.错误和问题跟踪系统,如bugzilla,追踪客户,螳螂 18.版本控制系统客户端的颠覆(SVN),Git和CVS 19.源代码审查 20.技术支持

misc.h、misc.c

因为STM32 V3.5版本的库函数中没有原来版本中单独对于NVIC(中断向量嵌套)的外设驱动,把NVIC的外设驱动放在了misc.c中,实际上是代替原来的stm32f10x_nvic.c.

stm32f10x.PPP.h、stm32f10x.PPP.c

外设驱动函数文件;包括了相关外设的初始化配置和部分功能应用函数,这部分是进行编程功能实现的重要组成部分。

比如stm32f10x_gpio.c文件,里面已经封装好操作GPIO外设底层的内容,提供给我们使用的是一些API函数。stm32f10x_ppp.h就是对应的头文件。PPP都代指外设名称

stm32f10x.PPP.c和stm32f10x.PPP.h与下面类似

在这里插入图片描述

标准外设库中的主要外设均采用了缩写的形式,通过这些缩写可以很容易的辨认对应的外设。

缩写外设/单元
ADC模数转换器
BKP备份寄存器
CAN控制器局域网模块
CEC消费电子控制,如HDMI(高清多媒体接口)
CRCCRC计算单元
DAC数模转换器
DBGMCU调试支持
DMA直接内存存取控制器
EXTI外部中断事件控制器
FLASH闪存存储器
FSMC灵活的静态存储器控制器
GPIO通用输入输出
I2CI2C接口
IWDG独立看门狗
PWR电源/功耗控制
RCC复位与时钟控制器
RTC实时时钟
SDIOSDIO接口
SPI串行外设接口
TIM定时器
USART通用同步/异步收发器
WWDG窗口看门狗
Project

在这里插入图片描述

此文件夹下有2个目录,STM32F10x_StdPeriph_Examples文件夹存放的是ST公司提供的外设驱动例程,在开发过程中可以借鉴这些例程快速构建自己的外设驱动。有时间大家可以看看,里面的编程思路对我们还是很有帮助的。

STM32F10x_StdPeriph_Templates文件夹存放的是官方的标准库工程模板,我们后面创建自己工程模板的时候就需要复制此文件夹内的几个文件。

文件说明
EWARMIAR EWARM的项目模板示例
MDK-ARMKEIL MDK的项目模板示例
RIDERaisonance RIDE的项目模板示例
TrueSTUDIOTrueSTUDIO的项目模板示例
main.c

用户程序文件,通过标准外设库提供的接口进行相应的外设配置和功能设计。

stm32f10x.it.c、stm32f10x.it.h

stm32f10x_it.c文件用于存放中断函数,不过中断函数也可以放在其他工程文件内,所以这个文件很少操作,对应的stm32f10x_it.h文件是它的头文件。用户可以相应的加入自己的中断程序的代码,对于指向同一个中断向量的多个不同中断请求,用户可以通过判断外设的中断标志位来确定准确的中断源,执行相应的中断服务函数。

这个文件是专门用来编写中断服务函数的,在我们修改前,这个文件已经定义了一些系统异常(特殊中断)的接口,其它普通中断服务函数由我们自己添加。

stm32f10x_conf.h

stm32f10x_conf.h文件是外设驱动配置文件,通过更改包含的外设头文件来选择固件库所使用的外设,在新建程序和进行功能变更之前应当首先修改对应的配置。这个文件被包含进 stm32f10x.h 文件中。

文件作用说明汇总

在这里插入图片描述

在这里插入图片描述

图中Application.c一般又写成main.c

用户相关应用文件5个(main.c、stm32f10x.conf.h、stm32f10x_it.c、stm32f10x_it.h、system_stm32f10x.c),无论是哪种开发工具构建的STM32F10x工程,用户的具体应用都只与这5个文件有关。这样,在同一 型号的微控制器上开发不同应用时,不须修改相关开发工具目录下的工程文件,只需要用新写的应用程序文件替换这5个文件即可

STM32F10xxx标准外设库体系结构图

在这里插入图片描述

下面图片是stm32f10xx的库文件关系

在这里插入图片描述

STM32F10x_StdPeriph_Lib_V3.5.0目录树

在这里插入图片描述

参考:

https://www.guyuehome.com/37364

https://blog.51cto.com/dlican/5108811

https://blog.51cto.com/u_3619476/3731053

  • 26
    点赞
  • 168
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STM32H7是意法半导体(STMicroelectronics)推出的一款高性能微控制器系列。STM32H7系列采用了ARM Cortex-M7内核,主频高达400MHz,具有丰富的外设接口和强大的计算能力。标准固件是STMicroelectronics针对STM32系列推出的软件开发包,用于简化MCU的驱动开发和应用程序编写。 STM32H7标准固件是专门为STM32H7系列微控制器设计的,包含了一系列的驱动函数和API接口,可以直接调用这些函数和接口来操作外设,实现各种功能。标准固件提供了丰富的函数,涵盖了GPIO、UART、SPI、I2C、定时器、ADC、DAC、USB等常用外设以及各种通信协议。 使用STM32H7标准固件可以大大提高开发效率,开发人员不需要从零开始编写底层驱动代码,只需根据需要调用相应的函数接口即可。同时,标准固件也提供了一些示例代码和模板,可以帮助开发人员快速上手和理解。 除了标准固件,Firmware也提供了与特定外设和功能相关的扩展,如LCD、SD卡、以太网、加密等。开发人员可以根据需要选择使用这些扩展,以满足特定项目的需求。 总之,STM32H7标准固件是为STM32H7系列微控制器提供的软件开发包,它提供了丰富的驱动函数和API接口,可简化MCU的驱动开发和应用程序编写,大大提高开发效率。同时,也可以结合扩展使用,满足更高级别的功能需求。 ### 回答2: STM32H7标准固件是STMicroelectronics公司为STM32H7系列微控制器提供的一套软件开发工具,用于简化和加快开发人员在STM32H7系列微控制器上进行嵌入式应用程序开发的过程。 STM32H7标准固件具有以下特点和功能: 1. 全面的外设驱动支持:标准固件提供了对STM32H7系列微控制器各种外设的驱动支持,包括GPIO、SPI、I2C、UART、CAN等。这些驱动函数可以方便地配置和控制外设,并且保证了应用程序的通用性和可移植性。 2. 丰富的中间件支持:标准固件还提供了多种中间件支持,如USB、文件系统、RTOS等。这些中间件可以方便地集成到应用程序中,帮助开发人员实现更复杂和功能强大的应用。 3. 可定制性和扩展性:标准固件允许开发人员对中的驱动和功能进行定制和扩展,以满足特定应用的需求。通过提供各种高级编程接口和配置选项,开发人员可以按照自己的需求进行灵活的定制。 4. 完善的工具支持:标准固件与STMicroelectronics的开发工具紧密集成,如STM32CubeIDE、Keil MDK等。这些工具提供了丰富的调试和分析功能,可以帮助开发人员更好地进行调试和优化。 总之,STM32H7标准固件是一个强大而灵活的软件开发工具,可以大大简化和加速在STM32H7系列微控制器上的嵌入式应用程序开发过程。无论是初学者还是经验丰富的开发人员,都可以通过使用标准固件来快速实现高性能的嵌入式应用程序。 ### 回答3: STM32H7标准固件是STMicroelectronics为其STM32H7系列微控制器提供的一套软件包。它包含了一系列针对STM32H7系列微控制器的低级驱动程序、中间件和一些例程。这个标准固件提供了丰富的功能和强大的性能,可以帮助开发者更加高效地开发基于STM32H7系列微控制器的应用。 标准固件包含的低级驱动程序可以方便地控制外设、GPIO口、串口、SPI、I2C等硬件资源,减少开发者在底层驱动开发上的工作量,加快产品上市时间。中间件包括了常用的图形、文件系统、USB协议等,可以帮助开发者更加方便地实现一些高级功能,并提升用户体验。此外,标准固件还提供了一些例程,展示了如何使用中的功能,帮助开发者快速入门。 STM32H7标准固件结构清晰,易于理解和使用。它提供了丰富的API接口,方便开发者进行各种操作。开发者可以根据自己的需求选择需要的功能模块,减少代码冗余和内存占用。此外,STMicroelectronics还提供了详细的文档和示例代码,帮助开发者学习和使用标准固件。 总之,STM32H7标准固件是一套功能强大、易用性高的软件包,可以帮助开发者快速、高效地开发基于STM32H7系列微控制器的应用。它提供了丰富的功能和完善的技术支持,是开发者们的得力助手。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值