st模式是什么[架构之路-18]:目标系统 - 硬件平台 - 案例1 - 单片机MCU STM32 芯片的工作原理与启动流程

新闻资讯2026-04-23 15:32:01

目录

​​第1章 STM32 概述​​

​​1.1 概述​​

​​1.2 产品系列与应用场合​​

​​第2章 片上资源(STM32F103xxx)​​

​​2.1 不同型号芯片的片上资源比较​​

​​2.2 资源的含义与作用​​

​​第3章 STM32F103内部架构​​

​​3.1 概述与架构图​​

​​3.2 内部总线​​

​​3.3 DMA控制器​​

​​第4章 外部引脚与最小系统(STM32F103xxx)​​

​​4.1 外部引脚​​

​​4.2 最小系统连接​​

​​第5章 系统启动​​

​​5.1 复位​​

​​5.2 启动管脚配置​​

​​5.3 程序启动地址​​

​​5.4 内部地址空间​​

​​5.5 STM32的Bootloader​​

​​5.6 STM32 CPU的初始化过程​​

​​5.7  bootloader对Flalsh程序的搬移​​

​​5.8 遗留的一系列的问题:​​


STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器(MCU)。

STM32系列专为要求高性能、低成本、低功耗嵌入式应用设计ARM

官网:​​STMCU中文官网​​

(1)智能车:循迹小车,读取光电传感器或者摄像头的数据,驱动电机前进和转弯。
(2)无人机:读取陀螺仪加速度计的姿态数据,根据控制算法控制电机速度,保证飞机稳定飞行。
(3)机器人:驱动舵机,控制其关节,让机器人运动。
(4)无线通信:给STM32连接一些2.4G无线模块或者蓝牙、WIFI模块,则具备无线通信能力。
(5)物联网:借助无线通信模块,再通过STM32驱动继电器来控制220v电路的通断。
(6)工业控制:PLC主控。
(7)娱乐电子产品:流水灯之类……
(8)……

st模式是什么[架构之路-18]:目标系统 - 硬件平台 - 案例1 - 单片机MCU STM32 芯片的工作原理与启动流程_https://www.jmylbn.com_新闻资讯_第1张

 主流产品(STM32F0、STM32F1、STM32F3)、

超低功耗产品(STM32L0、STM32L1、STM32L4、STM32L4+)、

高性能产品(STM32F2、STM32F4、STM32F7、STM32H7)

基本型:STM32F101R6、STM32F101C8、STM32F101R8、STM32F101V8、STM32F101RB、STM32F101VB

增强型:STM32F103C8、STM32F103R8、STM32F103V8、STM32F103RB、STM32F103VB、 STM32F103VE、STM32F103ZE

STM32型号的说明:以STM32F103RBT6这个型号的芯片为例,该型号的组成为7个部分,其命名规则如下:

st模式是什么[架构之路-18]:目标系统 - 硬件平台 - 案例1 - 单片机MCU STM32 芯片的工作原理与启动流程_https://www.jmylbn.com_新闻资讯_第2张

(1)GPIO端口:用于读写芯片外部的数字信号。

(2)ADC模块:用于读写芯片外部的模拟信号。如电压值。

(3)常见低速外设:

​​UART、I2C、SPI、TTL、RS232、RS422、RS485、CAN、USB、SD卡、1-WIRE、Ethernet​​

st模式是什么[架构之路-18]:目标系统 - 硬件平台 - 案例1 - 单片机MCU STM32 芯片的工作原理与启动流程_https://www.jmylbn.com_新闻资讯_第3张

NVIC:管理中断,如配置中断优先级等。
SysTick:给操作系统提供定时服务。
RCC:使能外设时钟。
AFIO:复用功能端口重定义,及中断端口配置。
CAN:多应用于汽车领域
RTC:在STM32内部完成年月日、时分秒的计时功能,可接外部备用电池,掉电也可使用。
CRC:判断数据的正确性。
PWR:电源可睡眠,使功耗降低。
GPIO、EXTI、TIM、USART、I2C、SPI、ADC:对外通信接口

DMA:DMA

