STM32学习之一:什么是STM32

news2025/1/18 7:30:03

目录

1.什么是STM32

2.STM32命名规则

3.STM32外设资源

4. STM32的系统架构

5. 从0到1搭建一个STM32工程


学习stm32已经很久了,因为种种原因,也有很久一段时间没接触过stm32了。等我捡起来的时候,发现很多都已经忘记了,重新捡起来吧。

每次谈到stm32如何如何,那么该如何解释什么是stm32呢?

1.什么是STM32

stm32 是ST公司基于ARM Cortex-M内核开发的32位微控制器,它是一个微控制器产品系列的总称。观看stm32的技术参考手册可以发现,stm32有很多子系列:stm32小容量产品,stm32中容量产品、stm32大容量产品和STM32互联型产品;按照功能上划分,又可分为STM32F101xxx,STM32F102xxx,STM32F103xxx系列。

注:

1. 技术参考手册对每种功能模块都分一个章节,详细描述了包含了各个功能模块的内部结构,所有可能的功能描述,以及各种工作模式的使用和寄存器配置等详细信息。因此不论使用何种STM32产品,在编程阶段,都需要参考技术参考手册来完成对STM32的驱动。

数据手册包含了产品的基本配置,如内置Falsh和RAM容量、外设模块的种类和数量等,管教的数量和分配,电气特性,封装信息等。在设计硬件电路时,是非常有帮助的。

技术参考手册(对应STM32微控制器产品)和数据手册(对应不通种类的STM32)涵盖了STM32的所有信息,因此学习STM32,这些手册是少不了的,不仅少不了,还应该多看看,多理解手册内容,这对我们理解STM32功能以及编写代码、或者调试相关项目的时候都是很有帮助的。

在此处附上STM32微控制器的技术参考手册:以及STM32F103xxx中容量产品的数据手册:cd00161566.pdf (st.com),其余产品数据手册可以st.com官网寻找。

2. ARM Cortex-M  是ARM公司设计的ARM内核架构之一,除此之外,还包含A核和R核。

ARM Cortex-A核专注于高效处理多线程和多任务,适用于智能手机、平板电脑等领域。

ARM Cortex-R核专注于实时性和可预测性,适用于汽车电子控制器等需要实时响应的领域。

ARM Cortex-M核专注于低功耗和实时控制,适用于小型嵌入式系统。

参考:https://zhuanlan.zhihu.com/p/665194718

2.STM32命名规则

上面说到STM32有很多种产品,例如STM32F103C8T6等等,他为什么叫这个名字,这个名字代表了什么?翻开技术参考手册第三页,详细解释了STM32系列产品命名规则。

由上图可见,STM32表示基于ARM核心的32位微控制器;

F表示通用类型,103表示增强型,C代表引脚数目,8表示闪存存储器容量,T表示LQFP封装,6表示芯片可以在-40℃~85℃温度范围下工作。

3.STM32外设资源

谈到STM32,离不开其丰富的外设资源,那么STM32都有那些外设,详看下图:

下图来自:哔哩哔哩--江协科技up的STM32课程资料,强推大家看,up讲的非常好

这些外设资源是学习STM32最基础的内容,以后学习过程中要了解到每个外设的功能、内部结构、如何使用等,只有了解这些,才能得心应手的驱动外设,编写代码,实现想要的功能。

注:并不是所有的STM32产品都有这些外设,STM32产品系列不同,片上外设资源也不尽相同,同样的,技术参考手册第4-5页详细说明了各个系列产品所包含的外设。

4. STM32的系统架构

ICode指令总线,DCode数据总线,System系统总线

其中ICode总线和DCode总线主要是用来连接Flash闪存的,(Flash里面存储于的就是我们编写的程序),ICode总线就是用来加载程序指令的。DCode数据总线是用来加载数据的,例如常量和调试数据等。

System系统总线连接到SRAM(存储程序运行时的变量数据)、FSMC

AHB系统总线就是用来挂载各种外设的,AHB表示先进高性能总线,挂载的一般是最基本的或者是性能比较高的外设,比如复位和时钟控制这些最基本的电路。

后面有两个桥接,桥接1和桥接2连接到了APB2和APB1两个外设总线上,APB总线的意思是先进外设总线,用于连接一般的外设。因为AHB和APB的总线协议、总线速度、还有数据传送格式的差异,所以中间需要两个桥接来完成数据的转换和缓存。

AHB的整体性能比APB高一些,其中APB2的性能又比APB1性能高些,了解外设挂载在那个总线上就可以。

