STM32固件库简介与使用指南
1. STM32官方标准固件库简介
STM32官方标准固件库是由STMicroelectronics(ST)提供的一套软件开发工具,旨在简化STM32微控制器的软件开发过程。该固件库提供了丰富的功能和模块,涵盖了STM32微控制器的各种外设,包括但不限于GPIO、USART、SPI、I2C、定时器、中断控制器等。
主要特点:
-
丰富的外设支持: 官方固件库涵盖了STM32微控制器的各种外设,为开发者提供了便捷的接口和函数来控制和配置这些外设。
-
封装了底层寄存器操作: 固件库将底层寄存器的操作封装在函数内部,开发者无需直接访问底层寄存器,而是通过调用库中提供的函数来实现相应功能。
-
易于学习和使用: 固件库提供了清晰的API文档和示例代码,使得开发者能够轻松理解和使用库中的函数,加快软件开发的速度。
-
与CMSIS标准兼容: STM32官方标准固件库符合CMSIS(Cortex Microcontroller Software Interface Standard)标准,确保了不同厂家生产的Cortex-M系列微控制器在软件上的兼容性。
2. 库开发与寄存器开发的关系
许多用户从学习51单片机开发转向STM32开发时,常常感到困惑。他们习惯了直接操作寄存器的方式,而突然面对ST官方库时可能会一头雾水。
库开发与寄存器开发之间的区别主要体现在编程方法和代码复杂性上:
-
寄存器开发:
- 寄存器开发是直接操作芯片内部寄存器来配置和控制外设的工作模式和功能。
- 在寄存器开发中,程序员需要了解每个寄存器的作用、位域的含义以及相应的配置方法。
- 编写的代码是直接对硬件进行操作,因此具有更高的灵活性,但也更加复杂和繁琐。
- 寄存器开发需要程序员对硬件架构和寄存器的细节有较深的理解。
-
库开发:
- 库开发是将对硬件的操作封装成函数或接口,提供给用户调用,使得用户可以通过调用函数来完成对硬件的控制。
- 在库开发中,程序员不需要直接操作硬件寄存器,而是通过调用库函数来实现对外设的配置和控制。
- 库开发隐藏了底层寄存器的细节,使得编程更加简洁和方便,降低了程序员的学习和开发成本。
- 库开发通常提供了更高层次的抽象,使得用户可以更容易地理解和使用外设的功能。
总的来说,寄存器开发更加底层和灵活,适合对硬件有深入了解的开发者;而库开发则更加高级和方便,适合快速开发和应用程序的开发者。选择哪种开发方法取决于项目的需求、开发者的技术水平以及开发周期等因素。
3. STM32固件库与CMSIS标准
CMSIS(Cortex Microcontroller Software Interface Standard,Cortex 微控制器软件接口标准)是由ARM推出的一套用于Cortex-M系列微控制器的软件接口标准。它旨在提供一致的软件接口,使开发者能够更容易地编写可移植、可重用的嵌入式软件。CMSIS定义了一系列规范和API,包括:
-
核心(Core)功能: 定义了与Cortex-M处理器核心相关的功能,如处理器寄存器的访问、中断处理、系统控制和调试等。
-
设备(Device)功能: 定义了与特定Cortex-M系列微控制器相关的功能,如时钟控制、GPIO控制、定时器、中断控制等。每个微控制器厂商根据CMSIS规范提供自己的设备文件,以便开发者在不同的芯片上实现相同的功能。
-
软件包(Software Packs): 包含了CMSIS规范所需的各种软件组件,如设备文件、启动文件、外设驱动等。软件包提供了一种统一的方式来管理和交换与Cortex-M系列微控制器相关的软件组件。
CMSIS的主要目标是提高嵌入式软件的可移植性和可重用性,简化嵌入式软件的开发过程,同时提高开发效率和软件质量。由于CMSIS是一种开放标准,因此可以广泛应用于不同厂商的Cortex-M系列微控制器上,使开发者能够更容易地进行跨平台开发。
STM32固件库符合CMSIS标准,这一节介绍了ARM公司提供的CMSIS标准,以及STM32固件库与CMSIS的关系。CMSIS定义了核内外设访问层、中间件访问层和外设访问层等功能,使得不同厂家生产的Cortex-M4芯片在软件上基本兼容。
4. STM32标准固件库下载
https://www.st.com/en/embedded-software/stsw-stm32054.html
5. STM32F1标准固件库介绍
以下是STM32F1标准固件库中的一些关键文件和文件夹:
-
CMSIS文件夹:
- core_cm3.h:CMSIS核心文件,提供了与Cortex-M3内核的接口。
- system_stm32f1xx.h:片上外设接入层系统头文件,用于设置系统及总线时钟相关的函数。
- stm32f1xx.h:STM32F1片上外设访问层头文件,包含了系统寄存器定义声明以及包装内存操作等。
-
STM32F1xx_StdPeriph_Driver文件夹:
- inc目录:包含了一系列头文件,如stm32f1xx_gpio.h、stm32f1xx_usart.h等,对应于不同外设的驱动。
- src目录:包含了与头文件对应的源文件,如stm32f1xx_gpio.c、stm32f1xx_usart.c等。
-
Project文件夹:
- STM32F1xx_StdPeriph_Examples文件夹:包含ST官方提供的固件实例源码,涵盖了各种常见应用场景和外设配置示例。
- STM32F1xx_StdPeriph_Template文件夹:存放工程模板,可作为新项目的起点。
-
Utilities文件夹:
- 包含一些官方评估板的源码,对于学习可以忽略不看。
-
根目录中的文件:
- stm32f1xx_stdperiph_lib_um.chm:固件库的帮助文档,提供了详细的函数说明和使用方法。
通过介绍这些文件和文件夹,读者可以了解STM32F1标准固件库的组成和结构,以及如何使用这些文件来开发STM32F1系列芯片的应用程序。
相关文章:

