第    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