Logo

郎哥编程

详解STM32单片机架构、内存映射、寄存器、GPIO端口

2026-10-29 4

1、STM32系列微控制器

STM32中的ST指的是意法半导体,M是Microelectronics的缩写,32表示32位,即意法半导体公司开发的32位微控制器。

STM32单片机是意法半导体(STMicroelectronics)基于ARM Cortex-M内核设计的32位微控制器系列,采用ARM Cortex-M系列内核(如M0、M3、M4、M7),主频覆盖24MHz至550MHz。例如,STM32F103系列使用Cortex-M3内核,主频72MHz,而高端型号如STM32H7系列采用双核设计(M7+M4)。‌

目前STM32系列微控器包含多个子系列,分别是:STM32小容量产品、STM32中容量产品、STM32大容量产品和STM32互联型产品;按照功能上的划分,又可分为STM32F101xx、STM32F102xx和STM32F103xx等系列。具体系列见下图:

3.2.STM32系列微控制器

容量划分是按照单片机闪存存储器容量进行分类,闪存存储器也称为Flash存储器,它在断电的情况下也能够长久地保持数据,并且可以进行多次擦除和再写入。单片机使用闪存存储器存储在单片机中运行的程序,当程序修改后可以重新写入到单片机。

STM32从功能上分位基本型、USB基本型、增强型、互联型等系列,当前我们教学使用的是STM32F103R6单片机,该单片机是增强型。

虽然STM32单片机分为多个系列,但STM32微控制器产品中大多数功能模块都是在多个产品(或所有产品)中共有的并且是相同的。因此我们学习STM32F103R6单片机的原理和应用,可以完全掌握STM32其它单片机的原理和应用。

2.STM32系列命名规则

我们拿到一款STM32单片机,可以通过型号来了解该款单片机的基本参数。STM32系列命名规则如下图所示:

STM32系列产品命名规则

STM32表示该单片机为基于ARM架构的32位微控制器。STM32后面的字母F表示该单片机为通用型。字母F后面的数值表示单片机的功能类型,如101为基本型,103为增强型等。功能型标识后面的字母是单片机的引脚数目,如T为36引脚,R为64引脚等。引脚标识后面的字母或数字表示闪存存储器的容量,如4表示16K字节,6表示32K字节,C表示256K字节等。闪存存储器容量标识后面的字母表示芯片的封装方式,封装是把由晶体管等电子器件构成的电路封装到一个外壳内,然后由外壳引出引脚与内部电路和外部电路连接,不同的封装方式有其不同的优点和缺点。封装标识后面的数字表示单片机的工作温度,一些极限温度工作场合需要特别注意单片机的工作温度。

下图是一款STM32单片机照片,根据标识的型号来了解该款单片机的基本参数。

STM32单片机外观

该款单片机为通用类型的增强型,引脚数目为100个,闪存存储器容量为256K,封装方式为LQFP,工作温度为-40度~85度。

3.系统架构

了解STM32F103R6单片机的系统架构,就是明确这颗芯片在硬件上由哪几部分构成?各部分的功能以及各部分之间的数据交换,对STM32单片机系统架构的把握,有助于我们进行单片机的开发。

STM32F103系列单片机(互联型除外)由四个驱动单元和四个被动单元构成,互联型STM32单片机有五个驱动单元,多一个以太网驱动单元。下图是STM32F103系列单片机(非互联型)的系统架构图:

STM32单片机系统架构

观察上图,可以看到单片机以‌总线矩阵‌为核心枢纽,构建了包含核心处理单元、多级总线、存储器接口、外设及DMA控制器的完整系统,具体结构如下:

‌核心与时钟系统‌

‌Cortex-M3内核‌:通过ICode(指令)、DCode(数据)、System总线与外设交互,支持Thumb-2指令集及NVIC中断控制。

‌复位和时钟控制(RCC)‌:位于AHB总线,生成HCLK(系统主时钟)、PCLK1/PCLK2(外设时钟),支持多时钟源(外部晶振、内部RC)及分频配置。

‌总线架构‌

‌1. AHB系统总线(高速)‌

‌总线矩阵‌:连接多主设备(CPU、DMA1、DMA2)与从设备(Flash、SRAM、FSMC等),实现并行数据访问。

‌主要外设‌:

‌Flash接口‌:通过ICode/DCode总线与内核连接,存储程序代码;

‌SRAM‌:片内数据存储器,支持CPU/DMA直接访问;

‌FSMC‌:扩展外部静态存储器(如SRAM、NOR Flash);

‌SDIO‌:连接SD卡等存储设备。

‌2. APB外设总线(低速)‌

‌APB1(最高36MHz)‌:通过桥接1连接AHB,挂载低速外设:UART2-5、I2C1-2、SPI2-3、TIM2-7、CAN、USB、DAC等。

