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中启动。

相关推荐
搜佛说6 小时前
02-第2章-核心概念与架构
数据库·物联网·微服务·架构·边缘计算·iot
xiangw@GZ6 小时前
低功耗应用:BUCK的输入与输出环路
嵌入式硬件
张同学036 小时前
220V 转 12V/5V 电源输入电路设计笔记
笔记·嵌入式硬件·硬件工程
清风6666667 小时前
基于单片机的智能药物盒设计与实现
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
李永奉8 小时前
杰理芯片SDK-详细讲解AC695N/AC696N芯片SDK中APP模式流程
单片机·嵌入式硬件·物联网·语音识别
笨笨饿8 小时前
30_泰勒级数
c语言·stm32·嵌入式硬件·线性代数·机器学习·自动化·概率论
季鹏EthanJ8 小时前
VCC上电慢导致STM32无法复位
stm32·单片机·嵌入式硬件·上电复位故障·bor
点灯小铭9 小时前
基于单片机的太阳能12V蓄电池光控时控路灯智能控制器设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
LCG元9 小时前
STM32实战:基于STM32F103的智能体重秤(HX711+OLED)
stm32·单片机·嵌入式硬件
小白zlm9 小时前
预畸变双线性变换
单片机·嵌入式硬件·算法·电机控制