DMA主要做数据搬运这种简单但需要反复使用的场景,DMA拥有和CPU一样的总线控制权,用于访问各种外设,当需要DMA进行数据搬运时,外设就会通过请求线发送DMA请求。然后DMA获得总线控制权,访问并转运数据,整个过程不需要CPU参与,使得CPU可以解放出来干其他事情。就相当于一个CPU的小秘书,用于直接读取外设的数据。比如遇到大量数据搬运这种情况,使用CPU来进行搬运太浪费时间了(费时费力,简单的数据搬运可以使用DMA)

5. 从0到1搭建一个STM32工程

本地新建一个Project文件用来存放STM32工程,STM32工程文件较多,可以分几个文件夹存储文件,例如Start文件夹用来存储STM32所需的启动文件,Library文件夹用来存放STM32的各种外设文件,User文件夹用来存放main等相关文件,之后如果我们自己写相关模块的驱动文件,也可以创建一个文件夹(例如BSP)来存放模块的驱动文件。

STM32工程所需库文件,可以在https://www.st.com/en/embedded-software/stsw-stm32054.html地址下载,下载下来后我们来填充这几个文件夹的内容。

首先是Start文件夹:

 注意,start文件夹中start_up开头的几个汇编文件,不需要全部放到STM32工程中,需要找到自己芯片对应的容量,选择对应的容量进行添加,例如使用STM32F103C8T6,属于中容量,则选择md,使用STM32F103ZET6,属于大容量,则选择ld。

其次Library文件夹:

最后是User文件夹:

这样,文件夹内容就填充好了,下面我们将该文件拓扑在Keil5中复制一份。

但是此刻,keil工程并不知道我们头文件的路径,因此还需将各种包含的头文件在Keil中配置下。

上图还有一个框到的绿色部分,这个宏定义的来源可以查看stm32f10x.h文件。

 之后编译一下,可以看到0error,至此,STM32工程搭建完毕!

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

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

相关文章

【mysql】常用操作:维护用户/开启远程/忘记密码/常用命令

一、维护用户 1.1 创建用户 -- 语法 > CREATE USER [username][host] IDENTIFIED BY [password];-- 例子: -- 添加用户user007,密码123456,并且只能在本地可以登录 > CREATE USER user007localhost IDENTIFIED BY 123456; -- 添加用户…

宇哥强调!7月份必须开始强化阶段(附规划)

七月开始强化不晚,但是要开始了! 张宇老师说:七月,也就是暑假是大家学习的最佳时机,这个时候要大量的做题! 如果你是三月份开始备考的,那么到了七月份,基础应该复习的差不多了&…

wget:unable to resolve host address ...(已解决)

写在前面: 最近在学习Linux命令,此问题是在使用wget安装rar时出现的问题,记录一下解决的过程。仅供参考,若有不当的地方,恳请指正。如果对你有帮助,欢迎点赞,关注,收藏,…

基于YOLOv5+pyqt5的跌倒检测系统(含pyqt页面、训练好的模型)

简介 跌倒是老年人和身体不便者常见的意外事故,及时检测和处理跌倒事件对于保障他们的安全至关重要。为了提高对跌倒事件的监控效率,我们开发了一种基于YOLOv5目标检测模型的跌倒检测系统。本报告将详细介绍该系统的实际应用与实现,包括系统…

OpenCv形态学(一)

目录 形态学转换 结构元素 腐蚀 膨胀 开运算 闭运算 形态学梯度 顶帽 黑帽 图像轮廓 查找轮廓 绘制轮廓 形态学转换 形态变换是一些基于图像形状的简单操作。通常在二值图像上执行。它需要两个输入,一个是我们的原始图像,第二个是决定操作性…

Nginx Proxy Manager反向代理Jackett

