news 2026/9/2 20:42:08

STM32_内部结构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STM32_内部结构

文章目录

  • 一、STM32系统结构简图
  • 二、系统框图
    • 1、驱动单元
      • (1)ICode 总线:
      • (2)DCode 总线:
      • (3)System 系统总线:
      • (4)DMA 总线
    • 2、被动单元
      • (1)内部的闪存存储器 —— Flash
      • (2)内部的SRAM
      • (3)静态的存储器控制器 —— FSMC
      • (4)AHB 到 APB 的桥

一、STM32系统结构简图

二、系统框图

1、驱动单元

(1)ICode 总线:

ICode 中的 I 表示 Instruction,即指令。我们写好的程序编译之后都是一条条指令,存放在FLASH 中,内核要读取这些指令来执行程序就必须通过 ICode 总线,它几乎每时每刻都需要被使用,它是专门用来取指的。
个人总结:
我们编辑好我们的代码,经过编译器编译生成计算机可执行的代码。这些代码我们可以通过反汇编查看,其实就是一条条的指令,计算机可以看懂的代码指令,这些指令都存储在我们FLASH上,CPU 通过 ICode 总线,读取指令进行操作。

(2)DCode 总线:

DCode 中的 D 表示 Data,即数据,那说明这条总线是用来取数的。
我们在写程序的时候,数据有常量和变量两种,常量就是固定不变的,用 C 语言中的 const 关键字修饰,是放到内部FLASH 当中的;
变量是可变的,不管是全局变量还是局部变量都放在内部的SRAM。 因为数据可以被 Dcode 总线和 DMA 总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。
在C语言中,全局变量通常存放在静态存储区,不是堆上也不是栈上。具体来说,全局变量存放在程序的 数据段 或 BSS段 中,这是程序的静态存储区域。
数据段: 如果全局变量被初始化,它们的值将存储在数据段中。数据段的大小在编译时确定,包含所有已初始化的全局变量。
BSS段: 如果全局变量未被初始化,它们的值将被初始化为零,并存储在BSS段中。BSS段通常在可执行文件中占据一些空间,但不存储实际的数据,因为这些变量被默认初始化为零。
在函数内声明的局部变量通常存储在栈上,而动态分配的内存(通过malloc、calloc等函数分配的)存储在堆上。全局变量的生命周期通常是整个程序的运行时间,而局部变量的生命周期则与其所在的函数调用有关。
需要注意的是,全局变量和静态变量(在函数内使用static关键字声明的变量)都在程序的静态存储区域,因此它们的生命周期是整个程序的运行时间。

(3)System 系统总线:

系统总线主要是访问外设的寄存器,我们通常说的寄存器编程,即读写寄存器都是通过这根系统总线来完成的。

(4)DMA 总线

DMA 总线也主要是用来传输数据,这个数据可以是在某个外设的数据寄存器,可以在SRAM,可以在内部的 FLASH 。因为数据可以被 Dcode 总线和 DMA 总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。
个人总结:
它允许片上外设直接访问计算机内存而不需要经过中央处理单元(CPU)的干预。这样可以在数据传输过程中解放 CPU,使其能够执行其他任务,从而提高系统的整体性能,数据在DMA控制器下进行的数据传输过程中,CPU 可以继续执行其他指令,而不必等待数据传输的完成,不受数据传输过程的干扰。

2、被动单元

(1)内部的闪存存储器 —— Flash

内部的闪存存储器即 FLASH,我们编写好的程序就放在这个地方。
内核通过 ICode 总线来取里面的指令。我们程序中生成的一些重要数据也可以保存在芯片内部的flash中,但要注意,读写空间,不要把程序运行的代码给篡改了。

(2)内部的SRAM

内部的SRAM,即我们通常说的RAM,程序的变量,堆栈等的开销都是基于内部的SRAM。内核通过 DCode 总线来访问它。

(3)静态的存储器控制器 —— FSMC

FSMC的英文全称是Flexible Static Memory Controller,叫灵活的静态的存储器控制器,是STM32F10xx中一个很有特色的外设,通过FSMC,我们可以扩展内存,如外部的SRAM,NAND-FLASH和NORFLASH。但有一点我们要注意的是,FSMC只能扩展静态的内存,即名称里面的S:static,不能是动态的内存,比如SDRAM就不能扩展。

(4)AHB 到 APB 的桥

从 AHB 总线延伸出来的两条 APB2 和 APB1 总线,上面挂载着STM32各种各样的特色外设。我们经常说的 GPIO、串口、I2C、SPI 这些外设就挂载在这两条总线上,这个是我们学习STM32的重点,就是要学会编程这些外设去驱动外部的各种设备。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/31 8:57:39

用了一年Cursor,我的代码能力反而退化了

昨天晚上,我盯着屏幕发了半小时呆。 不是在等编译,是在等AI生成代码——然后我发现,离开AI提示,我竟然写不出一个完整的React组件了。 手指悬在键盘上,脑子一片空白。 这种感觉,就像你开了三年自动挡&am…

作者头像 李华
网站建设 2026/9/1 13:12:49

AI原生应用助力业务流程增强的实战指南

AI原生应用助力业务流程增强的实战指南 关键词:AI原生应用、业务流程增强、大语言模型(LLM)、智能自动化、人机协作 摘要:本文从企业业务流程的实际痛点出发,系统讲解"AI原生应用"这一新一代技术形态如何从底…

作者头像 李华
网站建设 2026/8/31 5:48:00

不管leader问你啥,你就记住一个话术原则

作为大厂搬砖多年的打工人,我深刻体会到:和leader沟通时,怎么说,往往比做什么更重要:1、当被问到不清楚的事情时❌别说:“我不知道”✅试试:“这个我马上去确认一下,稍后同步你” le…

作者头像 李华
网站建设 2026/9/2 8:21:00

x^5 + x + 1 = 0, x^3 - x^2 = ?

x^5 x 1 0, x^3 - x^2 ?x^5 x 1 (x^3 - x^2) (x^2 x 1) x^2 x 1 (x^3 - x^2 1)(x^2 x 1) 0x^2 x 1 x^2 2 * 1/2 * X 1/2^2 3/4 > 3/4x^3 - x^2 1 0x^3 - x^2 -1

作者头像 李华
网站建设 2026/9/2 19:43:53

COMSOL 仿真二次谐波产生:从理论到实践

COMSOL仿真二次谐波产生 基本介绍: 主要内容:根据发表在 Physical Review Letters 上的论文《Artificial nonlinearity generated from electromagnetic coupling metamolecule》最近在研究非线性光学相关内容,根据发表在《Physical Review L…

作者头像 李华
网站建设 2026/9/2 19:42:41

基于springboot的人格测试网站系统

博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了六年的毕业设计程序开发,开发过上千套毕业设计程序,没有什么华丽的语言&#xff0…

作者头像 李华