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 | 库源码和启动文件 |
Project | ST公司提供的外设驱动例程和标准库工程模板 |
Utilities | ST官方评估板的例程,一般不需要用到 |
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.s | STM32小容量产品启动文件 |
startup_stm32f10x_md.s | STM32中容量产品启动文件 |
startup_stm32f10x_hd.s | STM32大容量产品启动文件 |
小容量:FALSH<=32K
中容量:64K<=FLASH<=128K
大容量:256K<=FLASH
在startup这个目录下,还有很多文件夹,如"arm"、“gcc_ride7”、“iar”、“TrueSTUDIO”,这些文件夹下包含了对应编译平台的汇编启动文件,在实际使用时要根据编译平台来选择。我们使用的 MDK 启动文件在"arm"文件夹中。
文件夹 | 说明 |
---|---|
arm | MDK ARM编译器启动文件 |
gcc_ride7 | GCC编译器启动文件 |
iar | IAR编译器启动文件 |
TrueSTUDIO | TrueSTUDIO编译器启动文件 |
拓展: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(高清多媒体接口) |
CRC | CRC计算单元 |
DAC | 数模转换器 |
DBGMCU | 调试支持 |
DMA | 直接内存存取控制器 |
EXTI | 外部中断事件控制器 |
FLASH | 闪存存储器 |
FSMC | 灵活的静态存储器控制器 |
GPIO | 通用输入输出 |
I2C | I2C接口 |
IWDG | 独立看门狗 |
PWR | 电源/功耗控制 |
RCC | 复位与时钟控制器 |
RTC | 实时时钟 |
SDIO | SDIO接口 |
SPI | 串行外设接口 |
TIM | 定时器 |
USART | 通用同步/异步收发器 |
WWDG | 窗口看门狗 |
Project
此文件夹下有2个目录,STM32F10x_StdPeriph_Examples文件夹存放的是ST公司提供的外设驱动例程,在开发过程中可以借鉴这些例程快速构建自己的外设驱动。有时间大家可以看看,里面的编程思路对我们还是很有帮助的。
STM32F10x_StdPeriph_Templates文件夹存放的是官方的标准库工程模板,我们后面创建自己工程模板的时候就需要复制此文件夹内的几个文件。
文件 | 说明 |
---|---|
EWARM | IAR EWARM的项目模板示例 |
MDK-ARM | KEIL MDK的项目模板示例 |
RIDE | Raisonance RIDE的项目模板示例 |
TrueSTUDIO | TrueSTUDIO的项目模板示例 |
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
STM32标准库(固件库)分析相关推荐
- stm32f4xx标准外设固件库
原文网址:http://www.cnblogs.com/King-Gentleman/p/4369381.html STM32F4的相关资料:http://www.stmcu.org/document ...
- stm32f4xx标准外设固件库(By King先生)
原文网址:http://www.cnblogs.com/King-Gentleman/p/4369381.html STM32F4的相关资料:http://www.stmcu.org/document ...
- stm32添加了固件库但是找不到h文件
stm32添加了固件库但是找不到h文件 像我就会经常使用别的的工程,有时候在上面添加一个功能可能会遇见这种情况. . -\SYSTEM\adc\adc.c(12): error: #20: ident ...
- 【STM32】手把手固件库开发工程建立
再来复习一遍固件库开发方式的工程建立方法吧 -----针对STM32F10x系列(示例为F103C8T6,开发环境为MDK5) 目录 1 创建工程 2 在工程文件夹中手动创建四个文件夹 3 在固件库文 ...
- 学习使用Free RTOS ,移植最新的STM32 v3.5固件库
最近拿到了一块万利的EK-STM32F的学习板,打算先用它来熟悉下STM32的编程环境,不过在这过程中和一个同事聊的时候觉得如果只调用STM32的库写程序,可能在芯片资源的利用上面可能就会差一点,在这 ...
- STM32官方固件库
1 基于标准外设库的软件开发 1.1 STM32标准外设库概述 STM32标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序.数据结构和宏组成,包括了微控制器所有外设的性能特征 ...
- STM32如何下载官方固件库
ST官网拥有好多权威的资料库和例程固件库.在ST官网获取stm32f103c8t6标准例程固件库 1)登陆ST官网 官网参考网页 2)点击右上角登陆或者注册 3)当登陆成功时,点击Products-& ...
- STM32 固件库外设 GPIO 讲解(关于 GPIO 寄存器讲解)
GPIO 外设讲解 通过博主上一篇博客,相信大家已经初步了解到了对于 STM32 的控制原理,但是 STM32 到外设 / 引脚有这么多,是要一个一个的去记住它的地址?或者每一次使用一个外设都要看一下 ...
- STM32F407学习_搭建固件库工程模板
1.标准外设库概述 STM32标准外设库是一个固件函数包,它由程序.数据结构和宏组成,包括了微控制器所有外设的性能特征.该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间 ...
- STM32如何配置HAL库
STM32如何配置HAL库 前言 相比较早几年使用标准库开发来讲,最近几年HAL库的使用是越来越多,那么我们开发应当使用哪一种呢,本文着重介绍常用的几种开发方式及相互之间的区别,白猫也好.黑猫也好 ...
最新文章
- java的知识点13——多态、对象的转型(casting)、final关键字、抽象方法和抽象类、接口的作用、如何定义和使用接口?、接口的多继承、面向接口编程
- python 逗号作用 语句间_Python中逗号的三种作用
- [MySQL 优化] 移除多余的checksum
- 数据库oracle 别名不能更新,数据库oracle改成mysql后Hibernate不能使用别名问题
- 企业战略咨询方法:学习SWOT分析
- vue 怎么样不重复往数组里插入数据_前端数据结构与算法(1) -二分查找vs二叉树...
- wetech-cms内容管理系统源码
- c++ 多线程 垃圾回收器_JavaSE基础代码(3)--JavaSE程序入口,JDK,JRE,JVM垃圾回收器的关系与作用...
- strcmp函数原型 C语言
- IDEA新手使用教程(详解)
- linux tar 命令无效,linux Tar 命令
- 用光敏电阻实现光源跟踪
- uni-app富文本图片太大溢出以及富文本显示问题
- JS 如何将 HTML 页面导出为 PDF
- JMeter参数化post请求
- 基于FPGA的PCIe接口实现(具体讲解了数据流向)
- 2021.12.9 java代码对接sap接口(soap协议、webservice)
- java双精度怎么比较?误差怎么办?javaDouble类型怎么比较大小?
- 伪彩色图像(RGB彩色空间)
- orangepi pc lubuntu 设置分辨率
热门文章
- 计算机组成原理基本试题,计算机组成原理试卷
- java项目技术方案_JavaWeb应用开发项目设计方案.doc
- Qt开发之路——SogouInput\Components\ Error - RtlWerpReportException failed with status code :-107374182
- springboot+vue+Elementui宠物医院管理系统java项目
- 通信原理之数字调制原理
- 适用于protel99SE初学者
- JAVA集合容器源码解析
- 统计叶子结点c语言,统计二叉树中叶子结点个数
- 【千份热门课后习题答案大全】
- VC运行库修复安装一键安装