STM32F103采用的是Cortex-M3内核,内核由ARM公司设计和授权。

STM32的芯片生产厂商ST公司,负责在ARM内核之外部件的设计并生产整个芯片

这些内核之外的部件被称为核外外设或片上外设:如 GPIO、USART(串口)、I2C、SPI 等,

st模式是什么[架构之路-18]:目标系统 - 硬件平台 - 案例1 - 单片机MCU STM32 芯片的工作原理与启动流程_https://www.jmylbn.com_新闻资讯_第4张

芯片内核与外设之间通过各种总线连接。

其中驱动单元有 4 个,被动单元也有 4 个。

可以把驱动单元理解成是内核部分,被动单元都理解成外设。

(1)ICode 代码总线

ICode总线是专门用来取指令的,其中的I表示Instruction(指令),指令的意思。写好的程序编译之后都是一条条指令,存放在 FLASH中,内核通过ICode总线读取这些指令来执行程序。

(2)DCode数据总线

DCode这条总线是用来取数的,其中的D表示Data(数据)。在写程序的时候,数据有常量和变量两种。常量就是固定不变的,用C语言中的const关键字修饰,放到内部FLASH当中。变量是可变的,不管是全局变量还是局部变量都放在内部的SRAM。

备注:可以看出,STM32内部采用的哈弗架构。

(3)system系统总线/外设总线

我们通常说的寄存器编程,即读写寄存器都是通过系统总线来完成的。

系统总线主要是用来访问外设的寄存器。

(1)概述

DMA控制器用来提供在外设控制器和内部存储器RAM之间或者存储器和存储器之间的高速数据传输。

在DMA传输期间,无须CPU干预,也无需要CPU进行上行文的切换,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。

(2)STM32的DMA特性

  • 12个独立的可配置的通道:DMA1有7个通道,DMA2有5个通道
  • 每个通道都有直接连接专用硬件DMA请求,每个通道都同样支持软件触发。这些通道可以通过软件来配置
  • 在同一个DMA模块上,多个请求间的优先级通过软件设置,优先级相等时由其硬件决定
  • 独立数据源和目标数据区的传输宽度(字节、半字、全字)源和目标地址必须按照数据传输宽度对齐
  • 支持循环的缓冲器管理
  • 每个通道有三个事件标志(DMA半传输、DMA传输完成、DMA传输出错),这3个事件标志逻辑或成为一个单独的中断请求
  • 存储器和存储器间,外设和存储器,存储器和外设之间的传输
  • 闪存,SRAM,外设的SRAM,APB1,APB2和APB均可作为访问的源和目标
  • 可编程的数据传输数目:最大65535

(3)DMA的触发

当发生一个事件后,外设DMA控制器发送一个请求信号。DMA控制器根据通道的优先权处理请求。当DMA控制器开发访问发出请求的外设时,DMA控制器立即发送给它应答信号。当从DMA控制器得到应答信号时,外设立即释放它的请求。一旦外设释放了这个请求,DMA控制器同时撤销应答信号。如果有多个请求,外设可以启动下一个周期。

(4)DMA中断

每个DMA通道都可以在DMA传输过半,传输完成和传输错误时产生中断。

st模式是什么[架构之路-18]:目标系统 - 硬件平台 - 案例1 - 单片机MCU STM32 芯片的工作原理与启动流程_https://www.jmylbn.com_新闻资讯_第5张

st模式是什么[架构之路-18]:目标系统 - 硬件平台 - 案例1 - 单片机MCU STM32 芯片的工作原理与启动流程_https://www.jmylbn.com_新闻资讯_第6张

 

st模式是什么[架构之路-18]:目标系统 - 硬件平台 - 案例1 - 单片机MCU STM32 芯片的工作原理与启动流程_https://www.jmylbn.com_新闻资讯_第7张

备注:

为了降低管脚的数量,减少芯片的体积,STM对外部管脚进行了大量的复用。

(1)电源(红色部分) 

  • 3.3V

(2)控制信号(蓝色)

  • 调试、下载:JTMS/JTCK/
  • 启动配置:Boot0和Boot1
  • 晶振时钟输入:OSC_IN、OUT
  • 复位:NReset

