第12章.STM32标准库简介

目录

0. 《STM32单片机自学教程》专栏

12.1  CMSIS 标准 

12.2 STM32标准库文件结构

12.2.1 主结构

12.2.2 Libraries固件库文件

CMSIS文件夹               

1.core_cm3.c&core_cm3.h

 2.startup启动文件

3.Stm32f10x.h

4.system_stm32f10x.c&system_stm32f10x.h

STM32F10x_StdPeriph_Driver 文件夹 

stm32f10x_it.c & stm32f10x_conf.h & system_stm32f10x.c 文件

12.3 库文件之间的关系 


0. 《STM32单片机自学教程》专栏

        本文作为专栏《STM32单片机自学教程》专栏其中的一部分,返回专栏总纲,阅读所有文章,点击Link:  

STM32单片机自学教程-[目录总纲]_stm32 学习-CSDN博客     

        前面我们介绍了库函数的开发过程,有些单片机功能非常多,我们一个个去写库函数是不现实的,也是没有必要的,我们只需要大致了解原理和过程就足够了,学习他们构建库函数的思路和优美的实现过程。对我们开发人员来说,没有必要也没有意义挨个去捋一遍,学海无涯,人生苦短,在这个知识爆炸迭代快速的时代,点到即止方为上策。正常情况下,芯片厂商会提供自己芯片的库函数,我们只需要学会使用就够了。ST公司提供了针对STM32芯片的标准软件库,包含了STM32芯片所有寄存器的控制操作,我们学会使用ST标准库,对STM32的开发是极为重要的。

12.1  CMSIS 标准 

        基于Cortex系列芯片采用的内核是相同的,主要区别是片上外设的差异,这些差异却导致软件在同内核,不同外设的芯片上移植困难。于是CMSIS标准应运而生。

        CMSIS(Cortex Microcontroller Software Interface Standard)是ARM Cortex微控制器的软件接口标准。这个标准由ARM公司联合一些芯片厂商制定,旨在为使用ARM Cortex-M系列处理器的嵌入式系统开发提供一个统一的软件接口,解决不同的芯片厂商生产的  Cortex 微控制器软件  的兼容性问题。这个和汽车行业的AUTOSAR软件标准的出发点是完全一致的。

        不管什么标准,解决兼容和便于移植问题的主要方法,都是进行“抽象”,或者进行“层层抽象”。就和我们写C代码一样,程序里把一些和硬件相关的数字都用宏定义,操作函数名等都标准化,这样不管硬件怎么换,我们只需要修改下宏定义就完事了。 CMSIS 标准自然也不例外。

        简单来说,CMSIS标准的主要内容和目标如下:

  1. 标准化接口:它定义了一套标准的API(应用程序接口),使得软件开发者能够以一种统一的方式来访问和控制Cortex-M微控制器的各种硬件特性,如处理器核心、内存、中断和外设等。

  2. 提高可移植性:由于接口是标准化的,因此开发者编写的代码可以更容易地在不同的Cortex-M微控制器之间移植,而无需进行大量的修改。

  3. 简化开发:CMSIS提供了一组库函数,封装了底层硬件的复杂性,使得开发者能够更专注于实现应用逻辑,而不是处理底层的硬件细节。

  4. 外设驱动标准化:CMSIS还尝试对外设驱动进行标准化,使得外设的使用也变得更加简单和一致。

        通过实施CMSIS标准,嵌入式系统的开发变得更加高效、可预测,并且降低了将软件从一个微控制器迁移到另一个微控制器的成本。这对于需要快速迭代和适应不断变化的市场需求的嵌入式系统开发来说是非常重要的。CMSIS的架构图如图12.1-1所示:

图12.1-1 CMSIS架构图 

        CMSIS 标准中最主要的为 CMSIS 核心层,它包括了:
        内核函数层:其中包含用于访问内核寄存器的名称、地址定义,主要由  ARM 公司提
供。
        设备外设访问层:提供了片上的核外外设的地址和中断定义,主要由芯片生产商提供。
        CMSIS 层位于硬件层与操作系统或用户层之间,提供了与芯片生产商无关的硬件抽象层,可以为接口外设、实时操作系统提供简单的处理器软件接口,屏蔽了硬件差异。通过使用CMSIS标准,开发人员可以更加专注于实现应用程序的功能,而无需过多关注底层硬件的细节,也提高了软件的可移植性。 

12.2 STM32标准库文件结构

12.2.1 主结构

       

