目录
一、STM32芯片架构简图及系统框图
1.1 STM32芯片架构简图
1.1.1 FLASH是什么,用来做什么
1.1.2 SRAM是什么,用来做什么
1.1.3 片上外设是什么,用来做什么
1.2 系统框图
1.2.1 驱动单元
1.2.2 被动单元
二、什么是寄存器
2.1 存储器映射
2.1.1 存储器 Block0 内部区域功能划分
编辑
2.1.2 存储器 Block1 内部区域功能划分
2.1.3 存储器 Block2 内部区域功能划分
2.2寄存器映射
2.2.1 STM32的外设地址映射
2.2.2 C语言对寄存器的封装
2.2.3 修改寄存器的位操作方法
注意: 文中标注 红色是重要信息,绿色是个人总结
一、STM32芯片架构简图及系统框图
1.1 STM32芯片架构简图
STM32 芯片是已经封装好的成品,主要由内核和片上外设组成。若与电脑类比,内核与外设就如同电脑上的 CPU 与主板、内存、显卡、硬盘的关系。
STM32F103 采用的是 Cortex-M3 内核,内核即 CPU,由 ARM 公司设计。ARM 公司并不生产芯片,而是出售其芯片技术授权。芯片生产厂商(SOC)如ST、TI、Freescale,负责在内核之外设计部件并生产整个芯片,这些内核之外的部件被称为核外外设或片上外设。如GPIO、USART(串口)、I2C、SPI等都叫做片上外设。
架构简图
个人总结:STM32单片机有很多系列,它其中的内核包括很多,有M0、M3、M4、M7等等各种内核,这些内核是由 ARM 公司进行设计但不生产 相当于盖房子是设计图纸的,而ST、TI等这些公司来进行生产 相当于拿到图纸进行盖房子的建筑公司。他们不仅盖房子,而且还在房子旁边建筑了配套设施,这可以看作是片上外设。
1.1.1 FLASH是什么,用来做什么
FLASH是什么:
FLASH: (Flash memory)闪存,用于存储程序代码和数据。
特性:非易失性存储器,系统断电或重启时,存储在其中的数据不会丢失。
用途:用于存储用户程序、固件和其他必要的信息。
在STM32芯片中,FLASH 的主要作用(用来做什么)包括:
存储程序代码: Flash主要用于存储微控制器的程序代码。在开发STM32应用时,您的编程代码将被烧录到Flash存储器中,以便微控制器能够执行您的应用程序。
非易失性存储: 与RAM(随机访问存储器)不同,Flash是非易失性存储器,这意味着它可以在断电后保持存储内容。这使得Flash成为存储在微控制器上电之间需要保留的重要信息的理想选择。
固件升级: Flash还用于执行固件升级。通过在Flash中存储新的固件版本,您可以通过编程方式更新微控制器的软件,而无需更换芯片。
数据存储: 除了程序代码,Flash还可用于存储一些常量数据、配置信息或其他需要在应用程序之间保持不变的数据。
1.1.2 SRAM是什么,用来做什么
SRAM 是什么:
SRAM:(Static Random-Access Memory)静态随机访问存储器,是一种用于存储数据的类型的内存。
特性:易失性存储器,系统断电或重启时,存储在其中的数据会丢失。
用途:Flash存储器通常用于存储程序代码,而 SRAM 则用于存储临时变量、中间计算结果和其他需要在程序执行期间频繁读写的数据。
在STM32芯片中,SRAM的主要作用(用来做什么)包括:
数据存储: SRAM用于存储在程序执行期间生成的数据。这可以包括临时变量、堆栈信息、全局变量等。
堆栈操作: 堆栈是一种用于存储函数调用和返回地址的数据结构。在程序执行时,每次函数调用都会将一些信息(如局部变量、返回地址等)存储在堆栈中。由于堆栈的访问模式是先进后出(Last In First Out,LIFO),因此SRAM是一个适合堆栈操作的存储介质。
运行时堆管理: 一些应用程序可能需要在运行时动态分配内存,例如使用malloc和free等函数。这样的内存分配通常是从SRAM中进行的。
中间结果存储: 在一些计算密集型应用中,SRAM用于存储中间计算结果,以提高访问速度并减少对Flash存储器的写入次数。
总体而言,SRAM在STM32芯片中起到了关键的作用,对于实时性要求高、需要频繁读写数据的应用程序来说,SRAM的快速访问速度和可读写特性是非常重要的。
个人总结:SRAM 就是一块儿内存,可以高速访问读写的内存,但掉电丢失数据,相当于我们手机里经常说的内存 8G+128G 中的 8G,我们打开某个APP,手机的操作系统就会调用该APP,其中产生的临时变量、函数调用什么的都是在运行内存上进行,所以,买手机大家都看运行内存有多大,当然越大,你的手机使用起来就越流畅,开多个应用也不会卡,当然这也只是你手机运行流畅的一部分原因,还得看手机厂商做的怎么样之类的。
1.1.3 片上外设是什么,用来做什么
在 STM32 微控制器中,"片上外设"(On-Chip Peripherals)指的是集成在芯片内部的硬件功能模块,用于执行特定的任务或提供特定的功能。这些外设可以大大简化嵌入式系统的设计,因为它们无需外部组件就能执行各种任务。
STM32 系列微控制器的片上外设种类繁多,不同型号的芯片可能具有不同的外设配置。以下是一些常见的 STM32片 上外设以及它们的一些用途:
GPIO(通用输入/输出): 用于连接和控制外部数字设备,例如LED、按钮、传感器等。
USART/UART(通用同步/异步收发器): 用于串行通信,例如连接到计算机、传感器、其他微控制器等。
SPI(串行外设接口): 用于高速串行通信,适用于连接存储器、传感器、显示屏等。
I2C(Inter-Integrated Circuit): 用于短距离串行通信,适用于连接多个设备,如传感器、EEPROM等。
ADC(模数转换器): 用于将模拟信号转换为数字信号,适用于从传感器中读取模拟数据。
PWM(脉冲宽度调制): 用于生成脉冲信号,通常用于控制电机、LED亮度等。
定时器和计数器: 用于生成定时事件,执行精确的时间控制。
看门狗定时器(WDT): 用于监视系统的运行状况,防止系统死锁或崩溃。
CAN(控制器区域网络): 用于在车辆系统等应用中进行高速通信。
USB控制器: 用于支持USB通信。
这只是其中一部分外设的示例,不同的STM32型号可能会包含其他特定用途的外设。使用这些片上外设,开发人员可以更轻松地实现各种应用,而无需外部硬件。
1.2 系统框图
芯片(这里指内核,或者叫CPU)和外设之间通过各种总线连接,其中驱动单元有 4 个,被动单元也有 4 个,具体见图 STM32F10xx 系统框图。为了方便理解,我们都可以把驱动单元理解成是 CPU 部分,被动单元都理解成外设。下面我们简单介绍下驱动单元和被动单元的各个部件。
系统框图
1.2.1 驱动单元
(1)ICode 总线:
ICode 中的 I 表示 Instruction,即指令。我们写好的程序编译之后都是一条条指令,存放在FLASH 中,内核要读取这些指令来执行程序就必须通过 ICode 总线,它几乎每时每刻都需要被使用,它是专门用来取指的。
个人总结:我们编辑好我们的代码,经过编译器编译生成计算机可执行的代码。这些代码我们可以通过反汇编查看,其实就是一条条的指令,计算机可以看懂的代码指令,这些指令都存储在我们FLASH上,CPU 通过 ICode 总线,读取指令进行操作。
(2)DCode 总线:
DCode 中的 D 表示 Data,即数据,那说明这条总线是用来取数的。 我们在写程序的时候,数据有常量和变量两种,常量就是固定不变的,用 C 语言中的 const 关键字修饰,是放到内部FLASH 当中的;
变量是可变的,不管是全局变量还是局部变量都放在内部的SRAM。 因为数据可以被 Dcode 总线和 DMA 总线访问,所以为了避免访问

最低0.47元/天 解锁文章
2427

被折叠的 条评论
为什么被折叠?