‌APB2(最高72MHz)‌:通过桥接2连接AHB,挂载高速外设:GPIOA-G、UART1、SPI1、TIM1-8、ADC1-3、EXTI等。

‌存储器接口‌

‌片内存储‌:Flash(程序存储)、SRAM(数据存储),直接通过总线矩阵与内核/DMA交互。

‌外部扩展‌:FSMC控制器支持外接SRAM、NOR Flash等,通过总线矩阵扩展存储容量。

‌外设分布‌

‌GPIO与中断‌:GPIOA-G(APB2)支持多模式输入输出及复用功能,配合EXTI实现外部中断。

‌定时器‌:APB1(TIM2-7,通用定时器)、APB2(TIM1/8,高级定时器,支持PWM互补输出)。

‌通信接口‌:UART(异步)、SPI(同步)、I2C(两线式)、CAN(控制器局域网)、USB(2.0全速)。

‌模拟外设‌:ADC1-3(12位模数转换,APB2)、DAC(数模转换,APB1)。

‌DMA控制器‌

‌DMA1(7通道)‌:独立于CPU传输数据,支持UART、SPI、ADC等外设与存储器间的高速数据搬运。

‌DMA2(5通道)‌:用于高优先级外设(如SDIO、USB)的数据传输,通道1-5对应不同外设请求。

‌该架构采用‌分层总线设计,AHB(高速核心)与APB(低速外设)隔离,平衡性能与功耗;总线矩阵与DMA控制器实现多设备并行访问,提升系统吞吐量,该架构适用于工业控制、物联网、嵌入式系统等需要高效数据处理和多外设交互的场景。

4. DMA控制器

单片机提供了两个DMA控制器,分别是DMA1和DMA2。DMA为STM32单片机提供了与外部设备进行高速数据传输的通道,DMA可以绕过M3内核与外部设备、内存之间直接进行数据传输,无需M3内核的控制。当外部设备需要通过DMA传输数据到内存时,外设先给DMA控制器发送DMA请求,DMA收到请求信号之后,控制器会给外设一个应答信号,当外设应答后且DMA控制器接收到应答信号之后,就会启动DMA传输,直到传输完毕。DMA传输过程如下图所示:

DMA控制器

上图的总线矩阵负责阵协调内核系统总线和DMA主控总线之间的访问仲裁,仲裁利用轮换算法,即协调内核系统总线和DMA总线对存储器、外部设备的访问权,访问权每隔一段时间就更换。AHB系统总线是高性能总线,它可以将M3内核、高速外部设备(如SRAM存储器)、DMA控制器等连接在一起,构建高性能的数据传输通道。AHB总线不能直接连接低速外部设备(如USART、ADC等外设),因此需要通过AHB/APB桥将AHB总线结构转换为APB总线结构,低速外部设备通过APB总线接入到单片机,APB总线主要用于和低速以及低功耗的外设通信,APB1操作速度限于36MHz,APB2操作于全速(最高72MHz),单片机的GPIO端口都挂载到APB2总线。

5. 存储器组织

STM32单片机的存储器包括程序存储器、数据存储器、寄存器和输入输出端口,它们被组织在同一个4GB的线性地址空间内。

数据以小端模式存放在存储器中,小端模式就是把数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。与小端模式对应的是大端模式,大端模式把数据的低位保存在内存的高地址中,数据的高位保存在内存的低地址中。

为什么会有大小端模式之分呢?这是因为在计算机系统中每个存储单元对应一个字节,但是编程语言的数据类型一般对应着多个字节(如C语言的整型、浮点类型等),当存储器存储多个字节时,就需要解决字节的顺序问题,大端模式和小端模式就时解决字节存储顺序问题的。例如:一个C语言无符号短整型变量的值为0x1122(0x11为高字节,0x22为低字节),存储在内存地址为0x0010的存储单元内,0x0010存储0x22,0x0011存储0x11。

本课教学使用的是STM32F103R6型单片机,与之配套的数据手册给出了存储器映像图(见下图),若同学们使用的其它型号,请参考与之配套的数据手册。

STM32单片机存储映射

存储器映像就是告诉我们STM32是如何分配4GB存储空间给Flash、SRAM、M3内核寄存器、外设(寄存器、内存等存储器)等设备。对于STM32F103R6型单片机,观察存储器影像图,外设存储地址范围(图中的黄色区域)为0x4000 0000~0x4002 0400,包括DMA、GPIO端口、TIME、USART等外部设备。该区域起始地址0x4000 0000对应TIM2定时器,结束地址0x4002 0400对应DMA2控制器,完整覆盖了STM32的片上外设地址空间。

6.外设寄存器地址映射

