第三章 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所示。

两大明显特点

  1. 指令与数据进行独立存储,各自不可共存;

  2. 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指令集
  1. 定义:给 ARM 核执行的操作指令系统,每条指令含 “执行指令”+“操作数据” 两部分。

  2. 涵盖类别:若要 ARM 核完整处理数据,指令集需包含跳转、数据处理、PSR 处理、加载 / 存储、协处理器、异常产生 六大指令。

  3. 编译:程序需编译成 CPU 能识别的底层代码(指令集),编译由开发工具自动完成。

  4. 指令集多样性:厂家可自定义指令规范 / 语言,再开发对应编译器;指令集有多种,Cortex - M3 用 Thumb - 2 指令集

3.1.4.2 流水线技术(以 Cortex - M3 三级流水线为核心)
  1. 作用:让多个功能部件并行工作,缩短程序执行时间,提升处理器核效率与吞吐率,是微处理器设计关键技术。

  2. ARM 流水线类型

    (1) 三级流水线:取指 → 解码 → 执行(Cortex - M3 采用)。

    (2) 五级流水线:在三级基础上,增加 LS1(加载 / 存储指令指定数据)LS2(提取、符号扩展,字节 / 半字加载数据) 阶段。

  3. 三级流水线执行逻辑(理想状态)

    执行第 N 条指令时,同时对 (N + 1) 条指令解码、对 (N + 2) 条指令取指,流水线持续流转。

  4. 流水线 “清空” 场景:执行分支指令,或直接修改程序计数器(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)从用户级到特权级
  1. 不能直接通过改写控制寄存器返回,唯一途径是异常

  2. 需执行系统调用指令(SVC)触发 SVC 异常,由异常服务程序(通常是操作系统的一部分)接管,若批准,异常服务程序修改控制寄存器,才能在用户级的线程模式下重新进入特权级。

  3. 若程序执行中触发异常,处理器先切换进入特权级,异常服务例程执行完毕退出时,再返回先前状态。

3.1.6.5 引入意义
  1. 硬件水平限制不受信任或未调试好的程序随意配置关键寄存器,提高系统可靠性。

  2. 若配置 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 的自由运行时钟。


笔者小白,能力有限,以上内容难免存在不足和纰漏,仅供参考,各位阅读时请带着批判性思维学习,遇到问题多查查。同时欢迎各位评论区批评指正。谢谢。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