STM32固件库简介与使用指南
1. STM32官方标准固件库简介 STM32官方标准固件库是由STMicroelectronics(ST)提供的一套软件开发工具,旨在简化STM32微控制器的软件开发过程。该固件库提供了丰富的功能和模块,涵盖了STM32微控制器的各种外设,包括但不…...

【开源】SpringBoot框架开发智能教学资源库系统
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课程资源模块2.4 课程作业模块2.5 课程评价模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 课程档案表3.2.2 课程资源表3.2.3 课程作业表3.2.4 课程评价表 四、系统展示五、核心代…...

融资项目——获取树形结构的数据
如下图所示,下列数据是一个树形结构数据,行业中包含若干子节点。表的设计如下图,设置了一个id为1的虚拟根节点。(本树形结构带虚拟根节点共三层) 实现逻辑: 延时展示方法,先展现第二层的信息&a…...

Crypto-RSA2
题目:(BUUCTF在线评测 (buuoj.cn)) 已知e,n,dp/(dq),c求明文: 首先有如下公式: dp ≡ d mod (p-1) ,ed ≡ 1 mod φ(n) ,npq ,φ(n)(p-1)(q-1) python代码实现如下: import libnu…...

IEEE Internet of Things Journal投稿经验
期刊名:IEEE Internet of Things Journal 期刊分区:中科院一区 Top 影响因子:10.6 投稿状态 (1)2023.11.3,投稿成功,状态为:under review(大u大r)࿱…...

实例分割论文阅读之:FCN:《Fully Convolutional Networks for Semantica Segmentation》
论文地址:https://openaccess.thecvf.com/content_cvpr_2015/papers/Long_Fully_Convolutional_Networks_2015_CVPR_paper.pdf 代码链接:https://github.com/pytorch/vision 摘要 卷积网络是强大的视觉模型,可以产生特征层次结构。我们证明,…...

apk反编译修改教程系列---简单去除apk登陆 修改vip与一些反编译基础常识【十二】
往期教程: 安卓玩机-----反编译apk 修改apk 去广告 去弹窗等操作中的一些常识apk反编译修改教程系列-----修改apk应用名称 任意修改名称 签名【一】 apk反编译修改教程系列-----任意修改apk版本号 版本名 防止自动更新【二】 apk反编译修改教程系列-----修改apk中…...
网络安全习题集
第一章 绪论 4 ISO / OSI 安全体系结构中的对象认证安全服务使用( C ) 机制来完成。 A .访问控制 B .加密 C .数字签名 D .数据完整性 5 身份鉴别是安全服务中的重要一环,以下关于身份鉴别的叙述不正确的是…...

