STM32第一节——初识STM32

1 硬件介绍

1.1 硬件平台

配套硬件:以野火的STM32 F1霸道开发板为平台,若用的是别的开发板,可自己进行移植。

1.2 什么是STM32

STM32是由意法半导体(STMicroelectronics)公司推出的一系列32位的ARM Cortex-M微控制器。这些微控制器广泛用于嵌入式系统和物联网(IoT)应用中。以下是有关STM32的一些主要特征和信息:

  1. 架构: STM32微控制器使用ARM Cortex-M内核,其中包括Cortex-M0、Cortex-M3、Cortex-M4和Cortex-M7等不同型号。这些内核提供了高性能、低功耗的处理能力。

  2. 丰富的外设: STM32微控制器集成了丰富的外设,包括但不限于通用输入/输出(GPIO)、定时器、串口通信(USART、SPI、I2C)、模拟和数字转换器(ADC、DAC)、PWM控制、以太网控制器、USB接口等。

  3. 开发工具: STMicroelectronics提供了一套完整的开发工具,包括ST-LINK调试器、集成开发环境(IDE)如STM32CubeIDE,以及丰富的软件库和示例代码。这些工具使得开发人员可以方便地进行嵌入式系统的开发。

  4. 丰富的型号: STM32系列包括多个型号和系列,以满足不同应用的需求。不同系列的型号可能具有不同的性能、外设和封装选项。

  5. 生态系统支持: STM32拥有强大的生态系统,包括广泛的社区支持、技术文档、在线培训课程等。这使得开发人员能够轻松获取帮助和资源。

  6. 广泛的应用: 由于其灵活性和性能,STM32微控制器广泛用于各种应用领域,包括工业控制、汽车电子、智能家居、医疗设备、消费电子等。

STM8 和 STM32 命名方法,摘自《STM8 和 STM32 选型手册》

2 芯片

芯片(这里指内核,或者叫 CPU)和外设之间通过各种总线连接,其中驱动单元有 4 个,被动单 元也有 4 个,具体见图 2.1。为了方便理解,我们都可以把驱动单元理解成是 CPU 部分,被动单 元都理解成外设。下面我们简单介绍下驱动单元和被动单元的各个部件。

2.1 ICode总线

        在STM32微控制器中,ICode(Instruction Code)总线是指令代码总线,它是与存储器相关的一个概念。在STM32中,存储器包括Flash存储器,其中存储了程序的指令代码。

        ICode总线用于从Flash存储器读取指令代码,以供CPU执行。具体而言,ICode总线连接了CPU和Flash存储器,使得CPU能够从Flash中读取指令。这样,当程序在Flash存储器中时,CPU可以通过ICode总线有效地访问并执行这些指令。

        在STM32的体系结构中,存储器总线分为指令总线(ICode总线)和数据总线(DCode总线)。这种划分有助于提高存储器访问的效率。ICode总线专门用于传输指令代码,而DCode总线用于传输数据。这种分离可以提高系统的性能,特别是在存在并行访问指令和数据的情况下。

        总体而言,ICode总线在STM32中是与指令存储器Flash相关的一部分,用于高效地传输指令代码到CPU,以支持程序的正常执行。

2.2 驱动单元

2.2.1 DCode总线

        在STM32微控制器中,DCode(Data Code)总线是数据代码总线,用于传输数据。与ICode总线(指令代码总线)相对应,DCode总线是用于访问数据存储器的总线。DCode总线连接了CPU和数据存储器,其中数据存储器可以包括RAM(随机存储器)和其他存储器设备。当CPU需要读取或写入数据时,DCode总线允许它与数据存储器进行通信。

        在STM32的存储器总线结构中,ICode总线和DCode总线是分开的,这样的分离有助于提高存储器访问的效率。ICode总线专门用于传输指令代码,而DCode总线用于传输数据。这种架构允许在执行指令的同时,同时进行对数据存储器的读取或写入操作,从而提高了整个系统的性能。