1 说明 最近折腾nas,发现npm反向代理Jackett后出现无法访问的问题,是因为外网访问jackett (例如https://domain.com:7373/jackett/UI/Dashboard)时,url会被重定向到https://domain.com/jackett/UI/Login?ReturnUrl%2Fjackett%2FUI%2FDashbo…

基于matlab的K-means聚类图像分割

1 原理 K-means聚类算法在图像分割中的应用是基于一种无监督的学习方法,它将图像中的像素点或特征区域划分为K个不同的簇或类别。以下是K-means聚类算法用于图像分割的原理,包括步骤和公式: 1.1 原理概述 选择簇的数量(K): 首先…

《数字图像处理与机器视觉》案例一(库尔勒香梨果梗提取和测量)

一、引言 果梗是判断水果新鲜程度的重要标志,对水果的贮藏和保鲜也具有重要的参考价值。库尔勒香梨分级标准中对果梗有明确要求,要求果梗完整,但由于库尔勒香梨果梗颜色与果实接近,用传统的简单阈值分割方法难以提取。因此&#…

双指针算法专题(移动零 复写零 快乐数)

目录 前言 1. 移动零 (1)题目及示例 (2)一般思路 (3)双指针解法 2. 复写零 (1)题目及示例 (2)一般解法 (3)双指针解法 3. 快…

Kubernetes相关生态

1、Prometheus、Metrics Server与Kubernetes监控体系 简介: Prometheus 项目与 Kubernetes 项目一样,也来自于 Google 的 Borg 体系,它的原型系统,叫作 BorgMon,是一个几乎与 Borg 同时诞生的内部监控系统 Pro…

AG32 MCU Start Kit 开发板快速入门及 21天体验活动

AG32 IDE开发环境搭建-完整版 海振远科技 2024-6-18 AG32 MCU开发板的使用 使用准备 在使用开发板前,请确认已经安装好开发环境。 安装环境过程,请参考文档《AG32 开发环境搭建.pdf》 上电: 给开发板5V 供电,打开开关&#…

平面设计软件PS/AI/ID/CDR怎么选怎么下载(附教程)

随着设计行业的普遍化,平面设计软件也越来越多且功能越来越强大。平面设计软件需要在电脑上运行使用,来进行平面画面、平面文字的设计工作。如大家所了解的,Adobe Photoshop、Adobe Illustrator、CorelDRAW、Adobe InDesign是平面设计中最常用…

PostgreSQL计算 queryid 原理

数据库版本 PG 16.1 queryid 是什么 queryid 是将 sql 规范化 (normalization) 后&#xff0c;通过哈希函数计算出来的 64 位整数。 以 SELECT id, data FROM tbl_a WHERE id < 300 ORDER BY data; 这条 SQL 为例。当我们在 PG 中执行这条 sql 时&#xff0c;内核在语义…

技术性屏蔽百度爬虫已经一周了!

很久前明月就发现百度爬虫只抓取、只收录就是不给流量了&#xff0c;加上百度搜索体验越来越差&#xff0c;反正明月已经很久没有用过百度搜索&#xff0c;目前使用的浏览器几乎默认搜索都已经修改成其他搜索引擎了&#xff0c;真要搜索什么&#xff0c;一般都是必应谷歌结合着…

【设计模式深度剖析】【11】【行为型】【解释器模式】| 以算术表达式求值为例加深理解

&#x1f448;️上一篇:状态模式 设计模式-专栏&#x1f448;️ 文章目录 解释器模式定义英文原话直译 解释器模式中的角色1. 抽象表达式&#xff08;AbstractExpression&#xff09;2. 终端表达式&#xff08;TerminalExpression&#xff09;3. 非终端表达式&#xff08;Non…

Linux 特殊变量 $?

一. 说明 在 Linux 和其他类 Unix 系统中&#xff0c;$? 是一个特殊的变量&#xff0c;用于获取上一个命令的退出状态码。 退出状态码是一个整数值&#xff0c;通常用来表示命令的执行结果。 ⏹退出状态码的含义 0&#xff1a;命令成功执行。0以外的数字&#xff1a;命令执…

[SAP ABAP] 插入内表数据

语法格式 INSERT <wa> INTO <itab> INDEX <idx>. <wa>&#xff1a;代表工作区 <itab>&#xff1a;代表内表 <idx>&#xff1a;代表索引值 示例1 结果显示&#xff1a; 语法格式 INSERT <wa> INTO TABLE <itab>. <wa>&…

文件创建与查看

touch touch命令用于创建一个新的文件。 语法&#xff1a;touch Linux路径 其中路径可以是相对路径、绝对路径或者特殊路径符都可以。 改图展示了通过 touch test.txt 命令创建了一个 test.txt文件&#xff0c;其中深色的代表文件夹&#xff0c;白色的代表文件。 使用 ls -lh…

昇思25天学习打卡营第5天|模型训练|保存与加载

学AI还能赢奖品&#xff1f;每天30分钟&#xff0c;25天打通AI任督二脉 (qq.com) 模型训练 模型训练一般分为四个步骤&#xff1a; 构建数据集。定义神经网络模型。定义超参、损失函数及优化器。输入数据集进行训练与评估。 现在我们有了数据集和模型后&#xff0c;可以进行…

QTreeView双击任意列展开

一.效果 二.原理 重点是如何通过其他列的QModelIndex(假设为index),获取第一列的QModelIndex(假设为firstColumnIndex)。代码如下所示: QModelIndex firstColumnIndex = model->index(index.row(), 0, index.parent()); 这里要注意index函数的第三个参数,第三个参…