目录
注意: 文中标注 红色是重要信息,绿色是个人总结
一、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 总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。
在C语言中,全局变量通常存放在静态存储区,不是堆上也不是栈上。具体来说,全局变量存放在程序的 数据段 或 BSS段 中,这是程序的静态存储区域。
- 数据段: 如果全局变量被初始化,它们的值将存储在数据段中。

本文围绕STM32展开,介绍了芯片架构,包括内核与片上外设,以及FLASH、SRAM的作用;阐述了系统框图中驱动单元和被动单元的功能。还讲解了寄存器相关知识,如存储器映射、外设地址映射,以及C语言对寄存器的封装和修改寄存器的位操作方法。
1062

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