(3)其他复用功能管脚有:

  • UART1~2总线:Tx/Rx
  • I2C1~2总线:SCL/SDK
  • SPI1~2总线:SCK/MISO//MOSI
  • Timer1~4总线:CH1/CH2/CH3
  • CAN总线:TX/RX
  • ADC0~3模拟输入:IN

st模式是什么[架构之路-18]:目标系统 - 硬件平台 - 案例1 - 单片机MCU STM32 芯片的工作原理与启动流程_https://www.jmylbn.com_新闻资讯_第8张

(1)供电电压:3.3V,滤波电容可保证供电电压的稳定和消除电源毛刺。

(2)STM主体芯片:所有的外设控制器,都集成到了芯片内部,除了需要少量的时钟和复位和管脚配置硬件电路,单颗芯片就可以构建一个小型的计算机系统。

(3) OSC32:32.768KHz的晶体震荡器,内部倍频生成高频时钟。

(4)启动配置:用于配置启动方式。

(5)下载端口:JTAG调试口。

(6)复位:对单片机进行复位。

系统复位后,SYSCLK的第4个上升沿,BOOT引脚的值被锁定

st模式是什么[架构之路-18]:目标系统 - 硬件平台 - 案例1 - 单片机MCU STM32 芯片的工作原理与启动流程_https://www.jmylbn.com_新闻资讯_第9张

st模式是什么[架构之路-18]:目标系统 - 硬件平台 - 案例1 - 单片机MCU STM32 芯片的工作原理与启动流程_https://www.jmylbn.com_新闻资讯_第10张

(1)主闪存存储器启动模式(正常的工作模式)-- FLASH存储器

STM内部的FLASH,掉电不丢失,用户可以将代码存储到FLASH中。

从FLASH启动就可以执行用户烧录好的代码。

(2)SRAM启动模式(调试模式下的工作模式)-- SRAM存储器

STM内部的SRAM,掉电丢失,RESET不丢失。

在调试状态下,先把程序下载到STM内部的SRAM中。

然后复位系统,程序直接运行在SRAM中,程序下载的效率比烧录Falsh效率高,程序的执行效率也比较高。调试结束后,掉电,程序丢失。

(3)系统存储器启动模式(主闪存程序更新)-- ROM存储器

系统存储器中保存着芯片厂商的bootloader,主要用于通过串口下载并烧录程序。

程序烧录完成后想要启动烧录程序,必须将BOOT引脚重新配置为主闪存存储器启动。

注意:从系统存储器启动,只能下载并更新主闪存中的程序,不能启动程序。

STM32上电或者复位后,PC指针将始终从0x00000000取第一条指令。

用户可以通过BOOT1和BOOT0引脚状态,选择启动模式,并将相应模式对应的设备的首​​地址映射​​到启动空间(0x0000 0000)。

st模式是什么[架构之路-18]:目标系统 - 硬件平台 - 案例1 - 单片机MCU STM32 芯片的工作原理与启动流程_https://www.jmylbn.com_新闻资讯_第11张

(1)0x000-0x03FF的内容来自于Flash或者SRAM或系统存储器,是地址空间的映射,,至于如何映射则取决于Boot0、Boot1的配置。

(2)其他的地址空间的内容都是确定不变的。

在嵌入式操作系统中,Bootloader的作用是对CPU内部的寄存器、中断向量、存储控制器等进行初始化,初始化CPU的寄存器,通常是有汇编语言提供的。

Bootloader的另一个作用是启动操作系统程序,再由操作系统程序启动应用程序。

(1)在Linux环境中

  • bootloader、操作系统程序、应用程序是三个独立的程序体。
  • Bootloader是由uboot来承担的,
  • 操作系统是由Linux来承担,
  • 应用程序由各种main函数指定的程序承担 。

