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.rhkb.cn/news/245717.html

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

相关文章

【Unity美术】如何用3DsMax做一个水桶模型

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

自动化防DDoS脚本

简介 DDoS (分布式拒绝服务攻击)是一种恶意的网络攻击,旨在通过占用目标系统的资源,使其无法提供正常的服务。在DDoS攻击中,攻击者通常控制大量的被感染的计算机或其他网络设备,同时将它们协调起来向目标系…

鸿蒙开发实战-手写文心一言AI对话APP

运行环境 (后面附有API9版本,可修改后在HarmonyOS4设备上运行) DAYU200:4.0.10.16 SDK:4.0.10.15 IDE:4.0.600 在DAYU200:4.0.10.16上运行 一、创建应用 1.点击File->new File->Create Progect 2.选择模版…

数据库查询练习

数据准备 #建学生信息表student create table student ( sno varchar(20) not null primary key, sname varchar(20) not null, ssex varchar(20) not null, sbirthday datetime, class varchar(20) ); #建立教师表 create table teacher ( tno varchar(20) not null primary…

CentOS 7安装全解析:适合初学者的指导

目录 前言 一.centos安装 1.下载镜像文件 2.安装 二.远程连接,换源 1.下载并且使用MobaXtermMobaXterm free Xserver and tabbed SSH client for Windows (mobatek.net)https://mobaxterm.mobatek.net/ 远程连接 2.换源 前言 在当今的信息化时代&#xff0c…

java web servlet 学习系统进度管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web学习系统进度管理系统是一套完善的java web信息管理系统 ,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环 境为TOMCAT7.0,Myeclipse8.5开发,数据库为…

深度视觉目标跟踪进展综述-论文笔记

中科大学报上的一篇综述,总结得很详细,整理了相关笔记。 1 引言 目标跟踪旨在基于初始帧中指定的感兴趣目标( 一般用矩形框表示) ,在后续帧中对该目标进行持续的定位。 基于深度学习的跟踪算法,采用的框架包括相关滤波器、分类…

体验华为云对话机器人服务 CBS

🏡浩泽学编程:个人主页 🔥 推荐专栏:《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》 🛸学无止境,不骄不躁,知行合一 文章目录 前言一、开通…

【MySQL】如何使用图形化界面DataGrip操作数据库

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-W5JDg0WA1tjEP66Y {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

携手共赢 聚势谋远 | 卓翼智能面向全国招募合作伙伴,共拓无人机万亿商机!

近年来,无人机行业迎来快速发展的黄金时期。随着科技的进步和应用的广泛,无人机应用范围不断拓宽,在低空经济发展政策推动与市场需求的共同作用下,无人机市场规模有望实现突破式增长,预计到2025年将无人机业务市场规模…

Likeshop多商户商城源码系统,支持二开

在电商行业高速发展的当下,拥有一套功能强大、易于操作的开源商城系统至关重要。Likeshop多商户商城系统正是这样一款集H5、小程序、独立APP于一体的开源电商解决方案,助力商家实现智能营销。 一、产品简介 Likeshop多商户商城系统为商家提供了丰富的营…

docker安装Rabbitmq教程(详细图文)

目录 1.下载Rabbitmq的镜像 2.创建并运行rabbitmq容器 3.启动web客户端 4.访问rabbitmq的微博客户端 5.遇到的问题 问题描述:在rabbitmq的web客户端发现界面会弹出如下提示框Stats in management UI are disabled on this node 解决方法 (1&#…

Jellyfin影音服务本地部署并结合内网穿透实现公网访问本地资源

文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 1. 前言 随着移动智能设备的普及,各种各样的使用需求也被开发出来&…

SpringMVC-HttpMessageConverter 报文信息转化器

文章目录 HttpMessageConverter一、概念二、RequestBody三、RequestEntity四、 ResponseBody1.返回JSON格式的字符串 五、RestController六、ResponseEntity HttpMessageConverter 一、概念 报文信息转化器,将请求报文转化为Java对象,或将Java对象转化…

[蓝桥学习] 前缀和与差分

前缀和原理 特点 求区间和 如果要实现一边修改一边查询,需要使用树状树组和线段树。 例题 题目很简单,但是代码实现惊艳到我了,是L就加1,是Q就减1,如果区间 [i,j] 是平衡子串的话,那它会在前缀prefix i …

江科大STM32 中

目录 6、TIM(Timer)定时器基本定时器通用定时器高级定时器示例程序(定时器定时中断&定时器外部时钟)TIM输出比较示例程序(PWM驱动LED呼吸灯&PWM驱动舵机&PWM驱动直流电机)TIM输入捕获示例程序&…

带头 + 双向 + 循环链表增删查改实现

目录 源码: List.c文件: List.h文件: 简单的测试: 很简单,没什么好说的,直接上源码。 源码: List.c文件: #include"DLList.h"ListNode* creadNode(LTDataType x) {L…

【SpringBoot篇】springboot的自动装配原理

文章目录 🏳️‍🌈什么是自动装配🌹SpringBoot的自动装配🍔具体操作 🏳️‍🌈什么是自动装配 自动装配(Auto-Configuration)是Spring Boot框架的一个核心特性之一,它通过…

分布式websocket IM聊天系统相关问题问答【第九期】

前言 上期视频讲解了自己关于聊天系统的设计的时候出现了一些不一样的声音。不了解情况的可以看上上期视频。这期主要是讨论。IM聊天系统设计方案多。我的先说明一下自己的技术背景互相之间才能更好的理解。 本期对应视频 目前已经写的文章有。并且有对应视频版本。 git项目地…

在 Linux 上搭建 Java 环境

目录 一、安装jdk 1. 挑选 jdk 版本 2. 安装 3. 验证 jdk 二、安装tomcat 1. 下载压缩包 2. 上传压缩包给 Linux (需要用到 rz 命令) 3. 解压压缩包(需要用到 unzip) 4. 进入 bin 目录 5. 给启动脚本增加可执行权限 6. 启…