第 3 章 STM32 系列微控制器 本章对STM32 系列微控制器进行概述,介绍STM32F1 系列产品系统架构和 STM32F103ZET6 内部结构、存储器映像、时钟结构,以及 STM32F103VET6 的引脚、最小 系统设计。 3.1 STM32 微控制器概述 STM32 是意法半导体(ST Microelectronics)公司较早推向市场的基于 Cortex-M 内核 的微处理器系列产品,具有成本低、功耗优、性能高、功能多等优点,并且以系列化方式推 微课视频 出,方便用户选型,在市场上获得了广泛好评。 目前常用的 STM32 有 STM32F103 ~ STM32F107 系列,简称“1 系列”,最近又推出了 高端系列 STM32F4xx 系列,简称“4 系列”。前者基于 Cortex-M3 内核,后者基于 Cortex- M4 内核。STM32F4xx 系列在以下诸多方面做了优化。 (1)增加了浮点运算。 (2)具有 DSP 功能。 (3)存储空间更大,高达 1MB 以上。 (4)运算速度更高,以 168MHz 高速运行时处理能力可达到 210DMIPS。 (5)新增更高级的外设,如照相机接口、加密处理器、USB 高速 OTG(On-The-Go)接 口等;提高性能,具有更快的通信接口、更高的采样率、带 FIFO(First Input First Output) 的 DMA 控制器。 STM32 系列单片机具有以下优点。 1.先进的内核结构 (1)哈佛结构使其在处理器整数性能测试上有着出色的表现,运行速度可达到 1.25DMIPS/MHz,而功耗仅为 0.19mW/MHz。 (2)Thumb-2 指令集以 16 位的代码密度带来了 32 位的性能。 (3)内置了快速的中断控制器,提供了优越的实时特性,中断的延迟时间降到只需 6 个 CPU 周期,从低功耗模式唤醒的时间也只需 6 个 CPU 周期。 全书.indd 62 2024/3/16 14:52:15 第 3 章  STM32 系列微控制器 63 (4)具有单周期乘法指令和硬件除法指令。 2.3 种功耗控制 STM32 经过特殊处理,针对应用中 3 种主要的能耗要求进行了优化,这 3 种能耗要求 分别是运行模式下高效率的动态耗电机制、待机状态时极低的电能消耗和电池供电时的低电 压工作能力。因此,STM32 提供了 3 种低功耗模式和灵活的时钟控制机制,用户可以根据 自己所需要的耗电 / 性能要求进行合理优化。 3.最大程度的集成整合 (1)STM32 内嵌电源监控器,包括上电复位、低电压检测、掉电检测和自带时钟的看 门狗定时器,减少对外部器件的需求。 (2)使用一个主晶振可以驱动整个系统。低成本的 4 ~ 16MHz 晶振即可驱动 CPU、 USB 以及所有外设,使用内嵌锁相环(Phase Locked Loop,PLL)产生多种频率,可以为 内部实时时钟选择 32kHz 的晶振。 (3)内嵌出厂前调校好的 8MHz RC 振荡电路,可以作为主时钟源。 (4)拥有针对实时时钟(Real Time Clock,RTC)或看门狗的低频率 RC 电路。 (5)LQPF100 封装芯片的最小系统只需 7 个外部无源器件。 因此,使用 STM32 可以很轻松地完成产品的开发。意法半导体公司提供了完整、高效 的开发工具和库函数,帮助开发者缩短系统开发时间。 4.出众及创新的外设 STM32 的优势来源于两路高级外设总线,连接到该总线上的外设能以更高的速度运行。 (1)USB 接口速度可达 12Mb/s。 (2)USART 接口速度高达 4.5Mb/s。 (3)SPI 速度可达 18Mb/s。 (4)I2C 接口速度可达 400kHz。 (5)通用输入输出(General Purpose Input Output,GPIO)的最大翻转频率为 18MHz。 (6)脉冲宽度调制(Pulse Width Modulation,PWM)定时器最高可使用 72MHz 时钟输入。 3.1.1 STM32 微控制器产品介绍 目前,市场上常见的基于 Cortex-M3 的 MCU 有意法半导体公司的 STM32F103 微控制 器、德州仪器公司(TI)的 LM3S8000 微控制器和恩智浦公司(NXP)的 LPC1788 微控 制器等,其应用遍及工业控制、消费电子、仪器仪表、智能家居等领域。 意法半导体公司于 1987 年 6 月成立,是由意大利的 SGS 微电子公司和法国 THOMSON 半导体公司合并而成,1998 年 5 月更名为意法半导体有限公司,是世界最大的半导体公 司之一。从成立至今,意法半导体公司的增长速度超过了半导体工业的整体增长速度。自 1999 年起,意法半导体公司始终是世界十大半导体公司之一,在很多领域居世界领先水平。 例如,意法半导体公司是世界第一大专用模拟芯片和电源转换芯片制造商、世界第一大工业 全书.indd 63 2024/3/16 14:52:15 64 Arm 嵌入式系统原理及应用——STM32F103 微控制器架构、编程与开发 半导体和机顶盒芯片供应商,而且在分立器件、手机相机模块和车用集成电路领域居世界前列。 在诸多半导体制造商中,意法半导体公司是较早在市场上推出基于 Cortex-M 内核的 MCU 产品的公司,其根据 Cortex-M 内核设计生产的 STM32 微控制器充分发挥了低成本、 低功耗、高性价比的优势,以系列化的方式推出,方便用户选择,受到了广泛的好评。 STM32 系列微控制器适合的应用包括:替代绝大部分 8/16 位 MCU 的应用、替代目前 常用的 32 位 MCU(特别是 Arm7)的应用、小型操作系统相关的应用以及简单图形和语音 相关的应用等。 STM32 系列微控制器不适合的应用包括:程序代码大于 1MB 的应用、基于 Linux 或 Android 系统的应用、基于高清或超高清的视频应用等。 STM32 系列微控制器的产品线包括高性能类型、主流类型和超低功耗类型三大类,分 别面向不同的应用,具体产品系列如图 3-1 所示。 图 3-1 STM32 产品系列 1.STM32F1 系列(主流类型) STM32F1 系列微控制器基于 Cortex-M3 内核,利用一流的外设和低功耗、低压操作实 现了高性能,同时以可接受的价格,利用简单的架构和简便易用的工具实现了高集成度,能 够满足工业、医疗和消费类市场的各种应用需求。凭借该产品系列,意法半导体公司在全球 基于 Arm Cortex-M3 的微控制器领域处于领先地位。本书后续章节即是基于 STM32F1 系列 中的典型微控制器 STM32F103 进行讲述的。 全书.indd 64 2024/3/16 14:52:15 第 3 章  STM32 系列微控制器 65 截至 2016 年 3 月,STM32F1 系列微控制器包含以下 5 个产品线,它们的引脚、外设和 软件均兼容。 (1)STM32F100:超值型,CPU 工作频率为 24MHz,具有电机控制和 CEC 功能。 (2)STM32F101:基本型,CPU 工作频率为 36MHz,具有高达 1MB 的 Flash。 (3)STM32F102:USB 基本型,CPU 工作频率为 48MHz,具备 USB FS(Full Speed) 接口。 (4)STM32F103:增强型,CPU 工作频率为 72MHz,具有高达 1MB 的 Flash、电机控制、 USB 和 CAN。 (5)STM32F105/107:互联型,CPU 工作频率为 72MHz,具有以太网 MAC(媒体访 问控制,Media Access Control)、 CAN 和 USB 2.0 OTG。 2.STM32F0 系列(主流类型) STM32F0 系列微控制器基于 Cortex-M0 内核,在实现 32 位性能的同时,继承了 STM32 系列的重要特性。它集实时性能、低功耗运算和与 STM32 平台相关的先进架构及外 设于一身,将全能架构理念变成了现实,特别适用于成本敏感型应用。 截至 2016 年 3 月,STM32F0 系列微控制器包含以下产品。 (1)STM32F0x0:在传统 8 位和 16 位市场上极具竞争力,并可使用户免于不同架构平 台迁徙和相关开发带来的额外工作。 (2)STM32F0x1:实现了高度的功能集成,提供多种存储容量和封装的选择,为成本 敏感型应用带来了更加灵活的选择。 (3)STM32F0x2:通过 USB 2.0 和 CAN 提供了丰富的通信接口,是通信网关、智能能 源器件或游戏终端的理想选择。 (4)STM32F0x8:工作在 1.8V±8%电压下,非常适合智能手机、配件和多媒体设备等 便携式消费类应用。 3.STM32F4 系列(高性能类型) STM32F4 系列微控制器基于 Cortex-M4 内核,采用了意法半导体公司的 90nm 非易失性 存储器(Non Volatile Memory,NVM)工艺和自适应实时(Adaptive Real Time,ART)加速器, 在高达 180MHz 的工作频率下通过闪存执行时,其处理性能达到 225 DMIPS/608CoreMark。 这是迄今所有基于 Cortex-M 内核的微控制器产品能达到的最高基准测试分数。由于采用 了动态功耗调整功能,通过闪存执行时的电流消耗范围为 STM32F401 的 128μA/MHz 到 STM32F439 的 260μA/MHz。 截至 2016 年 3 月,STM32F4 系列包括 9 条互相兼容的数字信号控制器(Digital Signal Controller,DSC)产品线,是 MCU 实时控制功能与 DSP 功能的完美结合体。 (1)STM32F401:84MHz CPU/105DMIPS,尺寸最小、成本最低的解决方案,具有卓 越的功耗效率(动态效率系列)。 (2)STM32F410:100MHz CPU/125DMIPS,采用新型智能 DMA(直接存储器存取), 全书.indd 65 2024/3/16 14:52:15 66 Arm 嵌入式系统原理及应用——STM32F103 微控制器架构、编程与开发 优化了数据批处理的功耗(采用批采集模式的动态效率系列),配备的随机数发生器、低功 耗定时器和 DAC,为卓越的功率效率性能设立了新的里程碑。 (3)STM32F411:100MHz CPU/125DMIPS,具有卓越的功率效率、更大的 SRAM 和 新型智能 DMA,优化了数据批处理的功耗(采用批采集模式的动态效率系列)。 (4)STM32F405/STM32F415:168MHz CPU/210DMIPS,高达 1MB 的 Flash,具有先 进连接功能和加密功能。 (5)STM32F407/STM32F417:168MHz CPU/210DMIPS,高达 1MB 的 Flash,增加了 以太网 MAC 和照相机接口。 (6)STM32F446:180MHz CPU/225DMIPS,高达 512KB 的 Flash,具有 Dual Quad SPI 和 SDRAM 接口。 (7)STM32F429/STM32F439:180MHz CPU/225DMIPS,高达 2MB 的双区闪存,具有 SDRAM 接口、Chrom-ART 加速器和 LCD-TFT 控制器。 (8)STM32F427/STM32F437:180MHz CPU/225DMIPS,高达 2MB 的双区闪存,具有 SDRAM 接口、Chrom-ART 加速器、串行音频接口,性能更高,静态功耗更低。 (9)STM32F469/STM32F479:180MHz CPU/225DMIPS,高达 2MB 的双区闪存,具有 SDRAM 和 QSPI 接口、Chrom-ART 加速器、LCD-TFT 控制器和 MPI-DSI 接口。 4.STM32F7 系列(高性能类型) STM32F7 是世界上第 1 款基于 Cortex-M7 内核的微控制器。它采用 6 级超标量流水 线和浮点单元,并利用 ART 加速器和 L1 缓存,实现了 Cortex-M7 的最大理论性能—无 论是从嵌入式闪存还是外部存储器执行代码,都能在 216MHz 处理器频率下使性能达到 462DMIPS/1082CoreMark。由此可见,相对于意法半导体公司以前推出的高性能微控制器, 如 STM32F2 应用,对于目前还在使用简单计算功能的可穿戴设备和健身应用,STM32F7 系 列将会带来革命性的颠覆,起到巨大的推动作用。 5.STM32L1 系列(超低功耗类型) STM32L1 系列微控制器基于 Cortex-M3 内核,采用意法半导体公司专有的超低泄漏 制程,具有创新型自主动态电压调节功能和 5 种低功耗模式,为各种应用提供了无与伦比 的平台灵活性。STM32L1 系列微控制器扩展了超低功耗的理念,并且不会牺牲性能。与 STM32L0 一样,STM32L1 提供了动态电压调节、超低功耗时钟振荡器、LCD 接口、比较器、 DAC 及硬件加密等部件。 STM32L1 系列微控制器可以实现在 1.65 ~ 3.6V 以 32MHz 的频率全速运行,其功耗参 考值如下。 (1)动态运行模式:功耗低至 177μA/MHz。 (2)低功耗运行模式:功耗低至 9μA/MHz。 (3)超低功耗模式 + 备份寄存器 +RTC:功耗低至 900nA(3 个唤醒引脚)。 (4)超低功耗模式 + 备份寄存器:280nA(3 个唤醒引脚)。 全书.indd 66 2024/3/16 14:52:16 第 3 章  STM32 系列微控制器 67 除了超低功耗 MCU 以外,STM32L1 系列微控制器还提供了特性、存储容量和封 装引脚数等选项,如 32 ~ 512KB Flash、高达 80KB 的 SDRAM、真正的 16KB 嵌入式 EEPROM、48 ~ 144 个引脚。为了简化移植步骤和为工程师提供所需的灵活性,STM32L1 系列与不同的 STM32F 系列均引脚兼容。 3.1.2 STM32 系统性能分析 下面对 STM32 系统进行性能分析。 (1)集成嵌入式 Flash 和 SRAM 的 Arm Cortex-M3 内核:和 8/16 位设备相比,Arm Cortex-M3 32 位 RISC 处理器提供了更高的代码效率。STM32F103xx 微控制器带有一个嵌 入式的 Arm 核,可以兼容所有 Arm 工具和软件。 (2)嵌入式 Flash 和 RAM:内置高达 512KB 的嵌入式 Flash,可用于存储程序和数据; 高达 64KB 的嵌入式 SRAM 可以以 CPU 的时钟速度进行读写。 (3)可变静态存储控制器(Flexible Static Memory Controller,FSMC): FSMC 嵌入在 STM32F103xC、STM32F103xD、STM32F103xE 中,带有 4 个片选,支持 5 种模式,分别 为 Flash、RAM、PSRAM、NOR 和 NAND。 (4)嵌套向量中断控制器(NVIC):可以处理 43 个可屏蔽中断通道(不包括 Cortex-M3 的 16 根中断线),提供 16 个中断优先级。紧密耦合的 NVIC 实现了更低的中断处理延迟, 直接向内核传递中断入口向量表地址;允许中断提前处理,对后到的更高优先级的中断进 行处理,支持尾链,自动保存处理器状态,中断入口在中断退出时自动恢复,不需要指令 干预。 (5)外部中断 / 事件控制器(EXTI):外部中断 / 事件控制器由 19 根用于产生中断 / 事 件请求的边沿探测器线组成。每根线可以被单独配置用于选择触发事件(上升沿、下降沿, 或者两者都可以),也可以被单独屏蔽。有一个挂起寄存器维护中断请求的状态。当外部线 上出现长度超过内部高级外围总线(Advanced Peripheral Bus,APB)两个时钟周期的脉冲时, EXTI 能够探测到。多达 112 个 GPIO 连接到 16 根外部中断线。 (6)时钟和启动:在系统启动时要进行系统时钟选择,但复位时内部 8MHz 晶振被选 作 CPU 时钟。可以选择一个外部的 4 ~ 16MHz 时钟,并且会被监视判定是否成功。在这 期间,控制器被禁止并且软件中断管理也随后被禁止。同时,如果有需要(如碰到一个间接 使用的晶振失败),PLL 时钟的中断管理完全可用。多个预比较器可以用于配置高性能总线 (Advanced High Performance Bus,AHB)频率,包括高速 APB(APB2)和低速 APB(APB1), 高速 APB 的最高频率为 72MHz,低速 APB 的最高频率为 36MHz。 (7)Boot 模式:在启动时,Boot 引脚被用来在 3 种 Boot 选项中选择一种,即从用户 Flash 导入、从系统存储器导入、从 SRAM 导入。Boot 导入程序位于系统存储器中,用于通 过 USART1 重新对 Flash 编程。 (8)电源供电方案:VDD 电压范围为 2.0 ~ 3.6V,外部电源通过 VDD 引脚提供,用于 I/O 全书.indd 67 2024/3/16 14:52:16 68 Arm 嵌入式系统原理及应用——STM32F103 微控制器架构、编程与开发 和内部调压器;VSSA 和 VDDA 电压范围为 2.0 ~ 3.6V,外部模拟电压输入,用于 ADC(模 / 数 转换器)、复位模块、RC 和 PLL,在 VDD 范围内(ADC 被限制在 2.4V), VSSA 和 VDDA 必须 相应连接到 VSS 和 VDD;VBAT 电压范围为 1.8 ~ 3.6V,当 VDD 无效时为 RTC(实时时钟), 外部 32kHz 晶振和备份寄存器供电(通过电源切换实现)。 (9)电源管理:设备有一个完整的上电复位(POR)和掉电复位(PDR)电路。这个电 路一直有效,用于确保电压从 2V 启动或掉到 2V 时进行一些必要的操作。 (10)电压调节:调压器有 3 种运行模式,分别为主(MR)、低功耗(LPR)和掉电模式。 MR 用在传统意义上的调节模式(运行模式),LPR 用在停止模式,掉电用在待机模式。调 压器输出为高阻,核心电路掉电,包括零消耗(寄存器和 SRAM 的内容不会丢失)。 (11)低功耗模式:STM32F103xx 支持 3 种低功耗模式,从而在低功耗、短启动时间 和可用唤醒源之间达到一个最好的平衡点。①睡眠模式:只有 CPU 停止工作,所有外设继 续运行,在中断 / 事件发生时唤醒 CPU。②停止模式:在 STM32F103xx 的深睡眠模式的 基础上结合了外设的时钟控制机制,在停止模式下调压器可运行在正常或低功耗模式。设 备可以通过外部中断线从停止模式唤醒。外部中断源可以是 16 根外部中断线之一、PVD 输出。③待机模式:追求最少的功耗,内部调压器被关闭,这样 1.8V 区域断电,PLL、高 速内部(High Speed Internal,HSI)时钟和高速外部(High Speed External,HSE)时 钟 RC 振荡器也被关闭。在进入待机模式之后,除了备份寄存器和待机电路,SRAM 和 寄存器的内容也会丢失。当外部复位(NRST 引脚)、IWDG 复位、WKUP 引脚出现上 升沿时,设备退出待机模式。进入停止模式或待机模式时,IWDG 和相关的时钟源不 会停止。 3.1.3 STM32 微控制器的命名规则 意法半导体公司在推出一系列基于 Cortex-M 内核的 STM32 微控制器产品线的同时,也 制定了它们的命名规则。通过名称,用户能直观、迅速地了解某款具体型号的 STM32 微控 制器产品。STM32 系列微控制器的名称主要由以下几部分组成。 1.产品系列名 STM32 系列微控制器名称通常以 STM32 开头,表示产品系列,代表意法半导体基于 Arm Cortex-M 系列内核的 32 位 MCU。 2.产品类型名 产品类型是 STM32 系列微控制器名称的第 2 部分,通常有 F(Flash Memory,通用快 速闪存)、W(无线系统芯片)、L(低功耗低电压,1.65 ~ 3.6V)等类型。 3.产品子系列名 产品子系列是 STM32 系列微控制器名称的第 3 部分。 全书.indd 68 2024/3/16 14:52:16 第 3 章  STM32 系列微控制器 69 例如常见的 STM32F 产品子系列有 050(Arm Cortex-M0 内核)、051(Arm Cortex-M0 内核)、100(Arm Cortex-M3 内核,超值型)、101(Arm Cortex-M3 内核,基本型)、102 (Arm Cortex-M3 内 核,USB 基本型)、103(Arm Cortex-M3 内核,增强型)、105(Arm Cortex-M3 内核,USB 互联网型)、107(Arm Cortex-M3 内核,USB 互联网型和以太网 型 )、 108(Arm Cortex-M3 内核,IEEE 802.15.4 标准)、151(Arm Cortex-M3 内核,不带 LCD)、 152/162(Arm Cortex-M3 内核,带 LCD)、 205/207(Arm Cortex-M3 内核,带摄像 头 )、 215/217(Arm Cortex-M3 内核,带摄像头和加密模块)、405/407(Arm Cortex-M4 内 核,MCU + FPU,摄像头)、415/417(Arm Cortex-M4 内核,MCU+FPU,加密模块和摄像 头)等。 4.引脚数 引脚数是 STM32 系列微控制器名称的第 4 部分,通常有以下几种:F(20pin)、G(28pin)、 K(32pin)、 T(36pin)、 H(40pin)、 C(48pin)、 U(63pin)、 R(64pin)、 O(90pin)、 V(100pin)、 Q(132pin)、 Z(144pin)和 I(176pin)等。 5.Flash 容量 Flash 容量是 STM32 系列微控制器名称的第 5 部分,通常有以下几种:4(16KB Flash, 小容量)、6(32KB Flash,小容量)、8(64KB Flash,中容量)、B(128KB Flash,中容量)、 C(256KB Flash,大容量)、D(384KB Flash,大容量)、E(512KB Flash,大容量)、F(768KB Flash,大容量)、G(1MB Flash,大容量)。 6.封装方式 封装方式是 STM32 系列微控制器名称的第 6 部分,通常有以下几种:T(LQFP,即 Low-profile Quad Flat Package,薄型四侧引脚扁平封装)、H(BGA,即 Ball Grid Array,球 栅阵列封装)、U(VFQFPN,即 Very Thin Fine Pitch Quad Flat Pack No-lead Package,超薄 细间距四方扁平无铅封装)、Y(WLCSP,即 Wafer Level Chip Scale Packaging,晶圆片级 芯片规模封装)。 7.温度范围 温度范围是 STM32 系列微控制器名称的第 7 部分,通常有两种:6(-40 ~ 85℃,工业级) 和 7(-40 ~ 105℃,工业级)。 STM32F103 微控制器的命名规则如图 3-2 所示。例如,本书后续部分主要介绍的微控 制器 STM32F103ZET6,其中,STM32 代表意法半导体公司基于 Arm Cortex-M 系列内核的 32 位 MCU,F 代表通用快速闪存型,103 代表基于 Arm Cortex-M3 内核的增强型子系列, Z 代表 144 个引脚,E 代表大容量 512KB Flash,T 代表 LQFP 封装方式,6 代表 -40 ~ 85℃ 的工业级温度范围。 全书.indd 69 2024/3/16 14:52:16 70 Arm 嵌入式系统原理及应用——STM32F103 微控制器架构、编程与开发 图 3-2 STM32F103 微控制器的命名规则 STM32F103xx 闪存容量、封装及型号对应关系如图 3-3 所示。 对 STM32 单片机内部资源介绍如下。 (1)内核:Arm32 位 Cortex-M3 CPU,最高工作频率为 72MHz,执行速度为 1.25DMIPS/ MHz,完成 32 位×32 位乘法计算只需一个周期,并且硬件支持除法(有的芯片不支持硬 件除法)。 (2)存储器:片上集成 32 ~ 512KB 的闪存,以及 6 ~ 64KB 的 SRAM。 (3)电源和时钟复位电路:包含 2.0 ~ 3.6V 的供电电源(提供 I/O 端口的驱动电压); 上电 / 断电复位(POR/PDR)端口和可编程电压探测器(PVD); 内 嵌 4 ~ 16MHz 晶振;内 嵌出厂前调校的 8MHz RC 振荡电路、40kHz RC 振荡电路;供 CPU 时钟的 PLL 锁相环;带 校准功能供 RTC 的 32kHz 晶振。 (4)调试端口:有 SWD 串行调试端口和 JTAG 端口可供调试使用。 (5)I/O 端口:根据型号的不同,双向快速 I/O 端口数目可为 26、37、51、80 或 112。 翻转速度为 18MHz,所有端口都可以映射到 16 个外部中断向量。除了模拟输入端口,其他 所有端口都可以接收 5V 以内的电压输入。 全书.indd 70 2024/3/16 14:52:16 第 3 章  STM32 系列微控制器 71 图 3-3 STM32F103xx 闪存容量、封装及型号对应关系 (6)DMA(直接内存存取)端口:支持定时器、ADC、SPI、I2C 和 USART 等外设。 (7)ADC:带有两个 12 位的微秒级逐次逼近型 ADC,每个 ADC 最多有 16 个外部 通道和两个内部通道(一个接内部温度传感器,另一个接内部参考电压)。ADC 供电要求 为 2.4 ~ 3.6V,测量范围为 VREF- ~ VREF +,VREF- 通常为 0V,VREF +通常与供电电压相同。 ADC 具有双采样和保持能力。 (8)DAC:STM32F103xC、STM32F103xD、STM32F103xE 单片机具有2 通道12 位 DAC。 (9)定时器:最多有 11 个定时器,包括 4 个 16 位定时器(每个定时器有 4 个 PWM 定 时器或脉冲计数器)、两个 16 位 6 通道高级控制定时器(最多 6 个通道可用于 PWM 输出)、 两个看门狗定时器—独立看门狗(IWDG)定时器和窗口看门狗(WWDG)定时器、一 个系统滴答定时器 SysTick(24 位倒计数器)、两个 16 位基本定时器(用于驱动 DAC)。 (10)通信端口:最多有 13 个通信端口,包括两个 PC 端口、5 个通用异步收发传输器 (UART)端口(兼容 IrDA 标准,调试控制)、3 个 SPI 端口(18 Mb/s,其中 IS 端口最多只 能有两个)和 CAN 端口、USB 2.0 全速端口、安全数字输入 / 输出(SDIO)端口(这 3 个 端口最多都只能有一个)。 (11)FSMC:FSMC 嵌入在STM32F103xC、STM32F103xD、STM32F103xE 单片机 全书.indd 71 2024/3/16 14:52:16 72 Arm 嵌入式系统原理及应用——STM32F103 微控制器架构、编程与开发 中,带有 4 个片选端口,支持闪存、随机存取存储器(RAM)、伪静态随机存储器(Pseudo Static Access Memory,PSRAM)等。 3.1.4 STM32 微控制器的选型 在微控制器选型过程中,工程师常常会陷入这样一个困局:一方面抱怨 8 位 /16 位微控 制器有限的指令和性能,另一方面抱怨 32 位处理器的高成本和高功耗。能否有效地解决这 个问题,让工程师不必在性能、成本、功耗等因素之间取舍和折中? 基于 Arm Cortex-M3 内核,意法半导体公司于 2007 年推出的 STM32 系列微控制器就很 好地解决了上述问题。因为 Cortex-M3 内核的计算能力是 1.25DMIPS/MHz,而 Arm7TDMI 只有 0.95DMIPS/MHz。而且,STM32 拥有 1μs 的双 12 位 ADC、4Mb/s 的 UART、18Mb/s 的 SPI、18MHz 的 I/O 翻转速度,更重要的是,STM32 在 72MHz 工作时功耗只有 36mA(所 有外设处于工作状态),而待机时功耗只有 2μA。 通过前面的介绍,我们已经大致了解了 STM32 微控制器的分类和命名规则。在此基础上, 根据实际情况的具体需求,可以大致确定所要选用的 STM32 微控制器的内核型号和产品系 列。例如,一般的工程应用的数据运算量不是特别大,基于 Cortex-M3 内核的 STM32F1 系 列微控制器即可满足要求;如果需要进行大量的数据运算,且对实时控制和数字信号处理能 力要求很高,或者需要外接 RGB 大屏幕,则推荐选择基于 Cortex-M4 内核的 STM32F4 系 列微控制器。 在明确了产品系列之后,可以进一步选择产品线。以基于 Cortex-M3 内核的 STM32F1 系列微控制器为例,如果仅需要用到电动机控制或消费类电子控制功能,则选择 STM32F100 或 STM32F101 系列微控制器即可;如果还需要用到 USB 通信、CAN 总线等 模块,则推荐选用 STM32F103 系列微控制器,这也是目前市场上应用最广泛的微控制器系 列之一;如果对网络通信要求较高,则可以选用 STM32F105 或 STM32F107 系列微控制器。 对于同一个产品系列,不同的产品线采用的内核是相同的,但核外的片上外设存在差异。具 体选型情况要视实际的应用场合而定。 确定好产品线之后,即可选择具体的型号。参照 STM32 微控制器的命名规则,可以先 确定微控制器的引脚数目。引脚多的微控制器的功能相对多一些,当然价格也贵一些,具 体要根据实际应用中的功能需求进行选择,一般够用就好。确定好引脚数目之后,再选择 Flash 存储器容量的大小。对于 STM32 微控制器,具有相同引脚数目的微控制器会有不同的 Flash 存储器容量可供选择,也要根据实际需要进行选择,程序大就选择容量大的 Flash 存 储器,一般也是够用即可。到这里,根据实际的应用需求,确定了所需的微控制器的具体型 号,下一步的工作就是开发相应的应用。 除了选择 STM32 微控制器外,还可以选择国产芯片。Arm 技术发源于国外,但通过我 国研究人员十几年的研究和开发,我国的 Arm 微控制器技术已经取得了很大的进步,国产 品牌已获得了较高的市场占有率,相关的产业也在逐步发展壮大之中。 全书.indd 72 2024/3/16 14:52:16 第 3 章  STM32 系列微控制器 73 兆易创新于 2005 年在北京成立,是一家领先的无晶圆厂半导体公司,致力于开发先进 的存储器技术和集成电路(Integrated Circuit,IC)解决方案。公司的核心产品线为 Flash、 32 位通用型 MCU 及智能人机交互传感器芯片及整体解决方案,以“高性能、低功耗”著称, 为工业、汽车、计算、消费类电子、物联网、移动应用以及网络和电信行业的客户提供全方 位服务。与 STM32F103 兼容的产品为 GD32VF103。 华大半导体是中国电子信息产业集团有限公司(China Electronics Corporation,CEC) 旗下专业的集成电路发展平台公司,围绕汽车电子、工业控制、物联网三大应用领域,重点 布局控制芯片、功率半导体、高端模拟芯片和安全芯片等,提供了竞争力强劲的产品矩阵及 整体芯片解决方案。可以选择的 Arm 微控制器有 HC32F0、HC32F1 和 HC32F4 系列。 学习嵌入式微控制器的知识,掌握其核心技术,了解这些技术的发展趋势,有助于为我 国培养该领域的后备人才,促进我国在微控制器技术上的长远发展,为国产品牌的发展注入 新的活力。在学习中,我们应注重知识学习、能力提升、价值观塑造的有机结合,培养自力 更生、追求卓越的奋斗精神和精益求精的工匠精神,树立民族自信心,为实现中华民族的伟 大复兴贡献力量。 3.2 STM32F1 系列产品系统架构和 STM32F103ZET6 内部架构 微课视频 STM32 跟其他单片机一样,是一个单片计算机或单片微控制器。所谓单片,就是在一 枚芯片上集成了计算机或微控制器该有的基本功能部件。这些功能部件通过总线连在一起。 就 STM32 而言,这些功能部件主要包括 Cortex-M 内核、总线、系统时钟发生器、复位电 路、程序存储器、数据存储器、中断控制、调试接口以及各种功能部件(外设)。不同的芯 片系列和型号,外设的数量和种类也不一样,常有的基本功能部件(外设)是输入 / 输出接 口(GPIO)、定 时 / 计数器(TIMER/COUNTER)、串行通信接口(USART)、串行总线(I2C、 SPI 或 I2S)、 SD 卡接口(SDIO)、 USB 接口等。 STM32F10x 系列单片机基于Arm Cortex-M3 内核,主要分为STM32F100xx、 STM32F101xx、STM32F102xx、STM32F103xx、STM32F105xx 和 STM32F107xx。 STM32F100xx、 STM32F101xx 和 STM32F102xx 为基本型系列,分别工作在24MHz、 36MHz 和 48MHz 主频。STM32F103xx 为增强型系列,STM32F105xx 和 STM32F107xx 为 互联型系列,均工作在 72MHz 主频。其结构特点如下。 (1)一个主晶振可以驱动整个系统,低成本的 4 ~ 16MHz 晶振即可驱动 CPU、USB 和 其他所有外设。 (2)内嵌出厂前调校好的 8MHz RC 振荡器,可以作为低成本主时钟源。 (3)内嵌电源监视器,减少对外部器件的要求,提供上电复位、低电压检测、掉电检测。 全书.indd 73 2024/3/16 14:52:16 74 Arm 嵌入式系统原理及应用——STM32F103 微控制器架构、编程与开发 (4)GPIO 的最大翻转频率为 18MHz。 (5)PWM 定时器:可以接收最大 72MHz 时钟输入。 (6)USART:传输速率可达 4.5Mb/s。 (7)ADC:12 位,转换时间最快为 1μs。 (8)DAC:提供两个通道,12 位。 (9)SPI:传输速率可达 18Mb/s,支持主模式和从模式。 (10)I2C:工作频率可达 400kHz。 (11)I2S:采样频率可选范围为 8 ~ 48kHz。 (12)自带时钟的看门狗定时器。 (13)USB:传输速率可达 12Mb/s。 (14)SDIO:传输速率为 48MHz。 3.2.1 STM32F1 系列产品系统架构 STM32F1 系列产品系统架构如图 3-4 所示。 图 3-4 STM32F1 系列产品系统架构 全书.indd 74 2024/3/16 14:52:17 第 3 章  STM32 系列微控制器 75 STM32F1 系列产品主要由以下部分构成。 (1)Cortex-M3 内核 DCode 总线(D-Bus)和系统总线(S-Bus)。 (2)通用 DMA1 和通用 DMA2。 (3)内部 SRAM。 (4)内部 Flash 存储器。 (5)可变静态存储控制器(FSMC)。 (6)AHB 到 APB 的桥(AHB2APBx),它连接所有 APB 设备。 上述部件都是通过一个多级的 AHB 总线架构相互连接的。 (7)ICode 总线:将 Cortex-M3 内核的指令总线与 Flash 指令接口相连接。指令预取在 此总线上完成。 (8)DCode 总线:将 Cortex-M3 内核的 DCode 总线与 Flash 存储器的数据接口相连接(常 量加载和调试访问)。 (9)系统总线:连接 Cortex-M3 内核的系统总线(外设总线)到总线矩阵,总线矩阵协 调内核和 DMA 间的访问。 (10)DMA 总线:将 DMA 的 AHB 主控接口与总线矩阵相连,总线矩阵协调 CPU 的 DCode 和 DMA 到 SRAM、Flash 和外设的访问。 (11)总线矩阵:协调内核系统总线和 DMA 主控总线之间的访问仲裁,仲裁采用轮换 算法。总线矩阵包含 4 个主动部件(CPU 的 DCode、系统总线、DMA1 总线和 DMA2 总线) 和 4 个被动部件(Flash 存储器接口、SRAM、FSMC 和 AHB/APB 桥 )。 (12)AHB 外设:通过总线矩阵与系统总线相连,允许 DMA 访问。 (13)AHB/APB 桥(APB):两个 AHB/APB 桥在 AHB 和两个 APB 总线间提供同步连 接。 APB1 操作速度限于 36MHz,APB2 操作于全速(最高 72MHz)。 上述模块由高级微控制器总线架构(Advanced Microcontroller Bus Architecture, AMBA)总线连接到一起。AMBA 是 Arm 公司定义的片上总线,已成为一种流行的工业片 上总线标准。它包括 AHB 和 APB,前者作为系统总线,后者作为外设总线。 为更加简明地理解 STM32 单片机的内部结构,对图 3-4 进行抽象简化后,STM32F1 系 列产品抽象简化系统架构如图 3-5 所示,这样对初学者的学习理解会更加方便些。 现结合图 3-5 对 STM32 的基本原理进行简单分析。 (1)程序存储器、静态数据存储器和所有外设都统一编址,地址空间为 4GB,但各自 都有固定的存储空间区域,使用不同的总线进行访问。这一点与 51 单片机完全不一样。具 体的地址空间请参阅意法半导体公司官方手册。如果采用固件库开发程序,则可以不必关注 具体的地址问题。 (2)可将 Cortex-M3 内核视为 STM32 的 CPU,程序存储器、静态数据存储器和所有外 设均通过相应的总线再经总线矩阵与之相接。Cortex-M3 内核控制程序存储器、静态数据存 储器和所有外设的读写访问。 全书.indd 75 2024/3/16 14:52:17 76 Arm 嵌入式系统原理及应用——STM32F103 微控制器架构、编程与开发 图 3-5 STM32F1 系列产品抽象简化系统架构 (3)STM32 的功能外设较多,分为高速外设、低速外设两类,各自通过桥接再通过 AHB 系统总线连接至总线矩阵,从而实现与 Cortex-M3 内核的接口。两类外设的时钟可分 别配置,速度不一样。具体某个外设属于高速还是低速,已经被意法半导体公司明确规定。 所有外设均有两种访问操作方式:一是传统方式,通过相应总线由 CPU 发出读写指令进行 访问,这种方式适用于读写数据较小,速度相对较低的场合;二是 DMA 方式,即直接存储 器存取,在这种方式下,外设可发出 DMA 请求,不再通过 CPU 而直接与指定的存储区发 生数据交换,因此可大大提高数据访问操作的速度。 (4)STM32 的系统时钟均由复位与时钟控制器(RCC)产生,它有一整套的时钟管理 设备,由它为系统和各种外设提供所需的时钟以确定各自的工作速度。 3.2.2 STM32F103ZET6 内部架构 STM32F103ZET6 集成了 Cortex-M3 内核 CPU,工作频率为 72MHz,与 CPU 紧耦合的 为嵌套向量中断控制器(NVIC)和跟踪调试单元。其中,调试单元支持标准 JTAG 和串行 SW 两种调试方式;16 个外部中断源作为 NVIC 的一部分。CPU 通过指令总线直接到 Flash 取指令,通过数据总线和总线阵列与 Flash 和 SRAM 交换数据,DMA 可以直接通过总线阵 列控制定时器、ADC、DAC、SDIO、I2S、SPI、I2C 和 USART。 Cortex-M3 内核 CPU 通过总线阵列和 AHB 以及 AHB/APB 桥与两类 APB 总线相连接, 即 APB1 总线和 APB2 总线。其中,APB2 总线工作在 72MHz,与它相连的外设有外部中断 与唤醒控制、7 个通用目的输入 / 输出端口(PA、PB、PC、PD、PE、PF 和 PG)、定时器 1、 定时器 8、SPI1、USART1、3 个 ADC 和内部温度传感器。其中,3 个 ADC 和内部温度传 全书.indd 76 2024/3/16 14:52:17 第 3 章  STM32 系列微控制器 77 感器使用 VDDA 电源。 APB1 总线最高可工作在 36MHz,与 APB1 总线相连的外设有看门狗定时器、定时器 6、定时器 7、RTC 时钟、定时器 2、定时器 3、定时器 4、定时器 5、USART2、USART3、 UART4、UART5、SPI2(I2S2)与SPI3(I2S3)、 I2C1 与 I2C2、CAN、USB 设备和两个 DAC。其中,512B 的 SRAM 属于 CAN 模块,看门狗时钟源使用 VDD 电源,RTC 时钟源使 用 VBAT 电源。 STM32F103ZET6 芯片内部具有 8MHz 和 40kHz 的 RC 振荡器,时钟与复位控制器和 SDIO 模块直接与 AHB 总线相连接,而可变静态存储器控制器(FSMC)直接与总线阵列相 连接。 根据程序存储容量,ST 芯片分为三大类:LD(小于 64KB)、MD(小于 256KB)、HD(大 于 256KB), 而 STM32F103ZET6 类型属于第 3 类,它是 STM32 系列的一个典型型号。 STM32F103ZET6 的内部架构如图 3-6 所示。STM32F103ZET6 具有以下特性。 (1)内核方面:① Arm 32 位的 Cortex-M3 CPU,最高工作频率 72MHz,在存储器的零 等待周期访问时运算速度可达 1.25DMIPS/MHz(Dhrystone 2.1);②具有单周期乘法和硬件 除法指令。 (2)存储器方面:① 512KB 的 Flash 程序存储器;② 64KB 的 SRAM;③带有 4 个片 选信号的可变静态存储器控制器,支持 Compact Flash、SRAM、PSRAM、NOR 和 NAND 存储器。 (3)LCD 并行接口,支持 8080/6800 模式。 (4)时钟、复位和电源管理方面:①芯片和 I/O 引脚的供电电压为 2.0 ~ 3.6V;②上 电 / 断电复位(POR/PDR)、可编程电压监测器(PVD); ③ 4 ~ 16MHz 晶体振荡器;④内 嵌经出厂调校的 8MHz 的 RC 振荡器;⑤内嵌带校准的 40kHz 的 RC 振荡器;⑥带校准功能 的 32kHz RTC 振荡器。 (5)低功耗:①支持睡眠、停机和待机模式;② VBAT 为 RTC 和后备寄存器供电。 (6)3 个 12 位模数转换器(ADC), lμs 转换时间(多达 16 个输入通道),转换范围为 0 ~ 3.6V;采样和保持功能;温度传感器。 (7)两个 12 位数模转换器(DAC)。 (8)DMA:① 12 通道 DMA 控制器;②支持的外设包括定时器、ADC、DAC、SDIO、 I2S、SPI、I2C 和 USART。 (9)调试模式:①串行单线调试(SWD)和 JTAG 接口;② Cortex-M3 嵌入式跟踪宏 单元(ETM)。 (10)快速 I/O 端口(PA ~ PG): 多 达 7 个快速 I/O 端口,每个端口包含 16 根 I/O 口线, 所有 I/O 端口可以映像到 16 个外部中断;绝大多数端口均可容忍 5V 信号。 (11)多达 11 个定时器:① 4 个 16 位通用定时器,每个定时器有多达 4 个用于输入捕 获 / 输出比较 /PWM 或脉冲计数的通道和增量编码器输入;②两个 16 位带死区控制和紧急 全书.indd 77 2024/3/16 14:52:17 78 Arm 嵌入式系统原理及应用——STM32F103 微控制器架构、编程与开发 刹车,用于电机控制的 PWM 高级控制定时器;③两个看门狗定时器(独立看门狗定时器和 窗口看门狗定时器);④系统滴答定时器(24 位自减型计数器);⑤两个 16 位基本定时器用 于驱动 DAC。 图 3-6 STM32F103ZET6 内部架构 注:channels:通道;as AF:作为第二功能,可作为外设功能脚的 I/O 端口;device:设备;system:系统; Power:电源;volt.reg.:电压寄存器;Bus Matrix :总线矩阵;Supply supervision:电源监视; Standby interface:备用接口;Backup interface:后备接口;Backup reg.:后备寄存器。 全书.indd 78 2024/3/16 14:52:17 第 3 章  STM32 系列微控制器 79 (12)多达 13 个通信接口:①两个 I2C 接口(支持 SMBus/PMBus); ② 5 个 USART 接 口(支持 ISO 7816 接口、LIN、IrDA 兼容接口和调制解调控制);③ 3 个 SPI 接口(18Mb/s); ④一个 CAN 接口(支持 CAN 2.0B 协议);⑤一个 USB 2.0 全速接口;⑥一个 SDIO 接口。 (13)循环冗余校验(Cyclic Redundancy Check,CRC)计算单元,96 位的芯片唯一 代码。 (14)LQFP(小外形四方扁平封装)144 封装形式。 (15)工作温度:- 40 ~+ 105℃。 以上特性使 STM32F103ZET6 非常适用于电机驱动、应用控制、医疗和手持设备、PC 和游戏外设、GPS 平台、工业应用、PLC、逆变器、打印机、扫描仪、报警系统、空调系统 等领域。 3.3 STM32F103ZET6 的存储器映像 STM32F103ZET6 的存储器映像如图 3-7 所示。 由图 3-7 可知,STM32F103ZET6 芯片是 32 位的微控制器,可寻址存储空间大小为 232B=4GB,分为 8 个 512MB 的存储块,存储块 0 的地址范围为 0x00000000 ~ 0x1FFF FFFF,存储块 1 的地址范围为 0x2000 0000 ~ 0x3FFF FFFF,以此类推,存储块 7 的地址 ~ 范围为 0xE000 0000 0xFFFF FFFF。 微课视频 STM32F103ZET6 芯片的可寻址空间大小为4GB,但并不意味着0x0000 0000 ~ 0xFFFF FFFF 地址空间均可以有效访问,只有映射了真实物理存储器的存储空间才能被 有效地访问。对于存储块 0,如图 3-7 所示,片内 Flash 映射到地址空间 0x0800 0000 ~ 0x0807 FFFF(512KB),系统存储器映射到地址空间 0x1FFF F000 ~ 0x1FFF F7FF(2KB), 用户选项字节(Option Bytes)映射到地址空间 0x1FFF F800 ~ 0x1FFF F80F(16B)。同时, 地址范围 0x0000 0000 ~ 0x0007 FFFF,根据启动模式要求,可以作为 Flash 或系统存储 器的别名访问空间。例如,BOOT0=0 时,片内 Flash 同时映射到地址空间 0x0000 0000 ~ 0x0007 FFFF 和地址空间0x0800 0000 ~ 0x0807 FFFF,即地址空间0x0000 0000 ~ 0x0007 FFFF 是 Flash 存储器。除此之外,其他空间是保留的。 512MB 的存储块1 中只有地址空间0x2000 0000 ~ 0x2000 FFFF 映射了64KB 的 SRAM,其余空间是保留的。 尽管 STM32F103ZET6 微控制器具有两个 APB 总线,且这两个总线上的外设访问速度 不同,但是芯片存储空间中并没有区别这两个外设的访问空间,而是把全部 APB 外设映射 到存储块 2 中,每个外设的寄存器占据 1KB 空间。 全书.indd 79 2024/3/16 14:52:17 80 Arm 嵌入式系统原理及应用——STM32F103 微控制器架构、编程与开发 图 3-7 STM32F103ZET6 的存储器映像 注:block:块;bank:段;Reserved:保留;Shared:共享;registers:寄存器;Option bytes:选项字节; System memory:系统存储器;Aliased:别名;depending on:取决于;pins:引脚。 全书.indd 80 2024/3/16 14:52:18 第 3 章  STM32 系列微控制器 81 程序存储器、数据存储器、寄存器和输入 / 输出端口被组织在同一个 4GB 的线性地址 空间内。可访问的存储器空间被分为 8 个主要的块,每块为 512MB。 数据字节以小端格式存放在存储器中。一个字中的最低地址字节被认为是该字的最低有 效字节,而最高地址字节是最高有效字节。 3.3.1 STM32F103ZET6 内置外设的地址范围 STM32F103ZET6 中内置外设的地址范围如表 3-1 所示。 表 3-1 STM32F103ZET6 中内置外设的地址范围 地址范围 外 设 所在总线 0x5000 0000 ~ 0x5003 FFFF USB OTG 全速 AHB 0x4002 8000 ~ 0x4002 9FFF 以太网 0x4002 3000 ~ 0x4002 33FF CRC 0x4002 2000 ~ 0x4002 23FF Flash 接口 0x4002 1000 ~ 0x4002 13FF 复位和时钟控制(RCC) AHB 0x4002 0400 ~ 0x4002 07FF DMA2 0x4002 0000 ~ 0x4002 03FF DMA1 0x4001 8000 ~ 0x4001 83FF SDIO 0x4001 3C00 ~ 0x4001 3FFF ADC3 0x4001 3800 ~ 0x4001 3BFF USART1 0x4001 3400 ~ 0x4001 37FF TIM8 定时器 0x4001 3000 ~ 0x4001 33FF SPI1 0x4001 2C00 ~ 0x4001 2FFF TIM1 定时器 0x4001 2800 ~ 0x4001 2BFF ADC2 0x4001 2400 ~ 0x4001 27FF ADC1 0x4001 2000 ~ 0x4001 23FF GPIO 端口 G APB2 0x4001 1C00 ~ 0x4001 1FFF GPIO 端口 F 0x4001 1800 ~ 0x4001 1BFF GPIO 端口 E 0x4001 1400 ~ 0x4001 17FF GPIO 端口 D 0x4001 1000 ~ 0x4001 13FF GPIO 端口 C 0x4001 0C00 ~ 0x4001 0FFF GPIO 端口 B 0x4001 0800 ~ 0x4001 0BFF GPIO 端口 A 0x4001 0400 ~ 0x4001 07FF EXTI 0x4001 0000 ~ 0x4001 03FF AFIO 全书.indd 81 2024/3/16 14:52:18 82 Arm 嵌入式系统原理及应用——STM32F103 微控制器架构、编程与开发 续表 地址范围 外 设 所在总线 0x4000 7400 ~ 0x4000 77FF DAC 0x4000 7000 ~ 0x4000 73FF 电源控制(PWR) 0x4000 6C00 ~ 0x4000 6FFF 后备寄存器(BKR) 0x4000 6400 ~ 0x4000 67FF bxCAN 0x4000 6000 ~ 0x4000 63FF USB/CAN 共享的 512B SRAM 0x4000 5C00 ~ 0x4000 5FFF USB 全速设备寄存器 0x4000 5800 ~ 0x4000 5BFF I2C2 0x4000 5400 ~ 0x4000 57FF I2C1 0x4000 5000 ~ 0x4000 53FF UART5 0x4000 4C00 ~ 0x4000 4FFF UART4 0x4000 4800 ~ 0x4000 4BFF USART3 0x4000 4400 ~ 0x4000 47FF USART2 APB1 0x4000 3C00 ~ 0x4000 3FFF SPI3/I2S3 0x4000 3800 ~ 0x4000 3BFF SPI2/I2S2 0x4000 3000 ~ 0x4000 33FF 独立看门狗(IWDG) 0x4000 2C00 ~ 0x4000 2FFF 窗口看门狗(WWDG) 0x4000 2800 ~ 0x4000 2BFF RTC 0x4000 1400 ~ 0x4000 17FF TIM7 定时器 0x4000 1000 ~ 0x4000 13FF TIM6 定时器 0x4000 0C00 ~ 0x4000 0FFF TIM5 定时器 0x4000 0800 ~ 0x4000 0BFF TIM4 定时器 0x4000 0400 ~ 0x4000 07FF TIM3 定时器 0x4000 0000 ~ 0x4000 03FF TIM2 定时器 没有分配给片上存储器和外设的存储器空间都是保留的地址空间:0x4000 1800 ~ 0x4000 27FF、0x4000 3400 ~ 0x4000 37FF、0x4000 4000 ~ 0x4000 3FFF、0x4000 7800 ~ 0x4000FFFF、0x4001 4000 ~ 0x4001 7FFF、0x4001 8400 ~ 0x4001 7FFF、0x4002800 ~ 0x4002 0FFF、0x4002 1400 ~ 0x4002 1FFF、0x4002 3400 ~ 0x4002 3FFF、0x4003 0000 ~ 0x4FFF FFFF。 每个地址范围的第 1 个地址为对应外设的首地址,该外设的相关寄存器地址都可以用“首 地址 + 偏移量”的方式找到其绝对地址。 3.3.2 嵌入式 SRAM STM32F103ZET6 内置 64KB 的 SRAM。它可以以字节、半字(16 位)或字(32 位) 进行访问。SRAM 的起始地址是 0x2000 0000。 全书.indd 82 2024/3/16 14:52:18 第 3 章  STM32 系列微控制器 83 Cortex-M3 存储器映像包括两个位带区。这两个位带区将位带别名区中的每个字映射到 位带区中的一个位,在位带别名区写入一个字具有对位带区的目标位执行读—改—写操作的 相同效果。 在 STM32F103ZET6 中,外设寄存器和 SRAM 都被映射到位带区,允许执行位带的写 和读操作。 下面的映射公式给出了位带别名区中的每个字如何对应位带区的相应位。 bit_word_addr=bit_band_base+byte_offset ×32+bit_number ×4 其中,bit_word_addr 为位带别名区中字的地址,它映射到某个目标位;bit_band_base 为位 带别名区的起始地址;byte_offset 为包含目标位的字节在位带区中的序号;bit_number 为目 标位所在位置(0 ~ 31)。 3.3.3 嵌入式 Flash 高达 512KB 的 Flash 由主存储块和信息块组成:主存储块容量为 64K×64 位,每个存 储块划分为 256 个 2KB 的页;信息块容量为 258×64 位。 Flash 模块的组织如表 3-2 所示。 表 3-2 Flash 模块的组织 模 块 名 称 地 址 大小 /B 页 0 0x0800 0000 ~ 0x0800 07FF 2K 页 1 0x0800 0800 ~ 0x0800 0FFF 2K 页 2 0x0800 1000 ~ 0x0800 17FF 2K 主存储块 页 3 0x0800 1800 ~ 0x0800 1FFF 2K ... ... ... 页 255 0x0807 F800 ~ 0x0807 FFFF 2K 系统存储器 0x1FFF F000 ~ 0x1FFF F7FF 2K 信息块 选择字节 0x1FFF F800 ~ 0x1FFF F80F 16 Flash_ACR 0x4002 2000 ~ 0x4002 2003 4 Flash _KEYR 0x4002 2004 ~ 0x4002 2007 4 Flash _OPTKEYR 0x4002 2008 ~ 0x4002 200B 4 Flash _SR 0x4002 200C ~ 0x4002 200F 4 Flash 接口寄存器 Flash _CR 0x4002 2010 ~ 0x4002 2013 4 Flash _AR 0x4002 2014 ~ 0x4002 2017 4 保留 0x4002 2018 ~ 0x4002 201B 4 Flash _OBR 0x4002 201C ~ 0x4002 201F 4 Flash _WRPR 0x4002 2020 ~ 0x4002 2023 4 全书.indd 83 2024/3/16 14:52:18 84 Arm 嵌入式系统原理及应用——STM32F103 微控制器架构、编程与开发 Flash 接口的特性如下。 (1)带预取缓冲器的读接口(每字为 2×64 位 )。 (2)选择字节加载器。 (3)闪存编程 / 擦除操作。 (4)访问 / 写保护。 Flash 的指令和数据访问是通过 AHB 总线完成的。预取模块通过 ICode 总线读取指令。 仲裁作用在 Flash 接口,并且 DCode 总线上的数据访问优先。读访问可以有以下配置选项。 (1)等待时间:可以随时更改用于读取操作的等待状态的数量。 (2)预取缓冲区(两个 64 位):在每次复位后被自动打开,由于每个缓冲区的大小(64 位)与 Flash 的带宽相同,因此只通过一次读 Flash 的操作即可更新整个级中的内容。由于 预取缓冲区的存在,CPU 可以工作在更高的主频上。CPU 每次取指令最多为 32 位的字,取 一条指令时,下一条指令已经在缓冲区中等待。 3.4 STM32F103ZET6 的时钟结构 STM32 系列微控制器中有 5 个时钟源,分别是高速内部(HSI)时钟、高速外部(HSE) 时钟、低速内部(Low Speed Internal,LSI)时钟、低速外部(Low Speed External,LSE)时钟、 锁相环(PLL)倍频输出。STM32F103ZET6 的时钟系统呈树状结构,因此也称为时钟树。 STM32F103ZET6 具有多个时钟频率,分别供给内核和不同外设模块使用。高速时钟供 中央处理器等高速设备使用,低速时钟供外设等低速设备使用。HSI、HSE 或 PLL 可用来 驱动系统时钟(SYSCLK)。 LSI、LSE 时钟作为二级时钟源,40kHz 低速内部 RC 时钟可用于驱动独立看门狗和通 过程序选择驱动 RTC。RTC 用于从停机 / 待机模式下自动唤醒系统。 32.768kHz 低速外部晶体也可用来通过程序选择驱动 RTC(RTCCLK)。 当某个部件不被使用时,任意时钟源都可独立地启动或关闭,由此优化系统功耗。 用户可通过多个预分频器配置 AHB、高 速 APB(APB2)和低速 APB(APB1)的频率。 AHB 和 APB2 的最大频率是 72MHz。APB1 的最大允许频率是 36MHz。SDIO 接口的时钟 频率固定为 HCLK/2。 RCC 通过 AHB 时钟(HCLK)8 分频后作为 Cortex 系统定时器(SysTick)的外部时 钟。通过对 SysTick 控制与状态寄存器的设置,可选择上述时钟或 Cortex(HCLK)时钟作 为 SysTick 时钟。ADC 时钟由高速 APB2 时钟经 2、4、6 或 8 分频后获得。 定时器时钟频率分配由硬件按以下两种情况自动设置。 (1)如果相应的 APB 预分频系数为 1,定时器的时钟频率与所在 APB 总线频率一致; (2)否则,定时器的时钟频率被设为与其相连的 APB 总线频率的 2 倍。 FCLK 是 Cortex-M3 处理器的自由运行时钟。 全书.indd 84 2024/3/16 14:52:18 第 3 章  STM32 系列微控制器 85 STM32 处理器因为低功耗的需要,各模块需要分别独立开启时钟。因此,当需要使用 某个外设模块时,务必要先使能对应的时钟,否则这个外设不能工作。STM32 时钟树如图 3-8 所示。 图 3-8 STM32 时钟树 1.HSE 时钟 高速外部(HSE)时钟信号一般由外部晶体 / 陶瓷谐振器产生。在 OSC_IN 和 OSC_OUT 引脚之间连接 4 ~ 16MHz 外部振荡器为系统提供精确的主时钟。 为了减少时钟输出的失真和缩短启动稳定时间,晶体 / 陶瓷谐振器和负载电容器必须尽 可能地靠近振荡器引脚。负载电容值必须根据所选择的振荡器来调整。 2.HSI 时钟 HSI 时钟信号由内部 8MHz RC 振荡器产生,可直接作为系统时钟或在 2 分频后作为 PLL 输入。 HSI RC 振荡器能够在不需要任何外部器件的条件下提供系统时钟。它的启动时间比 HSE 晶体振荡器短。然而,即使在校准之后它的时钟频率精度仍较差。如果 HSE 晶体振荡 器失效,HSI 时钟会被作为备用时钟源。 全书.indd 85 2024/3/16 14:52:18 86 Arm 嵌入式系统原理及应用——STM32F103 微控制器架构、编程与开发 3.PLL 内部 PLL 可以用来倍频 HSI RC 振荡器的输出时钟或 HSE 晶体输出时钟。PLL 的设 置(选择 HSI/2 或 HSE 振荡器为 PLL 的输入时钟,选择倍频因子)必须在其被激活前完成。 一旦 PLL 被激活,这些参数就不能改动。 如果需要在应用中使用 USB 接口,PLL 必须被设置为输出 48MHz 或 72MHz 时钟,用 于提供 48MHz 的 USBCLK 时钟。 4.LSE 时钟 LSE 晶体是一个 32.768kHz 的低速外部晶体或陶瓷谐振器。它为实时时钟或其他定时功 能提供一个低功耗且精确的时钟源。 5.LSI 时钟 LSI RC 担当着低功耗时钟源的角色,它可以在停机和待机模式下保持运行,为独立看 门狗和自动唤醒单元提供时钟。LSI 时钟频率大约为 40kHz(30 ~ 60kHz)。 6.系统时钟(SYSCLK)选择 系统复位后,HSI 振荡器被选为系统时钟。当时钟源被直接或通过 PLL 间接作为系统 时钟时,它将不能被停止。只有当目标时钟源准备就绪了(经过启动稳定阶段的延迟或 PLL 稳定),从一个时钟源到另一个时钟源的切换才会发生。在被选择时钟源没有就绪时,系统 时钟的切换不会发生。直至目标时钟源就绪,才发生切换。 7.RTC 时钟 通过设置备份域控制寄存器(RCC_BDCR)中的 RTCSEL[1:0]位,RTCCLK 时钟源 可以由 HSE/128、LSE 或 LSI 时钟提供。除非备份域复位,此选择不能被改变。LSE 时钟 在备份域里,但 HSE 和 LSI 时钟不在。 (1)如果 LSE 时钟被选为 RTC 时钟,只要 VBAT 维持供电,尽管 VDD 供电被切断,RTC 仍可继续工作。 (2)LSI 时钟被选为自动唤醒单元(Auto-Wakeup Unit,AWU)时钟时,如果切断 VDD 供电,不能保证 AWU 的状态。 (3)如果 HSE 时钟 128 分频后作为 RTC 时钟,VDD 供电被切断或内部电压调压器被关 闭(1.8V 域的供电被切断)时,RTC 状态不确定。必须设置电源控制寄存器的 DPB 位(取 消后备区域的写保护位)为 1。 8.看门狗时钟 如果独立看门狗已经由硬件选项或软件启动,LSI 振荡器将被强制在打开状态,并且不 能被关闭。在 LSI 振荡器稳定后,时钟供应给 IWDG。 9.时钟输出 微控制器允许输出时钟信号到外部 MCO 引脚。相应地,GPIO 端口寄存器必须被配置 为相应功能。可被选作 MCO 时钟的时钟信号有 SYSCLK、HIS、HSE、PLL/2。 全书.indd 86 2024/3/16 14:52:19 第 3 章  STM32 系列微控制器 87 3.5 STM32F103VET6 的引脚 STM32F103VET6 比 STM32F103ZET6 少了两个端口:PF 和 PG,其他资源一样。 为了简化描述,后续的内容以 STM32F103VET6 为例进行介绍。STM32F103VET6 采用 LQFP100 封装,引脚如图 3-9 所示。 图 3-9 STM32F103VET6 的引脚 1.引脚定义 STM32F103VET6 的引脚定义如表 3-3 所示。 表 3-3 STM32F103VET6 的引脚定义 引脚 I/O 复位后的 复用功能 引脚名称 类 型 编号 电平 主要功能 默认情况 重映射后 1 PE2 I/O FT PE2 TRACECK/FSMC_A23 2 PE3 I/O FT PE3 TRACED0/FSMC_A19 全书.indd 87 2024/3/16 14:52:19 88 Arm 嵌入式系统原理及应用——STM32F103 微控制器架构、编程与开发 续表 引脚 I/O 复位后的 复用功能 引脚名称 类 型 编号 电平 主要功能 默认情况 重映射后 3 PE4 I/O FT PE4 TRACED1/FSMC_A20 4 PE5 I/O FT PE5 TRACED2/FSMC_A21 5 PE6 I/O FT PE6 TRACED3/FSMC_A22 6 VBAT S VBAT 7 PC13-TAMPER-RTC I/O PC13 TAMPER-RTC 8 PC14-OSC32_IN I/O PC14 OSC32_IN 9 PC15-OSC32_OUT I/O PC15 OSC32_OUT 10 VSS_5 S VSS_5 11 VDD_5 S VDD_5 12 OSC_IN I OSC_IN 13 OSC_OUT O OSC_OUT 14 NRST I/O NRST 15 PC0 I/O PC0 ADC123_IN10 16 PC1 I/O PC1 ADC123_IN11 17 PC2 I/O PC2 ADC123_IN12 18 PC3 I/O PC3 ADC123_IN13 19 VSSA S VSSA 20 VREF - S VREF - 21 VREF + S VREF + 22 VDDA S VDDA WKUP/USART2_CTS/ ADC123_IN0/TIM2_ 23 PA0-WKUP I/O PA0 CH1_ETR/TIM5_CH1/ TIM8_ETR USART2_RTS/ADC123_ 24 PA1 I/O PA1 IN1/TIM5_CH2/TIM2_CH2 USART2_TX/TIM5_CH3/ 25 PA2 I/O PA2 ADC123_IN2/TIM2_CH3 USART2_RX/TIM5_CH4/ 26 PA3 I/O PA3 ADC123_IN3/TIM2_CH4 27 VSS_4 S VSS_4 28 VDD_4 S VDD_4 SPI1_NSS/USART2_CK/ 29 PA4 I/O PA4 DAC_OUT1/ADC12_IN4 SPI1_SCK/DAC_OUT2/ 30 PA5 I/O PA5 TIM1_BKIN ADC12_IN5 全书.indd 88 2024/3/16 14:52:19 第 3 章  STM32 系列微控制器 89 续表 引脚 I/O 复位后的 复用功能 引脚名称 类 型 编号 电平 主要功能 默认情况 重映射后 SPI1_MISO/TIM8_BKIN/ 31 PA6 I/O PA6 TIM1_CH1N ADC12_IN6/TIM3_CH1 SPI1_MOSI/TIM8_CH1N/ 32 PA7 I/O PA7 ADC12_IN7/TIM3_CH2 33 PC4 I/O PC4 ADC12_IN14 34 PC5 I/O PC5 ADC12_IN15 ADC12_IN8/TIM3_CH3/ 35 PB0 I/O PB0 TIM1_CH2N TIM8_CH2N ADC12_IN9/TIM3_CH4/ 36 PB1 I/O PB1 TIM1_CH3N TIM8_CH3N 37 PB2 I/O FT PB2/BOOT1 38 PE7 I/O FT PE7 FSMC_D4 TIM1_ETR 39 PE8 I/O FT PE8 FSMC_D5 TIM1_CH1N 40 PE9 I/O FT PE9 FSMC_D6 TIM1_CH1 41 PE10 I/O FT PE10 FSMC_D7 TIM1_CH2N 42 PE11 I/O FT PE11 FSMC_D8 TIM1_CH2 43 PE12 I/O FT PE12 FSMC_D9 TIM1_CH3N 44 PE13 I/O FT PE13 FSMC_D10 TIM1_CH3 45 PE14 I/O FT PE14 FSMC_D11 TIM1_CH4 46 PE15 I/O FT PE15 FSMC_D12 TIM1_BKIN 47 PB10 I/O FT PB10 I2C2_SCL/USART3_TX TIM2_CH3 48 PB11 I/O FT PB11 I2C2_SDA/USART3_RX TIM2_CH4 49 VSS_1 S VSS_1 50 VDD_1 S VDD_1 SPI2_NSS/I2S2_WS/I2C2_ 51 PB12 I/O FT PB12 SMBA/USART3_CK/ TIM1_BKIN SPI2_SCK/I2S2_CK/ 52 PB13 I/O FT PB13 USART3_CTS/TIM1_CH1N SPI2_MISO/TIM1_CH2N/ 53 PB14 I/O FT PB14 USART3_RTS SPI2_MOSI/I2S2_SD/ 54 PB15 I/O FT PB15 TIM1_CH3N 55 PD8 I/O FT PD8 FSMC_D13 USART3_TX 56 PD9 I/O FT PD9 FSMC_D14 USART3_RX 57 PD10 I/O FT PD10 FSMC_D15 USART3_CK 全书.indd 89 2024/3/16 14:52:19 90 Arm 嵌入式系统原理及应用——STM32F103 微控制器架构、编程与开发 续表 引脚 I/O 复位后的 复用功能 引脚名称 类 型 编号 电平 主要功能 默认情况 重映射后 58 PD11 I/O FT PD11 FSMC_A16 USART3_CTS TIM4_CH1/ 59 PD12 I/O FT PD12 FSMC_A17 USART3_RTS 60 PD13 I/O FT PD13 FSMC_A18 TIM4_CH2 61 PD14 I/O FT PD14 FSMC_D0 TIM4_CH3 62 PD15 I/O FT PD15 FSMC_D1 TIM4_CH4 I2S2_MCK/TIM8_CH1/ 63 PC6 I/O FT PC6 TIM3_CH1 SDIO_D6 I2S3_MCK/TIM8_CH2/ 64 PC7 I/O FT PC7 TIM3_CH2 SDIO_D7 65 PC8 I/O FT PC8 TIM8_CH3/SDIO_D0 TIM3_CH3 66 PC9 I/O FT PC9 TIM8_CH4/SDIO_D1 TIM3_CH4 USART1_CK/TIM1_CH1/ 67 PA8 I/O FT PA8 MCO 68 PA9 I/O FT PA9 USART1_TX/TIM1_CH2 69 PA10 I/O FT PA10 USART1_RX/TIM1_CH3 USARTI_CTS/USBDM/ 70 PA11 I/O FT PA11 CAN_RX/TIM1_CH4 USART1_RTS/USBDP/ 71 PA12 I/O FT PA12 CAN_TX/TIM1_ETR 72 PA13 I/O FT JTMS-WDIO PA13 73 NC 74 VSS_2 S VSS_2 75 VDD_2 S VDD_2 76 PA14 I/O FT JTCK-SWCLK PA14 TIM2_CH1_ETR PA15/ 77 PA15 I/O FT JTDI SPI3_NSS/I2S3_WS SPI1_NSS 78 PC10 I/O FT PC10 UART4_TX/SDIO_D2 USART3_TX 79 PC11 I/O FT PC11 UART4_RX/SDIO_D3 USART3_RX 80 PC12 I/O FT PC12 UART5_TX/SDIO_CK USART3_CK 81 PD0 I/O FT OSC_IN FSMC_D2 CAN_RX 82 PD1 I/O FT OSC_OUT FSMC_D3 CAN_TX TIM3_ETR/UART5_RX/ 83 PD2 I/O FT PD2 SDIO_CMD 84 PD3 I/O FT PD3 FSMC_CLK USART2_CTS 85 PD4 I/O FT PD4 FSMC_NOE USART2_RTS 全书.indd 90 2024/3/16 14:52:19 第 3 章  STM32 系列微控制器 91 续表 引脚 I/O 复位后的 复用功能 引脚名称 类 型 编号 电平 主要功能 默认情况 重映射后 86 PD5 I/O FT PD5 FSMC_NWE USART2_TX 87 PD6 I/O FT PD6 FSMC_NWAIT USART2_RX 88 PD7 I/O FT PD7 FSMC_NE1/FSMC_NCE2 USART2_CK PB3/TRACESWO 89 PB3 I/O FT JTDO SPI3_SCK/I2S3_CK TIM2_CH2/SPI1_SCK PB4/TIM3_CH1 90 PB4 I/O FT NJTRST SPI3_MISO SPI1_MISO I2C1_SMBA/SPI3_MOSI/ 91 PB5 I/O PB5 TIM3_CH2/SPI1_MOSI I2S3_SD 92 PB6 I/O FT PB6 I2C1_SCL/TIM4_CH1 USART1_TX I2C1_SDA/FSMC_NADV/ 93 PB7 I/O FT PB7 USART1_RX TIM4_CH2 94 BOOT0 I BOOT0 95 PB8 I/O FT PB8 TIM4_CH3/SDIO_D4 I2C1_SCL/CAN_RX 96 PB9 I/O FT PB9 TIM4_CH4/SDIO_D5 I2C1_SCA/CAN_TX 97 PE0 I/O FT PE0 TIM4_ETR/FSMC_NBL0 98 PE1 I/O FT PE1 FSMC_NBL1 99 VSS_3 S VSS_3 100 VDD_3 S VDD_3 注:I= 输入(input), O= 输出(output), S= 电源(supply), FT= 可忍受 5V 电压。 2.启动配置引脚 在 STM32F103VET6 中,可以通过BOOT[1:0]引脚选择3 种不同的启动模式。 STM32F103VET6 的启动配置如表 3-4 所示。 表 3-4 STM32F103VET6 的启动配置 启动模式选择引脚 启动模式 说 明 BOOT1 BOOT0 X 0 主 Flash 主 Flash 被选为启动区域 0 1 系统存储器 系统存储器被选为启动区域 1 1 内置 SRAM 内置 SRAM 被选为启动区域 系统复位后,在 SYSCLK 的第 4 个上升沿,BOOT 引脚的值将被锁存。用户可以通过 设置 BOOT1 和 BOOT0 引脚的状态选择复位后的启动模式。 在从待机模式退出时,BOOT 引脚的值将被重新锁存,因此在待机模式下 BOOT 引脚 应保持为需要的启动配置。在启动延迟之后,CPU 从地址 0x0000 0000 获取堆栈顶的地址, 全书.indd 91 2024/3/16 14:52:19 92 Arm 嵌入式系统原理及应用——STM32F103 微控制器架构、编程与开发 并从启动存储器的 0x0000 0004 指示的地址开始执行代码。 因为固定的存储器映像,代码区始终从地址 0x0000 0000 开始(通过 ICode 和 DCode 总线访问),而数据区(SRAM)始终从地址 0x2000 0000 开始(通过系统总线访问)。 Cortex-M3 的 CPU 始终从 ICode 总线获取复位向量,即启动仅适合于从代码区开始(典 型地从 Flash 启动)。STM32F103VET6 微控制器实现了一个特殊的机制,系统不仅可以从 Flash 或系统存储器启动,还可以从内置 SRAM 启动。 根据选定的启动模式,主 Flash、系统存储器或 SRAM 可以按照以下方式访问。 (1)从主 Flash 启动:主 Flash 被映射到启动空间(0x0000 0000),但仍然能够在它原 有的地址(0x0800 0000)访问它,即 Flash 的内容可以在两个地址区域访问,0x0000 0000 或 0x0800 0000。 (2)从系统存储器启动:系统存储器被映射到启动空间(0x0000 0000),但仍然能够在 它原有的地址(互联型产品原有地址为 0x1FFF B000,其他产品原有地址为 0x1FFF F000) 访问它。 (3)从内置 SRAM 启动:只能在 0x2000 0000 开始的地址区访问 SRAM。从内置 SRAM 启动时,在应用程序的初始化代码中,必须使用 NVIC 的异常表和偏移寄存器,重新 映射向量表到 SRAM 中。 (4)内嵌的自举程序:内嵌的自举程序存放在系统存储区,由厂商在生产线上写入,用 于通过串行接口 USART1 对 Flash 进行重新编程。 3.6 STM32F103VET6 最小系统设计 STM32F103VET6 最小系统是指能够让 STM32F103VET6 正常工作的包含最少元器件的 系统。STM32F103VET6 片内集成了电源管理模块(包括滤波复位输入、集成的上电复位 / 掉电复位电路、可编程电压检测电路)、8MHz 高速内部 RC 振荡器、40kHz 低速内部 RC 振 荡器等部件,外部只需 7 个无源器件就可以让 STM32F103VET6 工作。然而,为了使用方便, 在最小系统中加入了 USB 转 TTL 串口、发光二极管等功能模块。 STM32F103VET6 的最小系统核心电路原理如图 3-10 所示,其中包括了复位电路、晶 体振荡电路和启动设置电路等模块。 1.复位电路 STM32F103VET6 的 NRST 引脚输入中使用 CMOS 工艺,它连接了一个不能断开的上 拉电阻,其典型值为 40kΩ,外部连接了一个上拉电阻 R4、按键 RST 及电容 C5,当按键 RST 按下时 NRST 引脚电位变为 0,通过这个方式实现手动复位。 2.晶体振荡电路 STM32F103VET6 一共外接了两个晶振:一个 8MHz 的晶振 X1 提供给高速外部时钟, 一个 32.768kHz 的晶振 X2 提供给全低速外部时钟。 全书.indd 92 2024/3/16 14:52:19 第 3 章  STM32 系列微控制器 93 图 3-10 STM32F103VET6 的最小系统核心电路原理 3.启动设置电路 启动设置电路由启动设置引脚 BOOT1 和 BOOT0 构成,二者均通过 10kΩ 的电阻接地, 从用户 Flash 启动。 4.JTAG 接口电路 为了方便系统采用 JLINK 仿真器进行下载和在线仿真,在最小系统中预留了 JTAG 接 口电路用来实现 STM32F103VET6 与 JLINK 仿真器进行连接,JTAG 接口电路原理如图 3-11 所示。 全书.indd 93 2024/3/16 14:52:20 94 Arm 嵌入式系统原理及应用——STM32F103 微控制器架构、编程与开发 图 3-11 JTAG 接口电路原理 5.流水灯电路 最小系统板载 16 个 LED 流水灯,对应 STM32F103VET6 的 PE0 ~ PE15 引脚,电路原 理如图 3-12 所示。 图 3-12 流水灯电路原理 另外,STM32F103VET6 还设计有 USB 转 TTL 串口电路(采用 CH340G)、独立按键电 路、ADC 采集电路(采用 10kΩ 电位器)和 5V 转 3.3V 电源电路(采用 AMS1117-3.3V), 具体电路从略。 全书.indd 94 2024/3/16 14:52:20