总的来说,DCode总线在STM32中是与数据存储器相关的一部分,用于支持CPU与数据存储器之间的高效数据传输,以满足程序的数据处理需求。因为数据可以被 Dcode 总线和 DMA 总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来 仲裁,决定哪个总线在取数。

2.2.2 系统总线

        在STM32微控制器中,系统总线是连接不同部件和模块的一个关键总线系统,它促使各种外设和内部组件之间进行通信和数据传输。系统总线主要是访问外设的寄存器,我们通常说的寄存器编程,即读写寄存器都是通过这根系统 总线来完成的。

2.2.3 DMA总线

        在STM32微控制器中,DMA(Direct Memory Access)总线是一种用于高效数据传输的机制。这个数据可以是在某个外设的数据寄存器,可以在 SRAM, 可以在内部的 FLASH。因为数据可以被 Dcode 总线和 DMA 总线访问,所以为了避免访问冲突, 在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。DMA允许外设或内存之间的数据传输,而无需CPU的直接干预,从而提高了系统的性能和效率。

2.3 被动单元

2.3.1 内部的闪存存储器

        STM32微控制器中的闪存存储器通常是指Flash存储器。Flash存储器是一种非易失性存储器,用于存储程序代码、配置数据和其他常驻信息。以下是关于STM32内部Flash存储器的一些关键信息:

  1. 程序存储: 主要用于存储微控制器的程序代码。在STM32中,Flash存储器通常分为不同的扇区,每个扇区可以用于存储不同的程序段。程序可以通过编程器或Bootloader等方式被烧录到Flash存储器中。

  2. 非易失性: Flash存储器是一种非易失性存储器,这意味着它可以在断电后保持存储的数据。这使得它非常适合用于存储嵌入式系统的程序代码,因为程序代码在断电后仍然可以被保留。

  3. 扇区和页: Flash存储器被分为不同的扇区,每个扇区通常包含多个页。在STM32中,一般可以通过扇区擦除和页编程的方式对Flash进行操作。擦除是将整个扇区的数据清除,而编程是将数据写入到特定的页中。

  4. 擦写次数: Flash存储器有一个擦写次数的限制,超过这个限制可能导致存储器损坏。因此,在设计中需要注意避免频繁的擦写操作。一些STM32微控制器提供了内部的Flash管理功能,可以帮助延长Flash寿命。

  5. 自校准: 一些STM32微控制器具有自校准功能,可以在Flash存储器的使用过程中进行自动的校准,以提高性能和可靠性。

  6. Bootloader: 一些STM32微控制器集成了Bootloader,允许通过外部接口(如串口)更新Flash中的程序代码,而无需使用外部编程器。

        总体而言,STM32内部的Flash存储器是关键的系统组件,用于存储程序代码和其他关键数据。开发者在使用时需要注意擦写次数的限制以及合理使用擦写和编程操作以确保存储器的可靠性和寿命。

2.3.2 内部的SRAM

        STM32微控制器中的SRAM(Static Random Access Memory)是一种用于存储数据的随机存取存储器。与Flash存储器不同,SRAM是易失性存储器,即在断电时会丢失其中的数据。以下是关于STM32内部SRAM的一些关键信息:

  1. 数据存储: SRAM主要用于存储程序执行过程中产生的临时数据,包括变量、堆栈、和其他运行时数据。与Flash存储器不同,SRAM的读写速度很快,适合用于频繁的数据读写操作。

  2. 易失性: SRAM是一种易失性存储器,这意味着在断电时会丢失其中的数据。因此,SRAM通常用于需要在设备运行期间进行快速读写的应用,而不是长期存储。

  3. 内部结构: STM32微控制器的SRAM通常被分为不同的块或区域,例如数据RAM(用于存储变量)、堆栈RAM(用于存储函数调用时的堆栈数据)等。这些不同的区域有不同的用途和访问特性。

  4. 访问速度: 与Flash存储器相比,SRAM的访问速度更快,因为它是基于静态存储单元的,而不需要进行擦写和编程的操作。

  5. 功耗: 由于SRAM是易失性存储器,它在持续通电的情况下能够快速读写,但在断电后会失去存储的数据。这也意味着在需要长期存储数据时,应该使用Flash等非易失性存储器。

  6. 容量: STM32微控制器的SRAM容量因型号而异,通常有几十KB到几百KB的范围,具体取决于具体的芯片型号。

        开发者在使用STM32内部SRAM时需要注意其易失性特性,并确保适当地选择存储数据的位置,以满足程序的需求。通常,SRAM用于存储临时数据,而长期存储数据则需要使用Flash等非易失性存储器。

