嵌入式系统——STM32F1微处理器架构简述
STM32F1微处理器架构的简单叙述的笔记
第三章 STM32F1微处理器架构
3.1 嵌入式系统芯片架构简介
3.1.1 图灵机模型->嵌入式系统工作原理
1. 图灵机
理想机器,简单、机械步骤->模拟人类一切数学运算。
图灵机设想:一条无限长的含一个个方格的纸带,上面可以读写0、1以及空白。
基本操作:读取指向的内容、修改或擦除内容、左右移动修改临近方框值。
2. 简单举例
图灵机设想上打印110的过程,如图3-2所示。
3. 简单程序
利用图灵机设计思想设计实现“状态反转”的程序,如前面打印的“110”的每个位进行二进制反转变成“001”。
(1)预定义指令集:相当于对照表,确定下一步操作,如表3-1所示
(2)移动探头,对比指令集,进行读写操作
探头指向0,则写1,并右移,如图3-3所示。
探头指向1,则写0,并右移,如图3-4所示。
探头指向1,写0并右移,如图3-5所示。
此时探头指向空白,对比指令集进行的下一步操作为不写不移,此时图灵机设想便实现简单的“状态反转”的程序。
4. 机器状态
为避免图灵机在对照指令集后不右移时重复执行命令,需要引入机器状态的概念,如表3-2所示。
此时,探头读取到最后空格时就会停止。
只要持续增加方格中可能出现的状态,相应指令集的行数也会增加,此时通过前面简单程序的步骤即可实现更加复杂的数学运算。
3.1.2 冯·诺依曼结构与哈佛结构介绍
1. 冯·诺依曼结构
提出了计算机制造的三个基本原则:采取二进制逻辑、程序存储执行、计算机五大组成部分(运算器、控制器、存储器、输入设备、输出设备),其结构示意图如图3-6所示。
可见,无限长纸带--->存储器、读写头--->输入输出、规则指令集--->运算器、纸带移动逻辑--->控制器。
2. 哈佛架构
一种将程序指令和数据存储分开的存储器架构。
CPU(-->程序指令存储器)-->读取程序指令(--->解码)--->数据地址
-->相应数据存储器---读取数据---->下一步操作(执行等)
该架构分离指令与数据的储存,使得指令和数据的存储可以同时进行,且有不同的数据宽度,哈佛结构示意图如图3-7所示。
两大明显特点:
-
指令与数据进行独立存储,各自不可共存;
-
CPU与两存储器的通信是使用两条独立总线作为专用通信路径,且俩总线毫无关联。
优点:该架构处理器执行效率较高、程序指令与数据指令分开存储、可预读下一条指令。

目前ARM有较多系列,既有冯·诺依曼架构,也有哈佛架构,其中Cortex-M3系列就是哈佛架构。
3.1.3 算术逻辑单元ALU
算术逻辑单元(Arithmetic Logic Unit, ALU),CPU的执行单元,是CPU的核心组成部分。ALU由与门和或门构成,主要进行算术和逻辑运算。下面简单介绍其基本实现思想,便于更好地理解ARM的内部架构。
ALU工作原理示意图如图3-8所示,其有四大关键要素:操作数、运算符、状态、运算结果。其中状态是指进行运算后结果可能超出CPU的最高位数或其他情况的溢出,可能是负数、0,也可能是进位等状态。
控制单元从数据存储器、指令存储器取出操作数与运算符,作为ALU的输入,经过运算后输出的运算结果和状态再次输入相应地存储单元。
整个程序执行的实现过程:一系列需要ALU处理的事情按顺序给到相应的数据存储器和指令存储器中,然后控制单元--取出--输入ALU--经过ALU处理---结果输出存入相应位置。
其中的输入输出会有对应的IO端口进行输入输出,处理的内容、顺序以及结果的输出等可使用相应的程序代码实现。
3.1.4 Cortex-M3架构
Cortex-M3是一款32位处理器内核,具有低功耗、少门数、中断延时短、调试成本低等优点。Cortex-M3采用哈佛架构,拥有独立的指令总线和数据总线,两者共享同一个4G的存储空间。Cortex-M3的内部架构框图如图3-9所示。
由图可见,Cortex-M3内部含有多条总线接口,便于读取指令和访问数据并行执行,性能成倍提升。同时与通用计算机CPU相比,其内部不仅包含CM3Core核心,还集成了总线桥、SysTick等模块,更像一个“处理子系统”。图3-9中内部模块的缩写和含义如表3-3。
在图3-9中,与应用程序关联的模块主要如下所示:



