图1 STM32F1系列芯片系统结构图

Flash 、RAM 与 CPU

(1)Flash

Flash就是一个用来永久存储代码和常量的容器,所有你写的代码编译后都会转换成二进制,然后再通过烧录器(比如STLINK)上面的 SWD 这个通道连接到 Flash,这样你写的代码内容都会传输进 Flash 里面存储着

CPU 就会通过 ICode 和 DCode 这两个线来分别读取 Flash 里面的指令数据和变量数据(两条线读取效率高一些),但要再通过一个Flash接口,因为CPU读取速度太快,Flash速度慢,就需要一个中间人来匹配速度

(2)RAM

RAM就是CPU的一张“草稿纸”,用来存放临时变量的一个容器,RAM中又包含了栈、堆、数据段,这些内容其他章节在具体讲解。断电之后RAM中所有的数据都会丢失

(3)CPU

单片机上的CPU,也就是Cortex-M,其本质上就和电脑里的CPU( intel / AMD )就是一个东西,只不过一个主打低功耗一个主打高性能

Cortex-M 通过三条内部总线与外界交互:

  • ICode:只读,专门从 Flash 取指令。

  • DCode:只读,专门从 Flash 取常量和只读数据。

  • System:可读可写,负责与 SRAM、所有外设(GPIO、UART、SPI 等)、FSMC 扩展设备 等 Flash 之外的一切交互。

AHB系统总线

(1)AHB与CPU

AHB就是单片机内部的主干道高速公路,CPU先通过System线挂在到AHB上,然后就可以和RAM、DMA以及其他外设交互了。所以,System是CPU伸向AHB世界的一只手,这只手负责读写数据、配置外设;而ICode/DCode是CPU的两只眼睛,只盯着Flash里的代码看

AHB的频率最高不能超过CPU,准确来说是整个单片机最高的频率就是CPU决定的,CPU的频率是决定运算速度有多快,AHB的频率决定的是传输数据的速度有多快(AHB频率影响整个挂载在AHB上的所有外设),

(2)APB与AHB

由于CPU频率很高,AHB就是一个高频率的高速公路,但是其他外设比如UART之类的频率比较低,没法直接通过AHB接收数据,所以就外挂了一个APB桥,桥接了APB这个低速公路,然后这些低速设备就可以挂载到APB上,从而实现了CPU去控制这些外设

(3)APB分频系数

要注意APB分频之后的频率一定要低于APB上挂载的外设的最高频率,就比如说APB1上挂载着I2C1、UART4等等(一般同一个APB线上外设的最高频率都是一样的),如果外设最高的频率为42MHz,而AHB的频率为168MHz,那么APB1的分配系数就应该设置为/4,从而让APB的频率降至42MHz。(但是外设实际的通信速率是在外设内部还有分频系数APB那个只是最该频率 )

(4)FSMC与SDIO

这两个模块就是AHB主干道上的两个大型外贸中心,专门用来和外界进行大规模高速的数据交互

  • FSMC:他的核心作用就是给CPU接入外部的FLASH和RAM,解决内部存储器空间不够的问题

  • SDIO:它的核心作用就是专门用来读取SD卡之类的多媒体存储卡

DMA

(1)核心本质

DMA就是一个挂载在AHB上的高速外设,用深动形象的举例来说明:CPU是一个又能搬运数据又可以进行大量计算的全能人才,但不过搬运数据非常占用CPU的精力,所以CPU就雇佣一个力工DMA,它是专门来搬运CPU计算好后的数据。CPU给DMA下达指令,DMA就会高效的完成海量的搬运任务

(2)DMA频率与总线仲裁

DMA频率就等AHB的频率;

CPU和DMA在AHB上是平起平坐的主控设备。当两者同时访问同一外设或SRAM地址时,总线矩阵内的仲裁器决定谁先用,可能导致一方等待。高级方案是使用双缓冲模式避免冲突;

注:此文章为本人学习笔记,如有错误欢迎在评论区指出,感谢各位指点!

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