2.3.3 FSMC

        在STM32微控制器中,FSMC(Flexible Static Memory Controller)是一种用于连接外部存储器设备的控制器。它提供了灵活的接口,可以与各种静态存储器设备(如SRAM、NOR Flash、NAND Flash等)进行通信。以下是有关STM32中FSMC的一些关键信息:

  1. 灵活性: FSMC设计的目的是为了与多种外部存储器设备进行通信,包括静态RAM(SRAM)、NOR Flash存储器、NAND Flash存储器等。这种灵活性使得STM32微控制器可以与不同类型的存储器设备进行接口,满足不同应用的需求。

  2. 并行接口: FSMC支持并行接口,这意味着它可以同时传输多个比特的数据,提高了数据传输的效率。这对于要求高速数据传输的存储器设备是非常重要的。

  3. FSMC与SRAM: 在一些应用中,FSMC常用于连接外部的SRAM,提供了高速的RAM存储器,用于存储数据。通过FSMC,微控制器可以通过并行接口与外部SRAM进行数据的读写。

  4. FSMC与NOR Flash: FSMC还可用于连接NOR Flash存储器,这是一种用于存储程序代码的非易失性存储器。通过FSMC,可以实现从外部NOR Flash读取程序代码。

  5. FSMC与NAND Flash: 对于NAND Flash存储器,FSMC也提供了支持。NAND Flash通常用于存储大容量的数据,例如文件系统、图像等。

  6. 配置和控制: 配置FSMC的参数需要设置寄存器,包括时序参数、数据宽度、地址宽度等。通过正确的配置,可以确保FSMC与外部存储器设备的正常通信。

  7. DMA支持: FSMC可以与DMA(Direct Memory Access)控制器结合使用,以实现高效的数据传输,减轻CPU的负担。

        使用FSMC可以方便地连接外部存储器设备,扩展STM32微控制器的存储容量和功能。开发者在使用FSMC时需要了解外部存储器的规格,并正确配置FSMC以确保稳定的数据传输。另外,FSMC 只能扩展静态的内存,即名称里面的 S:static,不能是动态的内存,比如 SDRAM 就不能扩展。

2.3.4 AHB 到 APB 的桥

在STM32微控制器中,AHB(Advanced High-performance Bus)和APB(Advanced Peripheral Bus)是两个不同的总线系统,用于连接不同的硬件模块。有时候,需要通过一个桥接器将AHB总线上的设备连接到APB总线上。这样的桥接器通常称为AHB到APB的桥。