图12.2-1  STM32标准库文件目录

        STM32的标准库函数文件夹“STM32F10x_StdPeriph_Lib_V3.5.0”打开后的结构如图12.2-1所示. 主要的文件简介如下:

         Libraries:最核心重要的一个文件文件夹里是驱动库的源代码及启动文件,我们使用的固件库就在这个文件夹里面。

        Project:文件夹里是用标准库写的例程和工程模板,每个外设都有写好的例程,这对我们非常有借鉴意义,我们在开发和学习过程中可以参考这里面的例子。

        Utilities:基于 ST 官方实验板的例程,这个我们开发过程不需要,可直接略过。

        stm32f10x_stdperiph_lib_um.chm:  库帮助文档,一个编译好的HTML文件,不喜欢看源码的可以在这个文档中查询每个外设的函数说明。

12.2.2 Libraries固件库文件

        在Libraries 文件夹可以看到CMSIS 和STM32F10x_StdPeriph_Driver 两个文件夹,分别代表了内核与外设相关的库文件 。 

CMSIS文件夹               
1.core_cm3.c&core_cm3.h

 图12.2-2  CMSIS文件目录 

        CMSIS是内核相关的文件,文件夹中最主要的是CM3这个文件夹,其他的都是文档性质的,不重要。 红色虚线框内的文件是后续我们新建工程时需要用到的文件。

        在CoreSupport文件夹中有core_cm3.c和core_cm3.h两个文件。Core_cm3.h头文件里面实现了内核的寄存器映射,对应外设头文件stm32f10x.h,区别是一个针对内核的外设,一个针对片上外设。core_cm3.c文件实现了一下操作内核外设寄存器的函数,实际开发过程中用的比较少。core_cm3.h头文件中还包含了“stdint.h”这个头文件,这是一个ANSIC文件,是独立于处理器之外的,就像我们熟知的C语言头文件“stdio.h”文件一样,主要作用是提供一些类型定义。 这些类型定义屏蔽了在不同芯片平台,相同数据类型大小的差异,如 int 的大小是 16 位,还是 32 位。

/* exact-width signed integer types */   
typedef   signed          char int8_t;    
typedef   signed short     int int16_t;    
typedef   signed           int int32_t;    
typedef   signed       __int64 int64_t;  
/* exact-width unsigned integer types */   
typedef unsigned          char uint8_t;    
typedef unsigned short     int uint16_t;    
typedef unsigned           int uint32_t;    
typedef unsigned       __int64 uint64_t; 
 2.startup启动文件

        startup/arm 这个文件夹里是启动文件  ,这里面启动文件有很多个,不同型号的STM32控制器用的启动文件不一样,这个以前我们在前面章节《第10章.创建MDK工程-寄存器版》的“10.2.4 添加分组及文件”小节中已经介绍过,这里我们不再赘述。STM32F103C8T6对应的是md结尾的启动文件。

3.Stm32f10x.h

        Stm32f10x.h头文件实现了片上外设的所有寄存器的映射,在内核中与之想对应的头文件是 core_cm3.h,非常重要的一个文件。

4.system_stm32f10x.c&system_stm32f10x.h

        system_stm32f10x.c文件的功能是STM32的时钟配置,操作的是片上的RCC这个外设。系统在上电之后,首选会执行由汇编编写的启动文件,启动文件中的复位函数中调用的SystemInit函数就在这个文件里面定义。调用完之后,系统的时钟就被初始化成72M。

STM32F10x_StdPeriph_Driver 文件夹 

        STM32F10x_StdPeriph_Driver文件夹主要是外设的驱动函数,文件夹里有 inc(include 的缩写)和 src(source 的简写)两个文件夹。src 里面是每个外设的驱动源程序,inc 则是相对应的外设头文件。src 及 inc 文件夹是 ST 标准库的主要内容,每个外设对应一个.c  和.h  后缀的文件。如上一章中我们自建的 stm32f10x_gpio.c 及stm32f10x_gpio.h 文件。 这类外设文件命名都是按一定规律的:stm32f10x_XXX.c 和stm32f10x_XXX.h 文件,XXX 表示外设名称。如图12.2-3  外设驱动函数及头文件。

        这两个文件夹中,misc.c 文件较为特殊,显得格格不入,这个文件提供了外设对内核中的
NVIC(中断向量控制器)的访问函数,在配置中断时,我们需要把这个文件添加到新建工程中。

图12.2-3  外设驱动函数及头文件 

