上一章我们讲到,STM32F10x系列处理器基于ARM Cortex-M3内核,按性能分为四个不同系列:基本型STM32F101系列,USB基本型STM32F102系列,增强型STM32F103系列,互联网型ST32F105,STM32F107系列,统称为STM32F10x。以下我们以STM32F103系列为主,详细讲述一下其结构特点。
一、STM32F103微控制器外部结构
STM32F103系列芯片包含从36~144脚不同封装形式,不同的封装和丰富的资源使得STM32F103系列适用于多种场合,如医疗、PC外设,变频器等工业设备。 STM32系列命名遵循一定的规则,通过名字可以确定该引脚、封装、Flash大小等信息。STM32命名规则如下所示,我们以市面上常见的STM32F103C8T6为主进行讲解:
(1)芯片系列:STM32代表ST品牌Cortex-Mx系列内核(ARM)的32位MCU。
(2)芯片类型:F-通用快闪,L-低电压(1.65~3.6V),W-无线系统芯片。
(3)芯片子系列:103—ARM Cortex - M3内核,增强型;050—ARM Cortex -M0内核;101—ARM Cortex-M3内核,基本型;102—ARM Cortex-M3内核,USB基本型;105—ARM Cortex-M3内核,USB互联网型;107—ARM Cortex-M3内核,USB互联网型、以太网型;215/217—ARM Cortex-M3内核,加密模块;405/407—ARM Cortex-M4内核,不加密模块等。
(4)引脚数目:R—64引脚,F—20引脚,G—28引脚,K—32引脚,T—36引脚,H—40引脚,C—48引脚,U—63引脚,O—90引脚,V—100引脚,Q—132引脚,Z—144引脚,I—176引脚。
(5)Flash容量:B— 128KB(中容量),4—16KB(小容量),6—32KB(小容量),8—64KB(中容量),C—256KB(大容量),D—384KB(大容量),E—512KB(大容量),F—768KB(大容量),G—1MKB(大容量)。
(6)封装信息:T—LQFP,H—BGA,U—VFQFPN,Y—WLCSP。
(7)工作温度范围:6—-40°~85°(工业级),7—-40°~105°(工业级)
(8)可选项:此部分可以没有。
二、 STM32F103总线和存储器结构
2.1 总线结构
根据指令和数据所用的存储空间与总线形式的不同,可以把处理器分为冯·诺伊曼结构和哈弗结构。诺依曼结构的微处理器 指令和数据共用一个存储空间一条总线,这样内核在取时不能进行数据读写,反之亦然。哈弗结构的微处理器指令和数据存储在不同的存储空间,采用独立的指令总线和数据总线,可以同时进行取地址和数据读写操作,从而提高了处理器的运行性能。ARM处理器采用的是哈弗结构。
STM32F103的总线系统由驱动单元、被动单元和总线矩阵三部分组成,STM32F103总线系统如下图所示:
1. 驱动单元
(1)指令总线(ICode):将Cortex-M3内核的指令总线与Flash指令接口相连接。取指操作在该总线上进行。
(2)数据总线(DCode):将Cortex-M3内核的数据总线与Flash数据接口相连接,用于常量加载和调试访问。
(3)系统总线(System):将Cortex-M3内核的系统总线连接到总线矩阵,总线矩阵协调着内核和DMA间的访问。
(4)直接内存访问总线(DMA):将DMA的AHB主机接口连接到总线矩阵,总线矩阵协调着CPU的DCode和DMA到SRAM、闪存和外设的访问。
2. 被动单元
被动单元有3个,即内部SRAM、内部Flash、AHB到APB桥。2个AHB/APB桥在AHB和2个APB总线之间提供完全同步的连接,APB1工作速度被限制在36MHz,APB2工作在全速72MHz。
3. 总线矩阵
DCode总线、System总线和通用DMA总线通过总线矩阵与被动单元连接,总线矩阵分时轮换协调内核中数据总线、系统总线和DAM总线之间的访问。为了允许DAM访问,AHB外设通过总线矩阵连接到系统总线。
2.2 存储器结构和映射
STM32F103的程序存储器、数据存储器、寄存器和IO端口被组织到一个4GB的线性地址空间。数据自己以小段模式存放在存储器中。(小端格式:即低地址中存放的是数据的低字节,高地址中存放的是数据的高字节。)以STM32F103内存映射为例,其地址空间被分为8块,每块512MB。如下图所示:
2.3 位带
在STM32中,外设寄存器和SRAM都被映射到一个位带区中,使用下列术语来表示位带存储的相关地址:
(1)位带区:支持位带操作的地址区
(2)位带别名:位带区中位的别名,对别名的访问最终映射到位带区中位的访问上。
在位带区中,每一个比特(即每一位)都映射到别名地址区的一个字。该字只有最低位有效。当一个别名地址被访问时,会先把该地址变换成位带地址。对于读操作,读取位带地址中的一个字,再把需要的位右移到最低为并把最低为返回;对于写操作,把需要写的位左移至对应的位序号处,然后执行一个原子的“读-改-写”过程。
支持位带操作的两个内存区的范围是:
(1)0x20000000 ~ 0x200FFFFF(内部SRAM区中的最低1MB)。
(2)0x40000000 ~ 0x400FFFFF(片内外设区中的最低1MB).。
对于内部SRAM位带区的某个比特,记它所在字节地址为A,位序号为n(0≤n≤7),则该比特在别名区的地址为:
0x22000000 +((A-0x20000000)*8 +n)*4 = 0x2200000 +(A-0x20000000)*32+n*4
对于片内外设位带区的某个比特,记它所在字节的地址为A,序号为n(0≤n≤7),则该比特在别名区的地址为:
0x42000000 +((A-0x40000000)*8 +n)*4 = 0x4200000 +(A-0x40000000)*32+n*4
式中:4表示的是4个字节,8表示一个字节有8位。