以下是关于STM32中AHB到APB桥的一些关键信息:

  1. 总线体系结构: STM32微控制器使用了分层的总线体系结构,其中AHB总线是一个高性能的系统总线,而APB总线则是用于连接外围设备的低功耗总线。

  2. AHB总线: AHB总线连接了一些性能较高、对响应时间要求较严格的硬件模块,如内核、高速外设等。

  3. APB总线: APB总线则用于连接一些低速外设,如GPIO、UART、I2C等。这些外设对响应时间的要求相对较低。

  4. AHB到APB桥: 由于AHB和APB总线之间的性能差异,有时需要一种机制来连接在AHB上的外设到APB上,以便在APB总线上进行控制和配置。

  5. 时钟域: AHB和APB通常具有不同的时钟域。AHB时钟可能更高,因此需要桥接器来适应这两个时钟域之间的差异。

  6. 桥接功能: AHB到APB桥提供了在两个总线之间传输数据的功能。它能够接收来自AHB总线的访问请求,并将其转发到APB总线上的相应外设。

  7. 配置和控制: 桥接器的配置通常涉及一些寄存器的设置,以确保正确的时钟分频和传输设置,以适应不同总线之间的差异。

使用AHB到APB桥的场景包括连接高性能外设或存储器到低功耗总线,以提供对这些外设的控制和配置。在具体的STM32微控制器系列和型号中,桥接的实现和特性可能有所不同,因此在具体的芯片手册和参考手册中可以找到详细的信息。

图2.1  STM32F10xx 系统框图(不包括互联型)

3 存储器映射

        在图1中,被控单元的 FLASH,RAM,FSMC 和 AHB 到 APB 的桥(即片上外设),这些功能部 件共同排列在一个 4GB 的地址空间内。我们在编程的时候,可以通过他们的地址找到他们,然 后来操作他们(通过 C 语言对它们进行数据的读和写)。

3.1 存储器映射

        存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配的,给存储器分配地址的过程就 称为存储器映射,具体见图 3.1。如果给存储器再分配一个地址就叫存储器重映射。存储器映射的目的是为了方便程序访问这些存储器,并提供一种一致的访问方式。

图3.1 存储器映射(摘自参考手册-存储器映射章节)

 4 寄存器映射

        STM32微控制器的寄存器映射是一种将各种外设和系统寄存器映射到特定地址空间的方式,以便CPU能够通过读写这些地址来配置和控制微控制器的功能。以下是一般情况下STM32微控制器寄存器映射的一些基本概念:

  1. Flash存储器映射: STM32微控制器的程序代码通常存储在Flash存储器中。Flash存储器的基地址通常被映射到程序地址空间的开始处,以便CPU可以从这里执行指令。

  2. SRAM存储器映射: 静态RAM(SRAM)用于存储程序执行期间的数据。SRAM通常映射到数据地址空间,供程序使用。

  3. 外设寄存器映射: 每个外设都有一组相关的寄存器,用于配置和控制外设的行为。这些寄存器通常被映射到特定的地址空间,以便程序可以通过访问这些地址来与外设进行通信。

  4. 系统控制寄存器映射: 一些寄存器用于配置微控制器的系统级功能,例如时钟控制、中断控制等。这些寄存器被映射到系统地址空间。

  5. 中断向量表映射: 中断向量表包含中断服务程序的地址。在某些STM32微控制器中,中断向量表可能映射到Flash或SRAM中的特定位置。

  6. Bootloader区域映射: 如果微控制器集成了Bootloader,Bootloader区域通常有一个特定的地址范围,用于支持程序的更新。

  7. 特殊功能寄存器映射: 一些微控制器可能具有特殊功能寄存器,用于控制特殊的硬件功能,例如电源管理、看门狗定时器等。

        具体的寄存器映射细节取决于STM32微控制器的型号和系列。为了了解特定型号的寄存器映射,你需要查阅相应型号的参考手册或数据手册。这些手册通常提供了详细的寄存器映射表和寄存器描述,帮助开发者正确配置和操作微控制器的各个部分。

        寄存器就是给一个已经分配好地址的特殊的内存空间取的一 个别名,这个特殊的内存空间可以通过指针来操作。在编程之前我们要先实现寄存器映射,有关 寄存器映射的代码都统一写在 stm32f10x.h 文件中,

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

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

相关文章

D. Gargari and Permutations