stm32f10x_it.c & stm32f10x_conf.h & system_stm32f10x.c 文件

        在STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template这个文件目录下,有官方的一个库工程模板,我们后面在新建工程时 ,  需 要 添 加 这 个 目 录 下 的4个文件:  stm32f10x_it.c 、 stm32f10x_it.h 、 stm32f10x_conf.h 和system_stm32f10x.c。

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

        system_stm32f10x.c前面已经讲过,此处略过。

        stm32f10x_conf.h主要是用来将所有外设的头文件集中起来。这个文件被包含进  stm32f10x.h  文件。当我们使用固件库编程的时候,如果需要某个外设的驱动库,就需要包含该外设的头文件stm32f10x_XXX.h,如果用了很多外设,就需要包含很多头文件,这确实很麻烦。我们用一个头文件stm32f10x_conf.h 把这些外设的头文件都包含在里面,我们会只用包含这一个头文件,就可以把所有外设的头文件包含进来。Stm32f10x_conf.h 见代码如下。默认情况下是所有头文件都被包含进来。我们当然也可以把不需要的注释掉。

#include "stm32f10x_adc.h"
#include "stm32f10x_bkp.h"
#include "stm32f10x_can.h"
#include "stm32f10x_cec.h"
#include "stm32f10x_crc.h"
#include "stm32f10x_dac.h"
#include "stm32f10x_dbgmcu.h"
#include "stm32f10x_dma.h"
#include "stm32f10x_exti.h"
#include "stm32f10x_flash.h"
#include "stm32f10x_fsmc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_i2c.h"
#include "stm32f10x_iwdg.h"
#include "stm32f10x_pwr.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_rtc.h"
#include "stm32f10x_sdio.h"
#include "stm32f10x_spi.h"
#include "stm32f10x_tim.h"
#include "stm32f10x_usart.h"
#include "stm32f10x_wwdg.h"
#include "misc.h" 

12.3 库文件之间的关系 

 各个文件在库工程中的层次关系,对应到 CMSIS 标准架构上见图 12.3-1。这里引用自野火的开发指导手册。

图 12.3-1 STM32库文件关系图【引自:野火开发手册】 

参考资料:

        【1】哔站江协科技STM32入门教程

        【2】《STM32单片机原理与项目实战》刘龙、高照玲、田华著

        【3】《ARM Cortex-M3嵌入式原理及应用》黄可亚著

        【4】《STM32嵌入式微控制器快速上手》陈志旺著

        【5】《STM32单片机应用与全案例实践》沈红卫等著

        【6】《野火STM32开发指南》

        【7】《正点原子STM32开发指南》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/27633.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux常用命令及或g++(或gcc)编辑器运用

一. 实验内容 1.打开VMware Workstation虚拟机进入Ubuntu系统,打开终端。 练习使用常用的Linux命令,主要包括如下命令: mkdir, rmdir, cd, pwd, ls, clear, cat, rm等。(其中,cat、rm命令请在下面实验内容3…

IIC通信总线

文章目录 1. IIC总线协议1. IIC简介2. IIC时序1. 数据有效性2. 起始信号和终止信号3. 数据格式4. 应答和非应答信号5. 时钟同步6. 写数据和读数据 2. AT24C023. AT24C02读写时序4. AT24C02配置步骤5. 代码部分1. IIC基本信号2. AT24C02驱动代码3. 实验结果分析 1. IIC总线协议 …

【C++提高编程-05】----C++之Deque容器实战

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…

MySQL的三种重要的日志

日志 Mysql有三大日志系统 Undo Log(回滚日志):记录修改前的数据,用于事务回滚和 MVCC(多版本并发控制)。 Redo Log(重做日志):记录数据变更,用于崩溃恢复&…

【java】指定类,指定package,找到package下面,这个类的所有子类

目录 ■java代码 ■注意 ■运行效果 ■包的结构 ■java代码 package com.sxz.study.reflect;import java.io.File; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.Enumeration; import java.util.List;public class …

缓存技术实战[一文讲透!](Redis、Ecache等常用缓存原理介绍及实战)

目录 文章目录 目录缓存简介工作原理缓存分类1.按照技术层次分类2.按照应用场景分类3.按照缓存策略分类 应用场景1.硬件缓存2.软件缓存数据库缓存Web开发应用层缓存 3.分布式缓存4.微服务架构5.移动端应用6.大数据处理7.游戏开发 缓存优点缓存带来的问题 常见常用Java缓存技术1…

Unity 之通过自定义协议从浏览器启动本地应用程序

内容将会持续更新,有错误的地方欢迎指正,谢谢! Unity 之通过自定义协议从浏览器启动本地应用程序 TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不断探索 TechX —— 心探索、心进…

树莓派等Linux开发板上使用 SSD1306 OLED 屏幕,bullseye系统 ubuntu,debian

Raspberry Pi OS Bullseye 最近发布了,随之而来的是许多改进,但其中大部分都在引擎盖下。没有那么多视觉差异,最明显的可能是新的默认桌面背景,现在是大坝或湖泊上的日落。https://www.the-diy-life.com/add-an-oled-stats-display-to-raspberry-pi-os-bullseye/ 通过这次操…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 特惠寿司(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 特惠寿司(100分) 🌍 评测功能需要订阅专栏后私信联系清隆解…

王思聪日本街头在被偶遇

王思聪日本街头再被偶遇,甜蜜约会日常成网友热议焦点近日,有网友在日本街头再次偶遇了“国民老公”王思聪,这次他不仅携带着一位美丽的女友,还展现出了两人之间亲密无间的互动,让不少网友感叹:这真的是每天…

八、BGP

目录 一、为何需要BGP? 二、BGP 2.1、BGP邻居 2.2、BGP报文 2.3、BGP路由 2.4、BGP通告遵循原则 2.5、BGP实验 第一步:建立邻居 第二步:引入路由 BGP路由黑洞 路由黑洞解决方案 1、IBGP全互联 2、路由引入 3、MPLS 多协…

甘肃这款饼子很火 你是否有吃过呢

白吉饼那独特的外形,圆圆的十分可爱。👏它的表皮酥脆,内里绵软,麦香四溢。😋拿在手里沉甸甸的,就知道用料十足。 无论是直接吃,感受那纯粹的面香,还是夹上腊汁肉,变成美味…

ThinkPHP5.0 apache服务器配置URL重写,index.php去除

本地环境wamp .htaccess文件代码 <IfModule mod_rewrite.c>Options FollowSymlinks -MultiviewsRewriteEngine onRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L] </IfModule> 踩过这个坑&a…