外设存储地址范围从0x4000 0000到0x4002 0400,该地址范围内的寄存器通过内存映射I/O技术实现访问。例如GPIO端口A的基地址为0x4001 0800,通过给特定功能的内存单元分配地址并取别名的方式完成寄存器映射。每个外设寄存器组通常占用1KB地址空间,如USART2寄存器位于0x4000 4400-0x4000 47FF。

上图是《STM32技术参考手册》寄存器组起始地址表,与《TM32F103R6数据手册》存储器映象图,关于I/O端口存储空间的对比图。《TM32F103R6数据手册》的PortA对应《STM32技术参考手册》GPIO端口A,PortB对应GPIO端口B,……,它们的起始地址都是相同的。

在《stm32f10x.h》文件中,跟踪GPIOA的宏定义,可以找到外围设备基地址的宏定义PERIPH_BASE,基地址为0x40000000。Flash、SRAM、外围设备基地址的宏定义如下图所示:

GPIO端口挂载在APB2总线上,APB2总线基地址的宏定义为:

最后可以找到GPIOxBASE的宏定义:

开发者可以通过GPIO端口的宏定义,找到GPIO组寄存器的基地址,并对GPIO寄存器进行读写操作。通过类似的方式,我们就可以给具体的寄存器写上适当的参数来控制STM32了。

7.STM32F103xx单片机引脚

下图为STM32F103xx单片机引脚示意图。

STM32单片机引角布局

上图为STM32F103xx基于LQFP封装64引脚的单片机,图中给出了每个引脚的名称,每个引脚的详细参数需要阅读与该型号单片机匹配的数据手册,数据手册包括产品的基本配置(如内置Flash和RAM的容量、外设模块的种类和数量等),管脚的数量和分配,电气特性,封装信息,和定购代码等内容。

STM3引脚大概分为4种,分别是电源、时钟、控制和I/O引脚。stm32的引脚一般有GPIO和AFIO两种用途。比如有的引脚是电源正极和黑色标记的电源负极,这是来给单片机提供电源的,要把电流引到对应的引脚才能正常工作。还有晶体震荡电路反向输入端和输出端引脚,晶体能够为单片机提供基本的震荡源。如果没有晶振的话,单有电源单片机是不能启动的,就和人们的心跳一样。RESET(PC6)复位信号输入端引脚是用来重启单片机的,和电脑一样,有时候单片机也会死机,这个时候就需要RESET(PC6)复位信号输入端来重启。不过直接断电也是可以的。I/O引脚也是引脚数量最多的,是输入输出口,里面有数字端口、模拟端口、PWM口和串口。作用是来连接模块,比如传感器,电机,LED等。

8. 单片机的电源

在介绍电源引脚之前,先认识数字电路中的几个电源符号:

VCC:C(circuit)表示电路的意思,即接入电路的电压;

VDD:D(Device)表示器件的意思,即器件的工作电压;

VSS:S(Series)表示公共连接的意思,通常指电路公共接地端电压。

总体来说,VCC接电路的电源,VDD接器件的电源引脚,VSS接电路的公共地端。

观察引脚布局图,再结合刚认识的几个电源符号,可以找到该单片机的电源引脚,电源引脚见下表:

引脚编号

引脚名称

12

VSSA

13

VDDA

31

VSS_1

32

VDD_1

47

VSS_2

48

VDD_2

63

VSS_3

64

VDD_3

STM32的工作电压(VDD)为2.0~3.6V。通过内置的电压调节器提供所需的1.8V电源。当主电源VDD掉电后,通过VBAT脚为实时时钟(RTC)和备份寄存器提供电源。下图为《技术参考手册》的电源框图:

STM32单片机电源框图

从电源框图可以了解到,VDDA为单片机内部的A/D转换器、温度传感器等模拟器件提供电源。VDD为单片机内部的I/O电路、待机电路提供工作电源,并通过电压调节器为CPU、存储器等核心器件提供1.8V的工作电源。VBAT为备用电源,当主电源VDD掉电后,通过VBAT脚为实时时钟(RTC)和备份寄存器提供电源。

64引脚的STM32F103系列产品没有对外提供VREF引脚,他们在芯片内部与模拟器件的电源(VDDA)和地(VSSA)相联。

64引脚的STM32F103系列产品提供了三组电源(VDD_1~VDD_3,VSS_1~VSS_3),这三组电源的供电电压都为2.0~3.6V,一般采用3.3V,引入的三组电源为芯片内部不同的模块供电。三组电源引脚可以接入同一个外部电源,也可以分别接入三个不同的外部电源。若提供多个外部电源,将会增加单片机的负载驱动能力,单片机的负载主要由I/O口驱动,当多个I/O口需要驱动负载时,多路供电方式比单路供电方式更加可靠。

若采用单电源供电,接线时将VDD_x、VDDA所有引脚连接在一起接入电源的正极,VSS_x、VSSA连接在一起接公共地端。

评论区

请 登录 后发表评论
暂无评论