STM32F103XX 01-存储器和总线架构

STM32F103XX 存储器和总线架构

stm32f103属于经典的一款微处理器,内核采用CortexM3内核,集成了一些常用外设接口,芯片可运行RTOS。对于型号为stm32f103zet6的单片机,内部sram的为64Kb,flash容量为512kb。

系统架构

芯片内部的组成架构如上图所示,主要分为master和slave,master包括4项,分别为Cortex® -M3、D-bus、S-bus、DMA1/2,如图中绿色阴影部分。slave也包括四部分,分别为内部sram、内部的flash、FSMC()和AHB到APB的桥,在图中用红色阴影标注。

  • ICode bus

    连接内部Cortex-M3内核的指令总线至flash的指令接口,在这条总线上完成取指令的操作;

  • DCode bus

    连接内部Cortex-M3内核的数据总线至flash的数据接口;

  • 系统总线

    连接Cortex-M3内核的系统总线至芯片的总线矩阵,总线矩阵负责协调内核与DMA;

  • DMA总线

    连接DMA的ABH master接口至芯片的总线矩阵;

  • 总线矩阵

    • 采用轮换算法协调内核系统总线与DMA主控总线之间的访问仲裁;
    • 连接四个主设备CPU DCode, System bus, DMA1 bus and DMA2 bus和四个从设备FLITF, SRAM, FSMC and AHB2APB bridges;
    • AHB外设通过总线矩阵与系统总线连接,允许DMA访问;
    • 协调CPU DCode和DMA到SRAM flash和外设的访问;
  • AHB/APB桥

    • 两个AHB/APB的桥,桥用于AHB总线与2个APB总线之间的同步连接
    • APB1限制在36MHz,APB2提供高速72MHz;
    • 在每一次复位之后,除SRAM and FLITF之外,其他外设时钟均处于关闭状态;
    • 在使用外设之前,需要操作RCC部分对应的寄存器打开时钟;

内存管理

在f103处理器中程序内存、数据内存、寄存器和IO端口采用统一线性分布,大小为4Gb,在Cortex-M3的内存管理中提供了一个宏观的内存分布。

内存映射

  • 外设映射

    外设主要映射在0x40000000为起始地址的区域,但FSMC的地址范围为0xA000 0000 - 0xA000 0FFF,大小为4KB;

  • 嵌入式SRAM

    f103支持64kb大小的静态RAM,地址范围为0x20000000至0x20010000,支持16/32/8位访问;

  • Bit banding

    • 在Cortex-M3内核文档中描述了两部分的Bit banding,一部分是外设,另外一部分是RAM。在F103中所有的外设和SRAM均映射到了对应的banding区域,支持单个bit的写和读,但是仅内核操作,对于DMA则不支持该特性;

    • 计算公式

      bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4)

      例如要计算SRAM地址0x20000300中bit2对应的8位banding地址,套入上述公式:

      0x22006008 = 0x22000000 + (0x300x32) + (2x4)

  • 嵌入式flash

    f103zet6芯片支持的flash为512Kb,在分布上划分为两部分,分别是主内存块和信息块;

    • 主内存块:划分为256个页,每一页的大小为2Kb;

    • 信息块:大小为2Kb;

    • FLITF(Flash memory interface)闪存接口功能包括带预取缓冲器的读接口、可选的字节加载器、flash的编程和擦除以及读写保护

    • 闪存读取

      闪存指令和数据的访问通过AHB总线,预取缓冲块用于ICode总线,DCode上的数据有更高的优先级,在读访问时可以配置读操作等待的时间,缓冲区的大小(2x64bit)以及半周期。

    • 编程和擦除

      支持16位的写,在读写操作是内部的HSI必须是开启状态; 擦除不仅可以按页擦除,也可以整个擦除; 读写控制块由一个固定时钟控制;在读写操作完成后可以产生一个中断,中断用于退出WFI模式;

    • FLASH_ACR寄存器

      可用于预取缓冲块的设置,半字节访问,等待时间的配置;

    • 更多关于flash的内容,请参考《STM32F10xxx Flash programming manual》

启动配置

f103通过boot引脚支持3种不同的启动方式,包括:

  • 从主闪存启动:起始地址映射到0x0000 0000,也可以从原地址0x8000000处访问;
  • 从系统内存启动:映射至0x0000 0000,原地址为0x1FFF F000;
  • 从嵌入式SRAM启动:访问地址为0x2000 0000,此方式需要改写中断向量表的地址;

在复位之后系统时钟的第四个上升沿将采样boot引脚的状态,从Stnadby模式退出后也会从新采样。在启动延时过去后,cpu将会从地址0x00000000处获取栈的地址,从0x00000004处执行代码,内核始终从ICode总线获取复位向量。

嵌入自举程序

嵌入的自举程序存放在系统存储区,由厂家在生产时写入,可通过UART1接口对该存储器进行从新编程。具体请参考《Introduction to system memory boot mode on STM32 MCUs》文档。

总结

首先对32单片机的系统架构做了了解,知道单片机内除了Cortex-M3还有什么,以及模块之间的组合关系。然后介绍了内存相关的部分,需要关注的点是内部flash的结构和访问特性,这部分有具体的参考手册,后面有机会查看。最后是启动的配置,32单片机支持3种启动方式,经常用的一种是从主flash中启动。

相关推荐
恒锐丰小吕2 小时前
屹晶微 EG2124A 中压260V三相半桥驱动芯片技术解析
嵌入式硬件·硬件工程
来自晴朗的明天2 小时前
5、CBMV321 分压式电压跟随器电路
单片机·嵌入式硬件·硬件工程
Ivanqhz3 小时前
现代异构高性能计算(HPC)集群节点架构
开发语言·人工智能·后端·算法·架构·云计算·边缘计算
DisonTangor3 小时前
智谱开源基于GLM-V编码器-解码器架构的多模态OCR模型——GLM-OCR
架构·开源·ocr
羽获飞3 小时前
从零开始学嵌入式之STM32——7.STM32的系统架构
stm32·单片机·嵌入式硬件
范纹杉想快点毕业3 小时前
嵌入式系统架构之道:告别“意大利面条”,拥抱状态机与事件驱动
java·开发语言·c++·嵌入式硬件·算法·架构·mfc
-Springer-3 小时前
STM32 学习 —— 个人学习笔记2-1(软件安装)
笔记·stm32·学习
来自晴朗的明天4 小时前
6、AD7683 单通道 AD 采样电路
单片机·嵌入式硬件·硬件工程
TEL136997627504 小时前
方寸微PT153s千兆网口方案 替代RTL8153b方案
单片机·嵌入式硬件