第3章 CHAPTER 3 STM32F1系列微控制器 本章首先概述STM32F1系列微控制器产品,然后介绍STM32F1系列微控制器的典型产品STM32F103ZET6的内部结构、时钟以及最小系统等内容。 3.1STM32F1系列微控制器简介 2007年6月意法半导体(ST)公司宣布了第一款基于CortexM3并内嵌32~128KB闪存的STM32微控制器系列产品。STM32 F1系列基础型MCU满足了工业、医疗和消费类市场的各种应用需求。凭借该产品系列,意法半导体在全球ARM CortexM微控制器领域处于领先地位。该系列产品利用一流的外设和低功耗、低压操作实现了高性能,同时还以可接受的价格、简单的架构和简便易用的工具得到了开发者认可。该系列包含5个产品线,它们的引脚、外设和软件均兼容。 STM32系列产品命名规则如图31所示。 其中,各个系列的基本特点如下:  超值型STM32F10024MHz CPU,具有电机控制和CEC功能。  基本型STM32F10136MHz CPU,具有高达1MB的Flash。  连接型STM32F10248MHz CPU,具备USB FS device接口。  增强型STM32F10372MHz CPU,具有高达1MB的Flash、电机控制、USB和CAN。  互联型STM32F105/10772MHz CPU,具有以太网MAC、CAN和USB 2.0 OTG。 图31STM32系列产品命名规则 3.2STM32F1系列产品系统构架和STM32F103ZET6 内部结构 3.2.1STM32F1系列产品系统架构 STM32F1系列产品系统架构如图32所示。 图32STM32F1系列产品系统架构 STM32F1系列产品主要由以下部分构成:  CortexM3内核DCode总线(Dbus)和系统总线(Sbus)。  通用DMA1和通用DMA2。  内部SRAM。  内部闪存存储器。  FSMC。  AHB到APB的桥(AHB2APBx),它连接所有的APB设备。 上述部件都是通过一个多级的AHB总线构架相互连接的。 ICode总线: 该总线将CortexM3内核的指令总线与闪存指令接口相连接。指令预取在此总线上完成。 DCode总线: 该总线将CortexM3内核的DCode总线与闪存存储器的数据接口相连接(常量加载和调试访问)。 系统总线: 此总线连接CortexM3内核的系统总线(外设总线)到总线矩阵,总线矩阵协调着内核和DMA间的访问。 DMA总线: 此总线将DMA的AHB主控接口与总线矩阵相连,总线矩阵协调着CPU的DCode和DMA到SRAM、闪存和外设的访问。 总线矩阵: 总线矩阵协调内核系统总线和DMA主控总线之间的访问仲裁,仲裁采用轮换算法。总线矩阵包含4个主动部件(CPU的DCode、系统总线、DMA1总线和DMA2总线)和4个被动部件(闪存存储器接口、SRAM、FSMC和AHB2APB桥)。 AHB外设通过总线矩阵与系统总线相连,允许DMA访问。 AHB/APB桥(APB): 两个AHB/APB桥在AHB和两个APB总线间提供同步连接。APB1操作速度限于36MHz,APB2操作于全速(最高72MHz)。 上述模块由AMBA(Advanced Microcontroller Bus Architecture )总线连接到一起。AMBA总线是ARM公司定义的片上总线,已成为一种流行的工业片上总线标准。它包括AHB(Advanced High performance Bus)和APB(Advanced Peripheral Bus ),前者作为系统总线,后者作为外设总线。 3.2.2STM32F103ZET6的内部架构 STM32F103ZET6的内部架构如图33所示。STM32F103ZET6包含以下特性。 图33STM32F103ZET6的内部架构 (1) 内核。 ① ARM 32位的CortexM3 CPU,最高72MHz工作频率,在存储器的0等待周期访问时可达1.25DMips/MHz(Dhrystone 2.1)。 ② 单周期乘法和硬件除法。 (2) 存储器。 ① 512KB的闪存程序存储器。 ② 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),1μs转换时间(多达16个输入通道)。 ① 转换范围: 0~3.6V。 ② 采样和保持功能。 ③ 温度传感器。 (7) 2个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或脉冲计数的通道和增量编码器输入。 ② 2个16位带死区控制和紧急刹车,用于电机控制的PWM高级控制定时器。 ③ 2个看门狗定时器(独立看门狗定时器和窗口看门狗定时器)。 ④ 系统滴答定时器: 24位自减型计数器。 ⑤ 2个16位基本定时器用于驱动DAC。 (12) 多达13个通信接口。 ① 2个I2C接口(支持SMBus/PMBus)。 ② 5个USART接口(支持ISO7816接口、LIN、IrDA兼容接口和调制解调控制)。 ③ 3个SPI接口(18M位/秒),2个带有I2S切换接口。 ④ 1个CAN接口(支持2.0B协议)。 ⑤ 1个USB 2.0全速接口。 ⑥ 1个SDIO接口。 (13) CRC计算单元,96位的芯片唯一代码。 (14) LQFP144封装形式。 (15) 工作温度: -40℃~+105℃。 以上特性,使得STM32F103ZET6非常实用于电机驱动、应用控制、医疗和手持设备、PC和游戏外设、GPS平台、工业应用、PLC、逆变器、打印机、扫描仪、报警系统、空调系统等领域。 3.3STM32F103ZET6的存储器映像 STM32F103ZET6的存储器映像如图34所示。 图34STM32F103ZET6的存储器映像 程序存储器、数据存储器、寄存器和输入/输出端口被组织在同一个4GB的线性地址空间内。可访问的存储器空间被分成8个主要的块,每块为512MB。 数据字节以小端格式存放在存储器中。一个字中的最低地址字节被认为是该字的最低有效字节,而最高地址字节是最高有效字节。 1. STM32F103ZET6内置外设的地址范围 STM32F103ZET6中内置外设的地址范围如表31所示。 表31STM32F103ZET6中内置外设的起始范围 地 址 范 围外设所 在 总 线 0x5000 0000~0x5003 FFFFUSB OTG全速 0x4002 8000~0x4002 9FFF以太网AHB 0x4002 3000~0x4002 33FFCRC 0x4002 2000~0x4002 23FF闪存存储器接口 0x4002 1000~0x4002 13FF复位和时钟控制(RCC) 0x4002 0400~0x4002 07FFDMA2 0x4002 0000~0x4002 03FFDMA1 0x4001 8000~0x4001 83FFSDIOAHB 0x4001 3C00~0x4001 3FFFADC3 0x4001 3800~0x4001 3BFFUSART1 0x4001 3400~0x4001 37FFTIM8定时器 0x4001 3000~0x4001 33FFSPI1 0x4001 2C00~0x4001 2FFFTIM1定时器 0x4001 2800~0x4001 2BFFADC2 0x4001 2400~0x4001 27FFADC1 0x4001 2000~0x4001 23FFGPIO端口G 0x4001 1C00~0x4001 1FFFGPIO端口F 0x4001 1800~0x4001 1BFFGPIO端口E 0x4001 1400~0x4001 17FFGPIO端口D 0x4001 1000~0x4001 13FFGPIO端口C 0x4001 0C00~0x4001 0FFFGPIO端口B 0x4001 0800~0x4001 0BFFGPIO端口A 0x4001 0400~0x4001 07FFEXTI 0x4001 0000~0x4001 03FFAFIOAPB2 0x4000 7400~0x4000 77FFDAC 0x4000 7000~0x4000 73FF电源控制(PWR) 0x4000 6C00~0x4000 6FFF后备寄存器(BKP) 0x4000 6400~0x4000 67FFbxCAN 0x4000 6000~0x4000 63FFUSB/CAN共享的512B SRAM 0x4000 5C00~0x4000 5FFFUSB全速设备寄存器 0x4000 5800~0x4000 5BFFI2C2 0x4000 5400~0x4000 57FFI2C1 0x4000 5000~0x4000 53FFUART5 APB1 续表 地 址 范 围外设所 在 总 线 0x4000 4C00~0x4000 4FFFUART4 0x4000 4800~0x4000 4BFFUSART3 0x4000 4400~0x4000 47FFUSART2 0x4000 3C00~0x4000 3FFFSPI3/I2S3 0x4000 3800~0x4000 3BFFSPI2/I2S2 0x4000 3000~0x4000 33FF独立看门狗(IWDG) 0x4000 2C00~0x4000 2FFF窗口看门狗(WWDG) 0x4000 2800~0x4000 2BFFRTC 0x4000 1400~0x4000 17FFTIM7定时器 0x4000 1000~0x4000 13FFTIM6定时器 0x4000 0C00~0x4000 0FFFTIM5定时器 0x4000 0800~0x4000 0BFFTIM4定时器 0x4000 0400~0x4000 07FFTIM3定时器 0x4000 0000~0x4000 03FFTIM2定时器APB1 以下没有分配给片上存储器和外设的存储器空间都是保留的地址空间: 0x4000 1800~0x4000 27FF、0x4000 3400~0x4000 37FF、0x4000 4000~0x4000 3FFF、0x4000 7800~0x4000FFFF、0x4001 4000~0x4001 7FFF、0x4001 8400~0x4001 7FFF、0x4002 0800~0x4002 0FFF、0x4002 1400~0x4002 1FFF、0x4002 3400~0x4002 3FFF、0x4003 0000~0x4FFF FFFF。 其中每个地址范围的第一个地址为对应外设的首地址,该外设的相关寄存器地址都可以用“首地址+偏移量”的方式找到其绝对地址。 2. 嵌入式SRAM STM32F103ZET6内置64KB的静态SRAM。它可以以字节、半字(16位)或字(32位)访问。SRAM的起始地址是0x2000 0000。 位带 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)。 下面的例子说明如何映射别名区中SRAM地址为0x20000300的字节中的位2: 0x22006008=0x22000000+(0x300×32)+(2×4) 对0x22006008地址的写操作与对SRAM中地址为0x20000300的字节的位2执行读改写操作有着相同的效果。 读0x22006008地址返回SRAM中地址为0x20000300的字节的位2的值(0x01或0x00)。 3. 嵌入式闪存 高达512KB闪存存储器,由主存储块和信息块组成: 主存储块容量为64K×64位,每个存储块划分为256个2KB的页。信息块容量为258×64位。 闪存模块的组织如表32所示。 表32闪存模块的组织 模块名称地址大小/B 主存储块 页00x0800 0000~0x0800 07FF2K 页10x0800 0800~0x0800 0FFF2K 页20x0800 1000~0x0800 17FF2K 页30x0800 1800~0x0800 1FFF2K ……… 页2550x0807 F800~0x0807 FFFF2K 信息块 系统存储器0x1FFF F000~0x1FFF F7FF2K 选择字节0x1FFF F800~0x1FFF F80F16 闪存存储器接口寄存器 FLASH_ACR0x4002 2000~0x4002 20034 FALSH_KEYR0x4002 2004~0x4002 20074 FLASH_OPTKEYR0x4002 2008~0x4002 200B4 FLASH_SR0x4002 200C~0x4002 200F4 FLASH_CR0x4002 2010~0x4002 20134 FLASH_AR0x4002 2014~0x4002 20174 保留0x4002 2018~0x4002 201B4 FLASH_OBR0x4002 201C~0x4002 201F4 FLASH_WRPR0x4002 2020~0x4002 20234 闪存存储器接口的特性为:  带预取缓冲器的读接口(每字为2×64位)。  选择字节加载器。  闪存编程/擦除操作。  访问/写保护。 闪存的指令和数据访问是通过AHB总线完成的。预取模块通过ICode总线读取指令。仲裁作用在闪存接口,并且DCode总线上的数据访问优先。读访问可以有以下配置选项。  等待时间: 可以随时更改的用于读取操作的等待状态的数量。  预取缓冲区(2个64位): 在每一次复位以后被自动打开,由于每个缓冲区的大小(64位)与闪存的带宽相同,因此只通过需一次读闪存的操作即可更新整个缓冲区的内容。由于预取缓冲区的存在,CPU可以工作在更高的主频。CPU每次取指最多为32位的字,取一条指令时,下一条指令已经在缓冲区中等待。 3.4STM32F103ZET6的时钟结构 STM32系列微控制器中,有5个时钟源,分别是高速内部时钟(High Speed Internal,HSI)、高速外部时钟(High Speed External,HSE)、低速内部时钟(Low Speed Internal,LSI)、低速外部时钟(Low Speed External,LSE)、锁相环倍频输出(Phase Locked Loop,PLL)。STM32F103ZET6的时钟系统呈树状结构,因此也称为时钟树,如图35所示。 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处理器的自由运行时钟。 STM32处理器因为低功耗的需要,各模块需要分别独立开启时钟。因此,当需要使用某个外设模块时,务必要先使能对应的时钟。否则,这个外设不能工作。 1. HSE时钟 高速外部时钟信号(HSE)可以由外部晶体/陶瓷谐振器产生,也可以由用户外部时钟产生。一般采用外部晶体/陶瓷谐振器产生HSE时钟。在OSC_IN和OSC_OUT引脚之间连接4~16MHz外部振荡器为系统提供精确的主时钟,具体连接方式如图36所示。 为了减少时钟输出的失真和缩短启动稳定时间,晶体/陶瓷谐振器和负载电容器必须尽可能地靠近振荡器引脚。负载电容值必须根据所选择的振荡器来调整。 2. HSI时钟 HSI时钟信号由内部8MHz的RC振荡器产生,可直接作为系统时钟或在2分频后作为PLL输入。 图35STM32F103ZET6的时钟树本书电路符号未采用国际符号,与国际符号的对应请见附录B。 图36外部晶体的电路连接 HSI RC振荡器能够在不需要任何外部器件的条件下提供系统时钟。它的启动时间比HSE晶体振荡器短。然而,即使在校准之后它的时钟频率精度仍较差。如果HSE晶体振荡器失效,HSI时钟会被作为备用时钟源。 3. PLL 内部PLL可以用来倍频HSI RC的输出时钟或HSE晶体输出时钟。PLL的设置(选择HSI振荡器除2或HSE振荡器为PLL的输入时钟,和选择倍频因子)必须在其被激活前完成。一旦PLL被激活,这些参数就不能被改动。 如果需要在应用中使用USB接口,PLL必须被设置为输出48或72MHz时钟,用于提供48MHz的USBCLK时钟。 4. LSE时钟 LSE晶体是一个32.768kHz的低速外部晶体或陶瓷谐振器。它为实时时钟或者其他定时功能提供一个低功耗且精确的时钟源。 5. LSI时钟 LSI RC担当着低功耗时钟源的角色,它可以在停机和待机模式下保持运行,为独立看门狗和自动唤醒单元提供时钟。LSI时钟频率大约40kHz(在30kHz和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被选为自动唤醒单元(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。 3.5STM32F103VET6的引脚 STM32F103VET6比STM32F103ZET6少了两个口: PF口和PG口,其他资源一样。为了简化描述,后续的内容以STM32F103VET6为例进行介绍。STM32F103VET6采用LQFP100封装,引脚图如图37所示。 图37STM32F103VET6的引脚图 1. 引脚定义 STM32F103VET6的引脚定义如表33所示。 表33STM32F103VET6的引脚定义 引脚 编号引 脚 名 称类型I/O 电平复位后的 主要功能 复 用 功 能 默 认 情 况重映射后 1PE2I/OFTPE2TRACECK/FSMC_A23 2PE3I/OFTPE3TRACED0/FSMC_A19 3PE4I/OFTPE4TRACED1/FSMC_A20 4PE5I/OFTPE5TRACED2/FSMC_A21 5PE6I/OFTPE6TRACED3/FSMC_A22 续表 引脚 编号引 脚 名 称类型I/O 电平复位后的 主要功能 复 用 功 能 默 认 情 况重映射后 6VBATSVBAT 7PC13TAMPERRTCI/OPC13TAMPERRTC 8PC14OSC32_INI/OPC14OSC32_IN 9PC15SC32_OUTI/OPC15OSC32_OUT 10VSS_5SVSS_5 11VDD_5SVDD_5 12OSC_INIOSC_IN 13OSC_OUTOOSC_OUT 14NRSTI/ONRST 15PC0I/OPC0ADC123_IN10 16PC1I/OPC1ADC123_IN11 17PC2I/OPC2ADC123_IN12 18PC3I/OPC3ADC123_IN13 19VSSASVSSA 20VREF-SVREF- 21VREF+SVREF+ 22VDDASVDDA 23PA0WKUPI/OPA0WKUP/USART2_CTS/ADC123_IN0/ TIM2_CH1_ETR/TIM5_CH1/TIM8_ETR 24PA1I/OPA1USART2_RTS/ADC123_IN1/ TIM5_CH2/TIM2_CH2 25PA2I/OPA2USART2_TX/TIM5_CH3/ ADC123_IN2/TIM2_CH3 26PA3I/OPA3USART2_RX/TIM5_CH4/ ADC123_IN3/TIM2_CH4 27VSS_4SVSS_4 28VDD_4SVDD_4 29PA4I/OPA4SPI1_NSS/USART2_CK/DAC_ OUT1/ADC12_IN4 30PA5I/OPA5SPI1_SCK/DAC_OUT2/ADC12_IN5TIM1_BKIN 31PA6I/OPA6SPI1_MISO/TIM8_BKIN/ ADC12_IN6/ TIM3_CH1TIM1_CH1N 32PA7I/OPA7SPI1_MOSI/TIM8_CH1N/ ADC12_IN7/TIM3_CH2 33PC4I/OPC4ADC12_IN14 34PC5I/OPC5ADC12_IN15 35PB0I/OPB0ADC12_IN8/TIM3_CH3/TIM8_CH2NTIM1_CH2N 续表 引脚 编号引 脚 名 称类型I/O 电平复位后的 主要功能 复 用 功 能 默 认 情 况重映射后 36PB1I/OPB1ADC12_IN9/TIM3_CH4/TIM8_CH3NTIM1_CH3N 37PB2I/OFTPB2/BOOT1 38PE7I/OFTPE7FSMC_D4TIM1_ETR 39PE8I/OFTPE8FSMC_D5TIM1_CH1N 40PE9I/OFTPE9FSMC_D6TIM1_CH1 41PE10I/OFTPE10FSMC_D7TIM1_CH2N 42PE11I/OFTPE11FSMC_D8TIM1_CH2 43PE12I/OFTPE12FSMC_D9TIM1_CH3N 44PE13I/OFTPE13FSMC_D10TIM1_CH3 45PE14I/OFTPE14FSMC_D11TIM1_CH4 46PE15I/OFTPE15FSMC_D12TIM1_BKIN 47PB10I/OFTPB10I2C2_SCL/USART3_TXTIM2_CH3 48PB11I/OFTPB11I2C2_SDA/USART3_RXTIM2_CH4 49VSS_1SVSS_1 50VDD_1SVDD_1 51PB12I/OFTPB12SPI2_NSS/I2S2_WS/I2C2_SMBA/ USART3_CK/TIM1_BKIN 52PB13I/OFTPB13SPI2_SCK/I2S2_CK/USART3_CTS/ TIM1_CH1N 53PB14I/OFTPB14SPI2_MISO/TIM1_CH2N/ USART3_RTS/ 54PB15I/OFTPB15SPI2_MOSI/I2S2_SD/TIM1_CH3N 55PD8I/OFTPD8FSMC_D13USART3_TX 56PD9I/OFTPD9FSMC_D14USART3_RX 57PD10I/OFTPD10FSMC_D15USART3_CK 58PD11I/OFTPD11FSMC_A16USART3_CTS 59PD12I/OFTPD12FSMC_A17TIM4_CH1/ USART3_RTS 60PD13I/OFTPD13FSMC_A18TIM4_CH2 61PD14I/OFTPD14FSMC_D0TIM4_CH3 62PD15I/OFTPD15FSMC_D1TIM4_CH4 63PC6I/OFTPC6I2S2_MCK/TIM8_CH1/SDIO_D6TIM3_CH1 64PC7I/OFTPC7I2S3_MCK/TIM8_CH2/SDIO_D7TIM3_CH2 65PC8I/OFTPC8TIM8_CH3/SDIO_D0TIM3_CH3 66PC9I/OFTPC9TIM8_CH4/SDIO_D1TIM3_CH4 67PA8I/OFTPA8USART1_CK/TIM1_CH1/MCO 68PA9I/OFTPA9USART1_TX/TIM1_CH2 69PA10I/OFTPA10USART1_RX/TIM1_CH3 70PA11I/OFTPA11USART1_CTS/USBDM/CAN_RX/TIM1_CH4 续表 引脚 编号引 脚 名 称类型I/O 电平复位后的 主要功能 复 用 功 能 默 认 情 况重映射后 71PA12I/OFTPA12USART1_RTS/USBDP/CAN_TX/TIM1_ETR 72PA13I/OFTJTMSWDIOPA13 73Not connected 74VSS_2SVSS_2 75VDD_2SVDD_2 76PA14I/OFTJTCKSWCLKPA14 77PA15I/OFTJTDISPI3_NSS/I2S3_WSTIM2_CH1_ETR PA15/SPI1_NSS 78PC10I/OFTPC10UART4_TX/SDIO_D2USART3_TX 79PC11I/OFTPC11UART4_RX/SDIO_D3USART3_RX 80PC12I/OFTPC12UART5_TX/SDIO_CKUSART3_CK 81PD0I/OFTOSC_INFSMC_D2CAN_RX 82PD1I/OFTOSC_OUTFSMC_D3CAN_TX 83PD2I/OFTPD2TIM3_ETR/UART5_RX/SDIO_CMD 84PD3I/OFTPD3FSMC_CLKUSART2_CTS 85PD4I/OFTPD4FSMC_NOEUSART2_RTS 86PD5I/OFTPD5FSMC_NWEUSART2_TX 87PD6I/OFTPD6FSMC_NWAITUSART2_RX 88PD7I/OFTPD7FSMC_NE1/FSMC_NCE2USART2_CK 89PB3I/OFTJTDOSPI3_SCK/I2S3_CKPB3/TRACESWO TIM2_CH2/SPI1_SCK 90PB4I/OFTNJTRSTSPI3_MISOPB4/TIM3_CH1 SPI1_MISO 91PB5I/OPB5I2C1_SMBA/SPI3_MOSI/I2S3_SDTIM3_CH2/SPI1_MOSI 92PB6I/OFTPB6I2C1_SCL/TIM4_CH1USART1_TX 93PB7I/OFTPB7I2C1_SDA/FSMC_NADV/TIM4_CH2USART1_RX 94BOOT0IBOOT0 95PB8I/OFTPB8TIM4_CH3/SDIO_D4I2C1_SCL/CAN_RX 96PB9I/OFTPB9TIM4_CH4/SDIO_D5I2C1_SDA/CAN_TX 97PE0I/OFTPE0TIM4_ETR/FSMC_NBL0 98PE1I/OFTPE1FSMC_NBL1 99VSS_3SVSS_3 100VDD_3SVDD_3 注: (1) I=输入(input),O=输出(output),S=电源(supply)。 (2) FT=可忍受5V电压。 2. 启动配置引脚 在STM32F103VET6中,可以通过BOOT[1:0]引脚选择3种不同的启动模式。STM32F103VET6的启动配置如表34所示。 表34STM32F103VET6的启动配置 启动模式选择引脚 BOOT1BOOT0启 动 模 式说明 X0主闪存存储器主闪存存储器被选为启动区域 01系统存储器系统存储器被选为启动区域 11内置SRAM内置SRAM被选为启动区域 系统复位后,在SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。 在从待机模式退出时,BOOT引脚的值将被被重新锁存; 因此,在待机模式下BOOT引脚应保持为需要的启动配置。在启动延迟之后,CPU从地址0x0000 0000获取堆栈顶的地址,并从启动存储器的0x0000 0004指示的地址开始执行代码。 因为固定的存储器映像,代码区始终从地址0x0000 0000开始(通过ICode和DCode总线访问),而数据区(SRAM)始终从地址0x2000 0000开始(通过系统总线访问)。CortexM3的CPU始终从ICode总线获取复位向量,即启动仅适合于从代码区开始(典型地从Flash启动)。STM32F103VET6微控制器实现了一个特殊的机制,系统可以不仅仅从Flash存储器或系统存储器启动,还可以从内置SRAM启动。 根据选定的启动模式,主闪存存储器、系统存储器或SRAM可以按照以下方式访问。  从主闪存存储器启动: 主闪存存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(0x0800 0000)访问它,即闪存存储器的内容可以在两个地址区域访问,0x00000000或0x0800 0000。  从系统存储器启动: 系统存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(互联型产品原有地址为0x1FFF B000,其他产品原有地址为0x1FFF F000)访问它。  从内置SRAM启动: 只能在0x2000 0000开始的地址区访问SRAM。从内置SRAM启动时,在应用程序的初始化代码中,必须使用NVIC的异常表和偏移寄存器,重新映射向量表到SRAM中。 内嵌的自举程序: 内嵌的自举程序存放在系统存储区,由ST在生产线上写入,用于通过串行接口USART1对闪存存储器进行重新编程。 3.6STM32F103VET6最小系统设计 STM32F103VET6最小系统是指能够让STM32F103VET6正常工作的包含最少元器件的系统。STM32F103VET6片内集成了电源管理模块(包括滤波复位输入、集成的上电复位/掉电复位电路、可编程电压检测电路)、8MHz高速内部RC振荡器、40kHz低速内部RC振荡器等部件,外部只需7个无源器件就可以让STM32F103VET6工作。然而,为了使用方便,在最小系统中加入了USB转TTL串口、发光二极管等功能模块。在最小系统中,包含以下模块。 1. 最小系统核心电路原理图 最小系统核心电路原理图如图38所示。其中包括了复位电路、晶体振荡电路和启动设置电路。 图38STM32F103VET6的最小系统核心电路原理图 1) 复位电路 STM32F103VET6的NRST引脚输入驱动使用CMOS工艺,它连接了一个不能断开的上拉电阻Rpu,其典型值为40kΩ。外部连接了一个上拉电阻R4、按键RST及电容C5,当RST按键按下时NRST引脚电位变为0,通过这个方式实现手动复位。 2) 晶体振荡电路 STM32F103VET6一共外接了两个晶振: 一个8MHz的晶振X1提供给高速外部时钟(HSE),一个32.768kHz的晶振X2提供给低速外部时钟(LSE)。 3) 启动设置电路 启动设置电路有启动设置引脚BOOT1和BOOT0构成。二者均通过10kΩ的电阻接地。从用户Flash启动。 4) JTAG接口电路 为了方便系统采用JLink仿真器进行下载和在线仿真,在最小系统中预留了JTAG接口电路用来实现STM32F103VET6与JLink仿真器进行连接。JTAG接口电路原理图如图39所示。 图39JTAG接口电路 2. USB转TTL串口 为了方便系统采用串口下载,在最小系统中,以CH340G为核心设计了USB转TTL串口,并从USB接口中获得+5V电源。使用两个切换开关,可以选择使用USB还是UART,使用串口进行通信时,选择UART功能。电路原理图如图310所示。 图310USB转TTL串口电路 3. 独立按键电路 为了实现外部中断检测功能和待机唤醒功能,在最小系统中设置了一个独立按键,该按键接在PA0。电路原理图如图311所示。 4. ADC采集电路 为了实现ADC采集功能,在最小系统中集成了一个光敏电阻,通过将SW4开关拨到ON将ADC采集通道接到PA1,通过STM32F103VET6的ADC采集功能可以实现对光敏电阻阻值的计算。电路原理图如图312所示。 图311独立按键电路 图312ADC采集电路 5. 流水灯电路 最小系统板载16位流水灯,对应STM32F103VET6的PE0~PE15,通过将SW3开关拨到ON给LED提供电源。电路原理图如图313所示。 图313流水灯电路 6. 电源电路 最小系统电源可以由外部电源、USB电源和JLink电源提供,通过稳压电路得到3.3V电源提供给STM32F103VET6和其他外部电路。电路原理图如图314所示。 图314电源电路 为了便于读者将最小系统应用于其他实验项目或者工程项目,将所有的IO引脚引出。利用STM32F103VET6最小系统,可以进行基本功能的学习和测试。 3.7习题 31简述CortexM3处理器的特点。 32STM32F103VET6的存储器结构有什么特点? 33STM32F103VET6的时钟结构对于系统的功耗控制有什么作用?