很好玩的一道类似LCS的DP 问题 定义dp(i) 为考虑最后一个字符串&#xff0c;且选择a&#xff08;i&#xff09;得到的最大LIS值 然后枚举所有小于i的位置&#xff0c;可以更新的条件是 所有的字符串中都有a[j]<a[i] 这个用map一处理就好了 #include<bits/stdc.h> usi…

腾讯云轻量应用Windows服务器如何搭建幻兽帕鲁Palworld私服?

幻兽帕鲁/Palworld是一款2024年Pocketpair开发的开放世界生存制作游戏&#xff0c;在帕鲁的世界&#xff0c;玩家可以选择与神奇的生物“帕鲁”一同享受悠闲的生活&#xff0c;也可以投身于与偷猎者进行生死搏斗的冒险。而帕鲁可以进行战斗、繁殖、协助玩家做农活&#xff0c;也…

Type-C平板接口协议芯片介绍,实现单C口充放电功能

在现代平板电脑中&#xff0c;Type-C接口已经成为了一个非常常见的接口类型。相比于传统的USB接口&#xff0c;Type-C接口具有更小的体积、更快的传输速度和更方便的插拔体验。但是&#xff0c;在使用Type-C接口的平板电脑上&#xff0c;如何实现单C口充电、放电和USB2.0数据传…

qt学习:tcp区分保存多个客户端

在前面文掌的tcp客服端服务端进行更改 qt学习&#xff1a;Network网络类tcp客户端tcp服务端-CSDN博客https://blog.csdn.net/weixin_59669309/article/details/135842933?spm1001.2014.3001.5501前面的服务端每次有新的客户端连接&#xff0c;就会覆盖掉原来的指针&#xff0…

uniCloud ---- 云存储

目录 概念 1. web界面 2. 客户端API或组件上传 API 自定义样式 选择指定后缀图片&#xff0c;且限制选择个数 手动上传 应用 3. 云函数上传文件到云存储 uni.chooseImage(OBJECT) uni.previewImage(OBJECT) uploadFile(Object object) 请求参数 响应参数 应用 概念…

Web11--Bootstrap

1、Bootstrap入门 1.1 Bootstrap简介 官网&#xff1a;Bootstrap中文网 1.2 Bootstrap引入 <!DOCTYPE html> <html><head><meta charset"utf-8"><meta name"viewport" content"widthdevice-width, initial-scale1"…

服务器是什么?(四种服务器类型)

服务器 服务器定义广义: 专门给其他机器提供服务的计算机。狭义:一台高性能的计算机&#xff0c;通过网络提供外部计算机一些业务服务 个人PC内存大概8G&#xff0c;服务器内存128G起步 服务器是什么 服务器指的是 网络中能对其他机器提供某些服务的计算机系统 &#xff0c;相对…

一款颜值与实力并存的翻页时钟(免费)

FliTik是一款颜值与实力并存的翻页时钟&#xff0c;安卓端是完全免费的&#xff0c;无任何广告&#xff0c;极简风 &#xff0c;软件默认是12小时制&#xff0c;可以在设置中启用24小时制&#xff0c;并且还支持设置显示秒钟、日期、文案&#xff0c;滴答声和语音报时。 支持横…

数据分析的理念、流程、方法、工具(上)

一、数据的价值 1、数据驱动企业运营 从电商平台的「猜你喜欢」到音乐平台的「心动模式」&#xff0c;大数据已经渗透到了我们生活的每一个场景。不论是互联网行业&#xff0c;还是零售业、制造业等&#xff0c;各行各业都在依托互联网大数据&#xff08;数据采集、数据存储、…

C++ 设计模式之责任链模式

【声明】本题目来源于卡码网&#xff08;卡码网KamaCoder&#xff09; 【提示&#xff1a;如果不想看文字介绍&#xff0c;可以直接跳转到C编码部分】 【设计模式大纲】 【简介】 --什么是责任链模式&#xff08;第21种设计模式&#xff09; 责任链模式是⼀种行为型设计模式&am…