dbForge Studioor MySQL v6 解锁版 安装教程(MYSQL数据库客户端)

前言 dbForge Studioor MySQL是一个在Windows平台被广泛使用的MySQL客户端&#xff0c;它能够使MySQL开发人员和管理人员在一个方便的环境中与他人一起完成创建和执行查询&#xff0c;开发和调试MySQL程序&#xff0c;自动化管理MySQL数据库对象等工作。 一、下载地址 下载链…

什么是GPT-4

什么是GPT-4 ChatGPT 可以说&#xff0c;ChatGPT的发展&#xff0c;主要的分水岭在GPT-4&#xff0c;GPT-4主要是文本对话&#xff0c;且训练度也不够完善。GPT-4之后不但训练度得到了巨大提升&#xff0c;模型支持的参数量更是预计有1万亿参数&#xff0c;在这之后出现的GPT-4…

图书管理系统(SpringBoot+SpringMVC+MyBatis)

目录 1.数据库表设计 2.引入MyBatis和MySQL驱动依赖 3.配置数据库&日志 4.Model创建 5.用户登录功能实现 6.实现添加图书功能 7.实现翻页功能 1.数据库表设计 数据库表是应⽤程序开发中的⼀个重要环节, 数据库表的设计往往会决定我们的应⽤需求是否能顺利实现, 甚至决…

探索档案未来,尽在ARCHE-2024

2024年第三届上海国际智慧档案展览会暨高峰论坛&#xff08;ARCHE-2024&#xff09;将于2024年6月19日至21日在上海跨国采购会展中心隆重举行。深圳市铨顺宏科技有限公司应邀参展&#xff0c;将以全新形象盛装亮相&#xff0c;展示其在档案管理领域的最新技术和解决方案。 ARC…

UC Berkeley简介以及和Stanford的区别与联系

UC Berkeley Source: Google Map 中文版 UC Berkeley&#xff0c;全称University of California, Berkeley&#xff0c;是一所位于美国加利福尼亚州伯克利市的世界知名公立研究型大学。以下是关于UC Berkeley的详细介绍&#xff1a; 学术声誉和排名 学术声誉&#xff1a; U…

PROSAIL模型前向模拟与植被参数遥感

原文链接&#xff1a;PROSAIL模型前向模拟与植被参数遥感 “绿水青山就是金山银山”的生态文明理念现已深入人心&#xff0c;从顶层设计到全面部署&#xff0c;生态文明建设进入举措最实、推进最快、力度最大、成效最好的时期。生态文明评价必须将生态系统健康作为基本内容&am…

超详解——Python 字典详解——小白篇

目录 1. 创建字典 示例&#xff1a; 2. 访问字典中的元素 示例&#xff1a; 3. 修改字典元素 示例&#xff1a; 4. 删除字典元素 示例&#xff1a; 5. 查找元素是否是字典的键 示例&#xff1a; 6. 标准类型操作符 获取字典长度 合并两个字典 7. 常用内置函数 k…