3.1.4 ARM指令集与流水线
3.1.4.1 ARM指令集
-
定义:给 ARM 核执行的操作指令系统,每条指令含 “执行指令”+“操作数据” 两部分。
-
涵盖类别:若要 ARM 核完整处理数据,指令集需包含跳转、数据处理、PSR 处理、加载 / 存储、协处理器、异常产生 六大指令。
-
编译:程序需编译成 CPU 能识别的底层代码(指令集),编译由开发工具自动完成。
-
指令集多样性:厂家可自定义指令规范 / 语言,再开发对应编译器;指令集有多种,Cortex - M3 用 Thumb - 2 指令集。
3.1.4.2 流水线技术(以 Cortex - M3 三级流水线为核心)
-
作用:让多个功能部件并行工作,缩短程序执行时间,提升处理器核效率与吞吐率,是微处理器设计关键技术。
-
ARM 流水线类型
(1) 三级流水线:取指 → 解码 → 执行(Cortex - M3 采用)。
(2) 五级流水线:在三级基础上,增加 LS1(加载 / 存储指令指定数据)、LS2(提取、符号扩展,字节 / 半字加载数据) 阶段。
-
三级流水线执行逻辑(理想状态)
执行第 N 条指令时,同时对 (N + 1) 条指令解码、对 (N + 2) 条指令取指,流水线持续流转。
-
流水线 “清空” 场景:执行分支指令,或直接修改程序计数器(PC)导致跳转时,ARM 内核会清空流水线,重新取指。
3.1.6 操作模式和特权等级
3.1.6.1 操作模式
Cortex - M3 支持两种操作模式,用于区分执行代码的类型:
-
Handler 模式:执行异常处理例程的代码。
-
线程(Thread)模式:执行普通应用程序的代码。
3.1.6.2 特权级别
两种特权级别,是对存储器访问的保护机制:
-
特权级:程序可访问所有范围存储器(若有 MPU,需在 MPU 规定禁止区域外),且能执行所有指令。
-
用户级:不能访问系统控制空间(SCS,含配置寄存器及调试组件寄存器);禁止使用 MSR 访问特殊功能寄存器(APSR 除外),若访问会产生异常。
3.1.6.3 模式与特权级的关系
| 代码类型 | 特权级 | 用户级 |
|---|---|---|
| 异常 Handler 代码 | Handler 模式 | 错误的用法 |
| 主应用程序代码 | 线程模式 | 线程模式 |
3.1.6.4 模式切换
(1)从特权级到用户级
可通过修改控制寄存器进入用户级。
(2)从用户级到特权级
-
不能直接通过改写控制寄存器返回,唯一途径是异常。
-
需执行系统调用指令(SVC)触发 SVC 异常,由异常服务程序(通常是操作系统的一部分)接管,若批准,异常服务程序修改控制寄存器,才能在用户级的线程模式下重新进入特权级。
-
若程序执行中触发异常,处理器先切换进入特权级,异常服务例程执行完毕退出时,再返回先前状态。

3.1.6.5 引入意义
-
硬件水平限制不受信任或未调试好的程序随意配置关键寄存器,提高系统可靠性。
-
若配置 MPU,可作为特权机制的补充,保护关键存储区域(如操作系统区域)不被破坏。
3.1.7 异常、中断和向量表
1. 异常
ARM正按预定步骤执行程序时被迫终止后进入的状态模式,称为异常。且处理异常之前,ARM内核会先保存当前处理器状态,便于处理程序结束后恢复执行原来的程序。
2. 异常的分类
经典ARM微处理器包括7种异常:复位异常、未定义指令异常、软件中断异常、预取指令异常、数据异常、中断(IRQ)、快速中断(FIQ)。
3. 异常与中断
(1) 异常 ---- 中断的强化、异常的一个子集
(2) 异常/中断 ---- 软硬件进行异步工作的一种方式
4. 异常向量表
经典ARM微处理器发生异常时,会自动调用预先写好的异常处理程序。为了让ARM核能自动调用异常处理程序,必须规定一个位置作为存放异常处理程序入口。
由于异常含有多种,因此ARM微处理器设计者把7种异常的入口放到一起构成了一张表,称为异常向量表。
3.1.8 存储器映射
存储器映射,是指芯片中或芯片外的Flash、RAM、外设、BOOKBLOCK等进行的统一编址,也就是用地址表示对象。