C语言实现希尔排序算法(附带源代码)

希尔排序 希尔排序&#xff0c;也称递减增量排序算法&#xff0c;是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。 希尔排序是基于插入排序的以下两点性质而提出改进方法的&#xff1a; 插入排序在对几乎已经排好序的数据操作时&#xff0c;效率高&#xff0…

Java PDFBox 提取页数、PDF转图片

PDF 提取 使用Apache 的pdfbox组件对PDF文件解析读取和转图片。 Maven 依赖 导入下面的maven依赖&#xff1a; <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.30</version> &l…

基于Docker、Minikube在PC端构建K8S试验环境

在桌面电脑上使用Docker和Minikube构建Kubernetes&#xff08;K8S&#xff09;试验环境&#xff0c;为学习和测试提供了一个理想的平台。Docker的容器化技术允许在隔离的环境中运行应用&#xff0c;而Minikube则简化了在单节点上部署和管理Kubernetes集群的过程。这种组合使得个…

Apipost-cli、Jenkins持续集成配置

安装 Apipost-cli npm install -g apipost-cli 运行脚本 安装好Apipost-cli后&#xff0c;在命令行输入生成的命令&#xff0c;即可执行测试用例&#xff0c;运行完成后会展示测试进度并生成测试报告。 Jenkins配置 Apipost cli基于Node js运行 需要在jenkins上配置NodeJs依…

eNSP 实验 两台AR配置同网段

实验1&#xff1a;eNSP 两台AR配置同网段 目的&#xff1a;创建两台AR&#xff0c;配置IP互相ping通 拓扑结构&#xff1a; 首先创建一个AR3260 然后创建一个AR2220 然后同轴电缆连接一下 先配置AR2220。 1、切管理员&#xff1a;system-view 进入千兆位以太网 0/0/0 interf…

MIT_线性代数笔记:第 29 讲 奇异值分解

目录 如何实现用矩阵数学语言描述这一过程举例 本讲介绍奇异值分解&#xff08;Singular value decomposition&#xff09;&#xff0c;简称 SVD。这是矩阵最终也是最好的分解&#xff0c;任意矩阵可分解为 A U Σ V T AUΣV^T AUΣVT&#xff0c;分解结果为正交矩阵 U&#x…

day31_HTML

今日内容 0 复习昨日 1 表格标签 2 表单标签【重要】 3 框架标签 0 复习昨日 Javaweb开发,前端,服务器,数据库 前端,要学习HTML,CSS,JavaScript,JQuery HTML是用来编写网页的一种编程语言 语法 由各种标签组成,标签是尖括号<>,一般都是成对儿出现,前面叫做开标签,后面…

excel中多行合并后调整行高并打印

首先参考该文&#xff0c;调整全文的行高。 几个小技巧&#xff1a; 1.转换成pdf查看文件格式 2.通过视图--》分页预览&#xff0c;来确定每页的内容&#xff08;此时页码会以水印的形式显示&#xff09; 3. 页面布局中的&#xff0c;宽度可以选为自动&#xff0c;因为已经是…

Linux——系统简介

1、从UNIX到LINUX 在目前主流的服务器端操作系统中&#xff0c;UNIX诞生于20世纪60年代末&#xff0c;Windows诞生于20世纪80年代中期&#xff0c;Linux诞生于20世纪90年代初&#xff0c;可以说UNIX是操作系统中的“老大哥”。 1.1、Linux简史 Linux内核最初是由李纳斯托瓦兹…

[TII 2023] 基于压缩感知的多级隐私保护方案

Multilevel Privacy Preservation Scheme Based on Compressed Sensing | IEEE Journals & Magazine | IEEE Xplore 摘要 物联网的广泛应用在给人们带来便利的同时&#xff0c;也引发了人们对数据采集、分析和共享过程中隐私泄露的担忧。本文提出了一种基于压缩感知的多级…