(2)在单片机环境中

  • bootloader、操作系统程序、应用程序被整合在一起,编译成了一个可执行程序。
  • 对CPU的寄存器进行初始化的bootloader程序通常是由芯片厂家提供,基本不需要进行修改。
  • 操作系统:是可选的,大多数情况下,都不需要操作系统,只有少数情形,会使用uOS这样的轻量级操作系统。
  • 应用程序:有用户写的main函数承担,由于单片机大多数情况下没有操作系统,因此,通常只有一个主应用程序。

(3)STM32的booloader

bootloader,也可以叫启动文件,无论性能高下,结构简繁,价格贵贱,每一种微控制器(处理器)都必须有启动文件,启动文件的作用便是负责执行微控制器从“复位”到“开始执行main函数”中间这段时间(称为启动过程)所必须进行的工作。

最为常见的51,AVR或MSP430等微控制器当然也有对应启动文件,但开发工具环境往往自动、完整地提供了这个启动文件,不需要开发人员再行干预启动过程,用户只需要从main函数开始进行应用程序的设计即可。

同样,STM32微控制器,无论是keiluvision4还是IAR EWARM开发环境,ST公司都提供了现成的直接可用的启动文件。

网上有很多资料分析了STM32的启动文件的内容。

(1)首先会定义堆栈。

(2)定义中断/异常向量表,而其中只实现了复位的异常处理函数Reset_Handler,该函数内容如下(STM32F4XX,IAR编译器),可以看到其主要执行了SystemInit和__iar_program_start两个函数,

st模式是什么[架构之路-18]:目标系统 - 硬件平台 - 案例1 - 单片机MCU STM32 芯片的工作原理与启动流程_https://www.jmylbn.com_新闻资讯_第12张

(3)其主要功能除了初始化时钟,浮点处理单元FPU等。

(4)执行一个重要功能,那就是内存的搬移、初始化操作。

就是如果从Flash启动的话,程序是存放在Flash中,但并非所有的程序都从Flash中执行。

为了提高程序的执行效率,通常情况下,除了初始化CPU相关的代码是在Flash中执行,操作系统程序和应用程序通常是在RAM中执行的,这就存在一次代码搬移的过程。如ARM9、CortexA系列的时候,一般都是把代码搬到内部的SRAM或者外部DDR中执行的,STM32也是类似,它会把程序搬移到内部的RAM后再继续在RAM中执行。

程序代码的构成:

st模式是什么[架构之路-18]:目标系统 - 硬件平台 - 案例1 - 单片机MCU STM32 芯片的工作原理与启动流程_https://www.jmylbn.com_新闻资讯_第13张

我们知道烧录的镜像文件中包含:

  • 只读代码段.text
  • 已初始化数据段.data
  • 未初始化的或者初始化为0的数据段.bss。

代码段由于是只读的,所以是可以一直放在Flash中,CPU通过总线去读取代码执行就OK。

但是.data段和.bss段由于会涉及读写为了,为了更高的读写效率是要一定搬到RAM中执行的,因此bootloader会执行很重要的一步,就是会在RAM中初始化.data和.bss段,搬移或清空相应内存区域。

因此,我们知道,当启动方式选择的是从内置Flash启动的时候,代码依旧是在Flash中执行,而数据端则会被拷贝到内部SRAM中,该过程是由bootloader完成的。

bootloader在完成这些流程之后,就会将代码交给用户的main函数开始执行用户代码

用户代码:可能是轻量级os的入口函数,也可能直接是用户应用程序的入口函数。

备注:

在有uboot的嵌入式环境中,uboot的代码段被切分成两部分,一部分可能会在ROM中执行,一部分被搬移到RAM中执行。

至此,就可以CPU就可以执行应用程序的代码了。

单片机提供了大量的内嵌的外设,应用程序要访问这些外设,需要驱动程序来完成相关的硬件操作

(1)这些驱动程序是由谁提供的呢?

这些驱动程序通常称为系统驱动库,这些驱动库通常是有芯片厂家提供的。

(2)驱动程序是应用程序吗?

它本身并不是应用程序,他们称为系统驱动库。

应用程序调用系统驱动库的程序来操作STM的硬件控制器。

下一篇文章进一步探讨这个问题:《如何通过STM32开发板构建自己的应用》