C++中的volatile:穿越编译器的屏障
C中的volatile:穿越编译器的屏障 在C编程中,我们经常会遇到需要与硬件交互或多线程环境下访问共享数据的情况。为了确保程序的正确性和可预测性,C提供了关键字volatile来修饰变量。本文将深入解析C中的volatile关键字,介绍其作用、…...
(07)Hive——窗口函数详解
一、 窗口函数知识点 1.1 窗户函数的定义 窗口函数可以拆分为【窗口函数】。窗口函数官网指路: LanguageManual WindowingAndAnalytics - Apache Hive - Apache Software Foundationhttps://cwiki.apache.org/confluence/display/Hive/LanguageManual%20Windowing…...

【开源图床】使用Typora+PicGo+Github+CDN搭建个人博客图床
准备工作: 首先电脑得提前完成安装如下: 1. nodejs环境(node ,npm):【安装指南】nodejs下载、安装与配置详细教程 2. Picgo:【安装指南】图床神器之Picgo下载、安装与配置详细教程 3. Typora:【安装指南】markdown神器之Typora下载、安装与无限使用详细教…...
阅读笔记(SOFT COMPUTING 2018)Seam elimination based on Curvelet for image stitching
参考文献: Wang Z, Yang Z. Seam elimination based on Curvelet for image stitching[J]. Soft Computing, 2018: 1-16. 注:SOFT COMPUTING 大类学科小类学科Top期刊综述期刊工程技术 3区 COMPUTER SCIENCE, ARTIFICIAL INTELLIGENCE 计算机…...
LinkedList数据结构链表
LinkedList在Java中是一个实现了List和Deque接口的双向链表。它允许我们在列表的两端添加或删除元素,同时也支持在列表中间插入或移除元素。在分析LinkedList之前,需要理解链表这种数据结构: 链表:链表是一种动态数据结构&#x…...

[计算机网络]---序列化和反序列化
前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、再谈协议…...
[前端开发] 常见的 HTML CSS JavaScript 事件
代码示例指路 常见的 HTML、CSS、JavaScript 事件代码示例 常见的 HTML CSS JavaScript 事件 事件HTML 事件鼠标事件键盘事件表单事件 JavaScript 事件对象事件代理(事件委托) 事件 在 Web 开发中,事件是用户与网页交互的重要方式之一。通过…...
H5/CSS 笔试面试考题(71-80)
简述哪种输入类型用于定义周和年控件(无时区)( ) A:date B:week C:year 面试通过率:67.0% 推荐指数: ★★★★★ 试题难度: 初级 试题类型: 选择题 答案:b 简述下列哪个元素表示外部资源?该元素可以被视为图像、嵌套的浏览上下文或插件要处理的资源。它包括各种属性…...

【Node.js】path 模块进行路径处理
Node.js 执行 JS 代码时,代码中的路径都是以终端所在文件夹出发查找相对路径,而不是以我们认为的从代码本身出发,会遇到问题,所以在 Node.js 要执行的代码中,访问其他文件,建议使用绝对路径 实例࿱…...

react+ts【项目实战一】配置项目/路由/redux
文章目录 1、项目搭建1、创建项目1.2 配置项目1.2.1 更换icon1.2.2 更换项目名称1.2.1 配置项目别名 1.3 代码规范1.3.1 集成editorconfig配置1.3.2 使用prettier工具 1.4 项目结构1.5 对css进行重置1.6 注入router1.7 定义TS组件的规范1.8 创建代码片段1.9 二级路由和懒加载1.…...

英文论文(sci)解读复现【NO.20】TPH-YOLOv5++:增强捕获无人机的目标检测跨层不对称变压器的场景
此前出了目标检测算法改进专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读发表高水平学术期刊中的 SCI论文&a…...
第十五章 以编程方式使用 SQL 网关 - %SQLGatewayConnection 方法和属性
文章目录 第十五章 以编程方式使用 SQL 网关 - %SQLGatewayConnection 方法和属性FetchRows()GatewayStatus propertyGatewayStatusGet()GetConnection()GetGTWVersion()GetLastSQLCode() 第十五章 以编程方式使用 SQL 网关 - %SQLGatewayConnection 方法和属性 FetchRows() …...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...