3.1.9 调试支持
Cortex-M3内部搭载了很多调试组件,可用于在硬件水平上支持调试操作,如指令断点、数据观察点等。另外为支持更高级的调试,还可选一些组件,如指令跟踪和多种类型的调试接口。
CM3丰富的调试功能可分为侵入式调试和非侵入式调试两类,每类中都有更具体的调试项目。
1. 侵入式调试
2. 非侵入式调试

3.2 STM32F1对Cortex-M的实现
STM32,ST公司出品,基于ARM Cortex-M3内核的32位处理器。其具有功耗控制杰出、外设众多、性价比高等优点。其中STM32F1系列就时属于中低端的32位的Cortex-M3内核的ARM微处理器,根据芯片的命名规则可以看出该系列芯片的片内Flash的大小。
下面,简单介绍STM32对ARM Cortex-M架构的实现方案。
3.2.1 系统架构


3.2.2 存储器与映射

![]()

3.2.3 嵌入式闪存
嵌入式闪存(Flash),集成于stm32f1微控制器中,高性能模块。
(1)作用:蛀牙用于存储系统启动装载、用户选项字节、用户程序。
(2)更新:利用在线系统编程(ISP)、JTAG调试下载工具、在线应用编程(IAP)这三种方法对Flash进行更新。
(3)操作实现:必须通过闪存变成与擦除控制器(Flash Program and Erase Controller)单元模块实现。
不同微控制器的闪存容量都不同,主存储模块的组织结构也不同,具体数据可以参考对应芯片的用户手册。
3.2.4 启动配置

3.2.5 电源控制




3.2.6 复位
STM32F10xxx支持3中复位模式,即系统复位、上电复位和备份区域复位。除了时钟控制寄存器中的复位标志位和备份区域中的寄存器以外,系统复位将复位所有寄存器。
3.2.6.1 产生一个系统复位的条件
下面某一事件发生就会产生:
1)NRST引脚上的低电平(外部复位)。
2)窗口看门狗计数终止(WWDG复位)。
3)独立看门狗计数终止(IWDG复位)。
4)软件复位(SW复位)。
5)低功耗管理复位。
3.2.6.2 如何确定复位事件来源
查看RCC_CSR控制状态寄存器中的复位状态标志可以确认复位事件的来源。
3.2.7 时钟控制
STM32F103xx系列微控制器支持三种不同的时钟源。
3.2.7.1 系统时钟源
-
支持 HSI 振荡器时钟、HSE 振荡器时钟、PLL 时钟三种,用于驱动系统时钟(SYSCLK)。
3.2.7.2 二级时钟源
-
40kHz 低速内部 RC,可驱动独立看门狗,也能通过程序选择驱动 RTC,实现停机 / 待机模式下自动唤醒系统。
-
32.768kHz 低速外部晶体,可通过程序选择驱动 RTC(RTCCLK)。且任一未使用的时钟源可独立启停以优化功耗。
3.2.7.3 总线频率配置
-
可通过预分频器配置 AHB、高速 APB(APB2)、低速 APB(APB1)域频率,AHB 和 APB2 最大频率 72MHz,APB1 最大 36MHz。
3.2.7.4 其他时钟
-
系统滴答定时器时钟:可由经 8 分频的外部时钟或 Cortex AHB 时钟提供,通过控制与状态寄存器设置选择。
-
ADC 时钟:由高速 APB2 时钟经 2、4、6 或 8 分频获得。
-
定时器时钟:若 APB 预分频系数非 1,其时钟频率为所在 APB 总线频率的两倍;若预分频系数为 1,则与所在 APB 总线频率一致。FCLK 是 Cortex - M3 的自由运行时钟。
笔者小白,能力有限,以上内容难免存在不足和纰漏,仅供参考,各位阅读时请带着批判性思维学习,遇到问题多查查。同时欢迎各位评论区批评指正。谢谢。
更多推荐
所有评论(0)