STM32学习之一:什么是STM32

目录

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.mzph.cn/web/32666.shtml

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

相关文章

【Java反射】getDeclaredField(String name) 和 getField(String name)区别

getDeclaredField(String name) 和 getField(String name) 都是Java反射API中用于获取类字段(成员变量)的方法,但它们之间存在一些关键的区别: getDeclaredField(String name) 功能:这个方法返回的是声明在该类中的指…

【驱动篇】龙芯LS2K0300之按键驱动

实验过程 实验目的: 在龙芯开发板上面验证GPIO按键的输入过程 ① 根据原理图连接按键板 ② 将4个i2c引脚的功能复用为GPIO ③ 注册input设备驱动,绑定中断处理函数,使用定时器消抖 原理图 4个按键引脚:CPU_I2C0_SCL -> G…

数据清洗过程

数据清洗是数据预处理的一个重要步骤,它涉及到识别和纠正(或删除)数据集中的错误、重复、不一致或缺失的信息。 数据清洗方法 根据清洗操作的层次分为基于模式层(Schema-Level)的方法和基于实例层(Instan…

transformer中的build_attention_mask

build_attention_mask 方法的作用是构建一个因果注意力掩码,用于屏蔽 Transformer 模型中的未来位置。 因果注意力掩码的工作原理 因果注意力掩码通过将未来位置的注意力权重设置为负无穷大,从而确保这些位置的注意力得分在 softmax 计算中接近于零。具…

sqlalchemy event监听

在 SQLAlchemy 中,event 系统允许你监听数据库引擎、会话、映射类等对象上的事件,并在这些事件发生时执行自定义的代码。这对于在 SQL 语句执行前后、对象加载、对象刷新等时刻执行特定的逻辑非常有用。 要使用 SQLAlchemy 的 event 系统,你…

爬虫经典案例之爬取豆瓣电影Top250(方法一)

简介:主要使用bs4、request、pandas等模块,实现数据的爬取和存储。 目前存在一点小问题,就是个别电影的导演、演员、上映年份和地区等信息与大部分电影的这些信息的格式有细微差别,导致正则表达式无法正常匹配到个别电影的信息&am…

解析cJSON数组

json串: { "list":[ "hello","world" ] } 代码 : int func(char *sn) { int ret 0; cJSON *root, *list; FILE *fp fopen("a.txt", "r"); if(!fp) { printf("open s…

并发的概念

并发是指在同一时间间隔内同时执行多个任务或处理多个事件的能力或现象。在计算机科学中,特别是在多任务处理系统中,"并发"通常用于描述系统能够在同一时间段内处理多个任务或操作的能力。 并发并不意味着同时执行多个任务,而是通…

艺体培训机构管理系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,教师管理,学员管理,活动管理,课程管理,选课信息管理 前台账户功能包括:系统首页,个人中心,论…

【深度C++】之“类与结构体”

0. 抽象数据类型 类(class) 和结构体(struct) 都是C中的自定义数据类型,是使用C实现面向对象编程思想的起点。 类的基本思想是数据抽象(data abstraction) 和封装(encapsulation&a…

【会议征稿,ACM出版】2024年图像处理、智能控制与计算机工程国际学术会议(IPICE 2024,8月9-11)

2024年图像处理、智能控制与计算机工程国际学术会议(IPICE 2024)将于2024年8月9-11日在中国福州举行。本届会议由阳光学院、福建省空间信息感知与智能处理重点实验室、空间数据挖掘与应用福建省高校工程研究中心联合主办。 会议主要围绕图像处理、智能控…

分布式定时任务系列10:XXL-job源码分析之路由策略

传送门 分布式定时任务系列1:XXL-job安装 分布式定时任务系列2:XXL-job使用 分布式定时任务系列3:任务执行引擎设计 分布式定时任务系列4:任务执行引擎设计续 分布式定时任务系列5:XXL-job中blockingQueue的应用 …

Go语言的诞生背景

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

Linux操作系统处理器调度基本准则和实现

1,基本概念 在多道程序系统中,进程的数量往往多于处理机的个数,进程争用处理机的情况就在所难免。处理机调度是对处理机进行分配,就是从就绪队列中,按照一定的算法(公平、低效)选择一个进程并将…

mysql学习——SQL中的DDL和DML

SQL中的DDL和DML DDL数据库操作:表操作 DML添加数据修改数据删除数据 学习黑马MySQL课程,记录笔记,用于复习。 DDL DDL:Data Definition Language,数据定义语言,用来定义数据库对象(数据库,表&…

【CSS】简单实用的calc()函数

calc() 是 CSS 中的一个功能,允许你在属性值中进行基础的数学计算。这是非常有用的,特别是当你需要在不同的上下文或视口大小中动态调整尺寸或位置时。 以下是一些 calc() 函数的简单实用示例: 动态宽度: 假设你希望一个元素的…

C语言入门课程学习笔记8:变量的作用域递归函数宏定义交换变量

C语言入门课程学习笔记8 第36课 - 变量的作用域与生命期(上)第37课 - 变量的作用域与生命期(下)实验—局部变量的作用域实验-变量的生命期 第38课 - 函数专题练习第39课 - 递归函数简介实验小结 第40课 - C 语言中的宏定义实验小结…

基于Java的学生成绩管理系统

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:Java 数据库:MySQL 技术:Java技术,B/S结构 工具:MyEclipse,MySQL 系统展示 首页 个人中…

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

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

虚拟机IP地址频繁变化的解决方法

勾八动态分配IP,让我在学习redis集群的时候,配置很多的IP地址,但是由于以下原因导致我IP频繁变动,报错让我烦恼!!!! 为什么虚拟机的IP地址会频繁变化? 虚拟机IP地址频繁…