第3章 STM32系列微控制器 本章对STM32微控制器进行概述,内容包括STM32F407ZGT6概述、STM32F407ZGT6芯片内部结构、STM32F407VGT6芯片引脚和功能和最小系统设计。 3.1STM32 微控制器概述 STM32是意法半导体(STMicroelectronics)公司较早推向市场的基于CortexM内核的微处理器系列产品,该系列产品具有成本低、功耗优、性能高、功能多等优势,并且以系列化方式推出,方便用户选型,在市场上获得了广泛好评。 目前常用的STM32有STM32F103~107系列,简称“1系列”,ST公司推出的高端系列STM32F4xx,简称“4系列”。前者基于CortexM3内核,后者基于CortexM4内核。 CortexM4处理器是由Arm公司专门开发的嵌入式处理器,在CortexM3处理器的基础上强化了运算能力,新增了浮点、DSP、并行计算等,用于满足需要控制和信号处理混合功能的数字信号控制市场。CortexM4 处理器将32位控制与领先的数字信号处理技术集成,用于满足需要很高能效级别的市场。高效的信号处理功能与CortexM系列处理器的低功耗、低成本和易于使用的优点的组合,旨在满足专门面向电动机控制、汽车、电源管理、嵌入式音频和工业自动化市场的新兴类别的灵活解决方案。 CortexM4处理器已设计具有适用于数字信号控制市场的多种高效信号处理功能。 CortexM4处理器在很多地方和CortexM3处理器相同,如流水线、编程模型等。CortexM4处理器支持CortexM3处理器的所有功能,并额外支持各种面向DSP应用的指令,如 扩展的单周期乘累加单元 (Multiply and Accumulate Cell,MAC)指令、优化的SIMD(Single Instruction,Multiple Data,即一条指令操作多个数据)指令、饱和运算指令和一个可选的单精度浮点单元(Single precision floating point unit,FPU)。 CortexM4处理器的SIMD操作可以并行处理两个16位数据和4个8位数据。在某些DSP运算中,使用SIMD指令可以加速计算16位和8位数据,因为这些运算可以并行处理。但是,一般的编程中,C编译器并不能充分利用SIMD运算能力,这是CortexM3 处理器和CortexM4处理器典型Benchmark(基准)分数差不多的原因。然而,CortexM4 处理器的内部数据通路和CortexM3处理器的内部数据通路不同,在某些情况下CortexM4处理器可以处理得更快(如单周期MAC指令,可以在一个周期中写回到两个寄存器)。 CortexM4的处理器架构采用哈佛结构,为系统提供3套总线,独立发起总线传输读写操作。这3套总线分别是: ICode总线,用于取指令; DCode总线,用于操作数据; 系统总线,用于访问其他系统空间,包括指令、数据访问,CPU及调试模块发起的访问和支持位访问。 CortexM4是32位系统,总线宽度是32位,一次取一条32位指令。若是16位的Thumb指令,则处理器每隔一个周期做一次取指,一次能够取两条16位的Thumb指令。CortexM4支持三级流水线: 取指、译码和执行。当执行跳转指令 时,整个流水线会刷新,重新从目的地址取指令。CortexM4采用分支预测,以避免流水线气泡(Bubble)过大。 CortexM4 处理器架构如图31所示。 图31CortexM4 处理器架构 CortexM4处理器实现基于Thumb2技术的Thumb指令集版本,确保高代码密度和降低程序内存需求。CortexM4处理器紧密集成了一个可配置的嵌套中断控制器,以提供领先的中断性能。中断包括不可屏蔽中断等,提供多达256个中断优先级。CortexM4处理器提供了一个可选的内存保护单元,它提供细粒度内存控制,使应用程序能够利用多个特权级别,根据任务分离和保护代码、数据和堆栈。 CortexM4内核仅仅是一个CPU内核,而一个完整的微控制器还需要集成除内核外的很多其他组件。芯片生产商在得到CortexM4内核的使用授权后,可以把CortexM4内核用在自己的芯片设计中,添加存储器、片上外设、I/O及其他功能块。CortexM4系列微控制器内部构造如图32所示。不同厂家设计的微控制器会有不同的配置,存储器容量、类型、外设等都各具特色。如果想要了解某个具体型号的微控制器,还需查阅相关厂家提供的文档。很多领先的MCU半导体公司已经获得CortexM4内核授权,并已有很多成熟的微控制器产品,其中包括ST公司(STM32F4系列微控制器)、恩智浦(LPC4000系列微控制器)和德州仪器(TM4C系列微控制器)等。 图32CortexM4系列微控制器内部构造 STM32F4xx系列在以下诸多方面进行了优化: (1) 增加了浮点运算; (2) 具有数字信号处理器(DSP)功能; (3) 存储空间更大,高达1MB以上; (4) 运算速度更高,以168MHz高速运行时处理能力可达到210DMIPSDMIPS即Dhrystone Million Instructions executed Per Second,主要用于衡量整数计算能力。; (5) 新增更高级的外设,如照相机接口、加密处理器、USB 高速OTG 接口等,提高性能,具有更快的通信接口、更高的采样率、带FIFO的DMA控制器。 STM32系列单片机具有以下优点。 1. 先进的内核结构 (1) 哈佛结构使其在处理器整数性能测试上有着出色的表现,运行速度可以达到1.25DMIPS/MHz,而功耗仅为0.19mW/MHz。 (2) Thumb2指令集以16位的代码密度带来了32位的性能。 (3) 内置了快速的中断控制器,提供了优越的实时特性,中断的延迟时间降到只需6个CPU周期,从低功耗模式唤醒的时间也只需6个CPU周期。 (4) 具有单周期乘法指令和硬件除法指令。 2. 3种功耗控制 STM32经过特殊处理,针对应用中3种主要的能耗要求进行了优化,这3种能耗要求分别是运行模式下高效率的动态耗电机制、待机状态时极低的电能消耗和电池供电时的低电压工作能力。因此,STM32提供了3种低功耗模式和灵活的时钟控制机制,用户可以根据自己所需要的耗电/性能要求进行合理优化。 3. 最大程度地集成整合 (1) STM32内嵌电源监控器,包括上电复位、低电压检测、掉电检测和自带时钟的看门狗定时器,减少对外部器件的需求。 (2) 使用一个主晶振可以驱动整个系统。低成本的25MHz晶振即可驱动CPU、USB以及所有外设,使用内嵌锁相环(Phase Locked Loop,PLL)产生多种频率,可以为内部实时时钟选择32kHz的晶振。 (3) 内嵌出厂前调校好的8MHz RC振荡电路,可以作为主时钟源。 (4) 拥有针对实时时钟(Real Time Clock,RTC)或看门狗的低频率RC电路。 (5) LQPF100封装芯片的最小系统只需要7个外部无源器件。 因此,使用STM32可以很轻松地完成产品的开发。ST公司提供了完整、高效的开发工具和库函数,帮助开发者缩短系统开发时间。 4. 出众及创新的外设 STM32的优势来源于两路高级外设总线,连接到该总线上的外设能以更高的速度运行。 (1) USB接口速度可达12Mb/s。 (2) USART接口速度高达4.5Mb/s。 (3) SPI速度可达37.5Mb/s。 (4) I2C接口速度可达400kHz。 (5) 通用输入输出(General Purpose Input Output,GPIO)的最大翻转频率为84MHz。 (6) 脉冲宽度调制(Pulse Width Modulation,PWM)定时器最高可使用168MHz时钟输入。 3.1.1STM32微控制器产品介绍 目前,市场上常见的基于CortexM3的MCU有ST公司的STM32F103微控制器、德州仪器公司(TI)的LM3S8000微控制器和恩智浦公司(NXP)的LPC1788微控制器等,基于CortexM4的MCU有 ST公司的STM32F407和STM32F429微控制器,其应用遍及工业控制、消费电子、仪器仪表、智能家居等各个领域。 ST公司于1987年6月成立,是由意大利的SGS微电子公司和法国THOMSON半导体公司合并而成。1998年5月,改名为意法半导体有限公司(简称ST公司),是世界最大的半导体公司之一。从成立至今,ST公司的增长速度超过了半导体工业的整体增长速度。自1999年起, ST公司始终是世界十大半导体公司之一。据 工业统计数据,ST公司是全球第五大半导体厂商,在很多领域居世界领先水平。例如, 它是世界第一大专用模拟芯片和电源转换芯片制造商,世界第一大工业半导体和机顶盒芯片供应商,而且在分立器件、手机相机模块和车用集成电路领域居世界前列。 在诸多半导体制造商中,ST公司是较早在市场上推出基于CortexM内核的MCU产品的公司,其根据CortexM内核设计生产的STM32微控制器充分发挥了低成本、低功耗、高性价比的优势,以系列化的方式推出,方便用户选择,受到了广泛的好评。 STM32系列微控制器适合的应用有替代绝大部分8/16位MCU的应用、替代目前常用的32位MCU(特别是Arm7)的应用、小型操作系统相关的应用以及简单图形和语音相关的应用等。 STM32系列微控制器不适合的应用有程序代码大于1MB的应用、基于Linux或Android的应用、基于高清或超高清的视频应用等。 STM32系列微控制器的产品线包括高性能类型、主流类型和超低功耗类型三大类,分别面向不同的应用,如图33所示。 图33STM32系列微控制器产品线 1. STM32F1系列(主流类型) STM32F1系列微控制器基于CortexM3内核,利用一流的外设和低功耗、低压操作实现了高性能,同时以可接受的价格,利用简单的架构和简便易用的工具实现了高集成度,能够满足工业、医疗和消费类市场的各种应用需求。凭借该产品系列,ST 公司在全球基于Arm CortexM3的微控制器领域处于领先地位。 2. STM32F0系列(主流类型) STM32F0系列微控制器基于CortexM0内核,在实现32位性能的同时,传承了STM32系列的重要特性。它集实时性能、低功耗运算和与STM32平台相关的先进架构及外设于一身,将全能架构理念变成了现实,特别适合成本敏感型应用。 3. STM32F4系列(高性能类型) STM32F4系列微控制器基于CortexM4内核,采用了 ST公司的90nm非易失性存储器 (Non Volatile Memory,NVM)工艺和 自适应实时(Adaptive Real Time,ART)加速器,在高达180MHz的工作频率下通过Flash执行时,其处理性能达到225DMIPS/608CoreMark。由于采用了动态功耗调整功能,通过Flash执行时的电流消耗范围为STM32F401的128μA/MHz到STM32F439的260μA/MHz。 4. STM32F7系列(高性能类型) STM32F7是一款基于CortexM7内核的微控制器。它采用6级超标量流水线和浮点单元,并利用 ART加速器和L1缓存,实现了CortexM7的最大理论性能——无论是从嵌入式 Flash还是外部存储器执行代码,都能在216MHz处理器频率下使性能达到462DMIPS/1082CoreMark。由此可见,相对于 ST公司以前推出的高性能微控制器,如STM32F2、STM32F4系列,STM32F7系列的优势就在于其强大的运算性能,能够适用于那些对于高性能计算有巨大需求的应用,对于可穿戴设备和健身应用来说,将会带来革命性的颠覆,起到巨大的推动作用。 3.1.2STM32系统性能分析 下面对STM32系统性能进行分析。 (1) Arm CortexM4内核。 与8/16位设备相比,Arm CortexM4 32位RISC处理器提供了更高的代码效率。STM32F407xx微控制器带有一个嵌入式的Arm核,可以兼容所有Arm工具和软件。 (2) 嵌入式Flash和SRAM。内置多达1024KB的嵌入式Flash,可用于存储程序和数据; 多达192KB的嵌入式SRAM可以以CPU的时钟速度进行读/写。 (3) 可变静态存储器(Flexible Static Memory Controller,FSMC)。FSMC 嵌入在STM32F407xx中,带有4个片选,支持5种模式: Flash、RAM、PSRAM、NOR和NAND。 (4) 嵌套向量中断控制器(NVIC)。可以处理43个可屏蔽中断通道(不包括CortexM3的16根中断线),提供16个中断优先级。紧密耦合的NVIC实现了更低的中断处理延时,直接向内核传递中断入口向量表地址。紧密耦合的NVIC内核接口允许中断提前处理,对后到的更高优先级的中断进行处理,支持尾链,自动保存处理器状态,中断入口在中断退出时自动恢复,不需要指令干预。 (5) 外部中断/事件控制器(EXTI)。外部中断/事件控制器由23根用于产生中断/事件请求的边沿探测器线组成。每根线可以被单独配置用于选择触发事件(上升沿、下降沿,或者两者都可以),也可以被单独屏蔽。有一个挂起寄存器维护中断请求的状态。当外部线上出现长度超过内部 高级外围总线(Advanced Peripheral Bus,APB)APB2时钟周期的脉冲时,EXTI能够探测到。多达112个GPIO连接到16根外部中断线。 (6) 时钟和启动。在系统启动 时要进行系统时钟选择,但复位时内部8MHz的晶振被选作CPU时钟。可以选择一个外部的25MHz时钟,并且会被监视判定是否成功。在这期间,控制器被禁止并且软件中断管理也随后被禁止。同时,如果有需要( 如碰到一个间接使用的晶振失败),PLL时钟的中断管理完全可用。多个预比较器可以用于配置 高性能总线(Advanced High performance Bus,AHB)频率,包括高速APB(APB2)和低速APB(APB1),高速APB最高的频率为 168MHz,低速APB最高的频率为84MHz。 (7) Boot模式。 在启动时,Boot引脚被用来在3种Boot选项中选择一种: 从用户Flash导入、从系统存储器导入、从SRAM导入。Boot导入程序位于系统存储器,用于通过USART1重新对Flash存储器编程。 (8) 电源供电方案。VDD电压范围为3.0~3.6V,外部电源通过VDD引脚提供,用于I/O和内部调压器。VSSA和VDDA电压范围为2.0~3.6V,外部模拟电压输入,用于ADC(模/数转换器)、复位模块、RC和PLL,在VDD范围之内(ADC被限制在2.4V),VSSA和VDDA必须相应连接到VSS和VDD引脚。VBAT 电压范围为1.8~3.6V,当VDD无效时为RTC(实时时钟,Real Time Clock),外部32kHz晶振和备份寄存器供电(通过电源切换实现)。 (9) 电源管理。设备有一个完整的上电复位(POR)和掉电复位(PDR)电路。这个电路一直有效,用于确保电压从2V启动或掉到2V时进行一些必要的操作。 (10) 电压调节。调压器有3种运行模式,分别为主(MR)模式、低功耗(LPR)模式和掉电模式。MR模式用在传统意义上的调节模式(运行模式),LPR模式用在停止模式,掉电模式用在待机模式。调压器输出为高阻,核心电路掉电,包括零消耗(寄存器和SRAM的内容不会丢失)。 (11) 低功耗模式。STM32F407xx支持3种低功耗模式,从而在低功耗、短启动时间和可用唤醒源之间达到一个最好的平衡点。 3.1.3CortexM4的三级流水线 流水线技术通过多个功能部件并行工作缩短指令的运行时间,提高系统的效率和吞吐率。 一条指令的执行可以分解为多个阶段,各个阶段使用的硬件部件不同,这样指令执行就可以重叠,实现多条指令并行处理。指令的执行还是顺序的,但是可以在前一条指令未执行完成时,提前执行后面的指令,并与前面的指令不冲突,以加快整个程序的执行速度。 随着流水线级数的增加,可简化流水线各级的逻辑,进一步提高处理器的性能。但是,由于流水线级数的增加,会增加系统的延迟,即内核在执行一条指令之前,需要更多的周期填充流水线。过多的流水线级数常常会削弱指令的执行效率。 例如,一条指令的下一条指令需要该条指令的执行结果作为输入,那么下一条指令只能等待这条指令执行完成后才能执行。再如,若出现跳转指令,普通的流水线处理器要付出更大的代价。 Arm微处理器种类繁多,其中不同系列使用的流水线级别也不尽相同,不过大致可以分为三级流水线、五级流水线和超流水 线。其中,三级流水线的实现逻辑最简单,五级流水线的实现逻辑最经典,超流水线的实现逻辑最复杂。从理论上说,流水线深度越深的处理器执行效率就越高,不过执行的逻辑也越复杂,需要解决的冲突也越多。 流水线技术提高了CPU的吞吐量,但并没有降低每条指令的延迟。所谓延迟,是指一条指令从进入流水线到流出流水线所花费的时间; 而吞吐量是指单位时间内执行的指令数。 CortexM4是一个32位处理器内核,采用哈佛架构,支持Thumb、Thumb2指令集。CortexM4 使用的是三级流水线 : 取指、译码和执行,如图34所示。 图34CortexM4的三级流水线 1. 取指阶段 取指(Fetch)用来计算下一个预取指令的地址,从指令存储空间中取出指令,或者自动加入中断向量。在此阶段还包含一个预取指缓冲区,允许后续指令在执行之前在缓冲区中排队。也可以对非对齐的指令进行自动对齐,避免流水线的“断流”。因为CortexM4支持16位的Thumb 指令和32位的Thumb2指令,通过在预取指缓冲区中进行自动对齐确定指令的边界。缓冲区有3个字长,可以缓存6个Thumb指令或3个Thumb2指令。该缓冲区不会在流水线中添加额外的级数,因此不会使跳转导致的性能下降更加恶化。由于CortexM4总线宽度为32位,所以一次读取32位的指令。如果代码都是16位的Thumb指令,那么处理器会每隔一个时钟周期进行取指,每次读取两条Thumb指令。如果缓冲区满了,那么指令缓冲区会暂停对指令的加载。 2. 译码阶段 译码(Decode)是对之前取指阶段送入的指令进行解码操作,分解出指令中的操作数和执行码,再由操作数相应的寻址方式生成操作数的加载/存储单元 (Load/Store Unit,LSU)地址,产生寄存器值。如果操作数存储在外部存储器中,则可以由 地址生成单元(Address Generation Unit,AGU)产生此操作数的访问地址。如果操作数存储在寄存器中,那么在此阶段直接读取操作数。 3. 执行阶段 执行(Execute)用于执行指令,指令包括加减乘除四则运算、逻辑运算、加载外部存储器操作数、产生LSU的回写执行结果等。 如图34所示,在译码和执行阶段都可以产生跳转操作。当执行到跳转指令时,需要清理流水线,处理器将不得不从跳转的目的地重新取指,这样会影响代码执行效率。 CortexM4处理器内核引入了分支预测技术,分支预测在指令的译码阶段就会预测是否会发生跳转,在取指阶段会自动加载预测后的指令,如果预测正确将不会产生流水线断流。许多算法都需要对指令反复执行运算,简单的分支预测有利于提高代码执行效率。 3.1.4STM32微控制器的命名规则 ST公司在推出一系列基于CortexM内核的STM32微控制器产品线的同时,也制定了它们的命名规则。通过名称,用户能直观、迅速地了解某款具体型号的STM32微控制器产品。STM32系列微控制器的名称主要由以下几部分组成。 1. 产品系列名 STM32系列微控制器名称通常以STM32开头,表示产品系列,代表ST公司基于Arm CortexM系列内核的32位MCU。 2. 产品类型名 产品类型是STM32系列微控制器名称的第二部分,通常有F(Flash Memory,通用快速闪存)、W(无线系统芯片)、L(低功耗低电压,1.65~3.6V)等类型。 3. 产品子系列名 产品子系列是STM32系列微控制器名称的第三部分。 例如,常见的STM32F产品子系列有050(Arm CortexM0内核)、051(Arm CortexM0内核)、100(Arm CortexM3内核 ,超值型)、101(Arm CortexM3内核,基本型)、102(Arm CortexM3内核,USB基本型)、103(Arm CortexM3内核,增强型)、105(Arm CortexM3内核,USB互联网型)、107(Arm CortexM3内核,USB互联网型和以太网型)、108(Arm CortexM3内核,IEEE 802.15.4标准)、151(Arm CortexM3内核,不带LCD)、152/162(Arm CortexM3 内核,带LCD)、205/207(Arm CortexM3内核,摄像头)、215/217(Arm CortexM3内核,摄像头和加密模块)、405/407(Arm CortexM4内核,MCU+FPU,摄像头)、415/417(Arm CortexM4内核,MCU+FPU,加密模块和摄像头)等。 4. 引脚数 引脚数是STM32系列微控制器名称的第四部分,通常有以下几种: 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系列微控制器名称的第五部分,通常以下几种: 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系列微控制器名称的第六部分,通常有以下几种: T(LQFP,薄型四侧引脚扁平封装),H(BGA,球栅阵列封装)、U(VFQFPN,超薄细间距四方扁平无铅封装),Y(WLCSP,晶圆片级芯片规模封装)。 7. 温度范围 温度范围是STM32系列微控制器名称的第七部分,通常有以下两种: 6(-40~85℃,工业级)和7(-40~105℃,工业级)。 STM32F407微控制器的命名规则如图35所示。 图35STM32F407微控制器的命名规则 通过命名规则,用户能直观、迅速地了解某款具体型号的微控制器产品。例如,本书后续部分主要介绍的微控制器STM32F407ZGT6,其中,STM32代表 ST公司基于Arm CortexM系列内核的32位MCU,F代表通用 快速闪存型,407代表基于Arm CortexM4内核的高性能子系列,Z代表144个引脚,G代表大容量 1MB Flash,T代表LQFP 封装方式,6代表-40~85℃的工业级温度范围。 3.1.5STM32F1和STM32F4的区别 STM32F1和STM32F4的区别如下。 (1) STM32F1采用CortexM3内核,STM32F4采用CortexM4内核。 (2) STM32F1最高主频为72MHz,STM32F4最高主频为168MHz。 (3) STM32F4具有单精度浮点运算单元,STM32F1没有浮点运算单元。 (4) STM32F4具备增强的DSP指令集。STM32F4执行16位DSP指令的时间只有STM32F1的30%~70% ; 执行32位DSP指令的时间只有STM32F1的25%~60%。 (5) STM321内部SRAM最大为64KB,STM32F4内部SRAM为192KB(112KB+64KB+16KB)。 (6) STM32F4有备份域SRAM(通过VBAT供电保持数据),STM32F1没有备份域SRAM。 (7) STM32F4从内部SRAM和外部FSMC存储器执行程序的速度比STM32F1快很多。STM32F1的指令总线IBUS只接到Flash上,从SRAM和FSMC取指令只能通过SBUS,速度较慢。STM32F4的IBUS不但连接到Flash上,而且还连接到SRAM和FSMC上,从而加快从SRAM或FSMC取指令的速度。 (8) STM32F1最大封装为144脚,可提供112个GPIO; STM32F4最大封装为176脚,可提供140个GPIO。 (9) STM32F1的GPIO内部上下拉电阻配置仅对输入模式有用,输出时无效。而STM32F4的GPIO在设置为输出模式时,上下拉电阻的配置依然有效。即STM32F4可以配置为开漏输出,内部上拉电阻使能,而STM32F1没有此功能。 (10) STM32F4的GPIO最高翻转速度为84MHz,STM32F1最大翻转速度只有18MHz。 (11) STM32F1最多可提供5个UART串口,STM32F4最多可以提供6个UART串口。 (12) STM32F1可提供两个I2C接口,STM32F4可提供3个I2C接口。 (13) STM32F1和STM32F4都具有3个12位的独立ADC,STM32F1可提供21个输入通道,STM32F4可以提供24个输入通道。STM32F1的ADC最大采样频率为 1MSPSMSPS即Million Samples per Second。,两路交替采样可到2MSPS(STM32F1不支持3路交替采样)。STM32F4的ADC最大采样频率为2.4MSPS,3路交替采样可到7.2MSPS。 (14) STM32F1只有12个DMA通道,STM32F4有16个DMA通道。STM32F4的每个DMA通道有4×32位FIFO,STM32F1没有FIFO。 (15) STM32F1的SPI时钟最高速度为 18MHz,STM32F4可以到37.5MHz。 (16) STM32F1没有独立的32位定时器(32位需要级联实现),STM32F4的TIM2和TIM5具有32位上下计数功能。 (17) STM32F1和STM32F4都有两个I2S接口,但是STM32F1的I2S只支持半双工 ,而STM32F4的I2S支持全双工。 3.1.6STM32微控制器的选型 在微控制器选型过程中,工程师常常会陷入这样一个困局: 一方面抱怨8位/16位微控制器有限的指令和性能,另一方面抱怨32位处理器的高成本和高功耗。能否有效地解决这个问题,让工程师不必在性能、成本、功耗等因素中作出取舍和折中? 通过前面的介绍,我们已经大致了解了STM32微控制器的分类和命名规则。在此基础上,根据实际情况的具体需求,可以大致确定所要选用的STM32微控制器的内核型号和产品系列。例如,一般的工程应用的数据运算量不是特别大,基于CortexM3内核的STM32F1系列微控制器即可满足要求; 如果需要进行大量的数据运算,且对实时控制和数字信号处理能力要求很高,或者需要外接RGB大屏幕,则推荐选择基于CortexM4内核的STM32F4系列微控制器。 确定好产品线之后,即可选择具体的型号。参照STM32微控制器的命名规则,可以先确定微控制器的引脚数目。引脚多的微控制器的功能相对多一些,当然价格也贵一些,具体要根据实际应用中的功能需求进行选择,一般够用就好。确定好了引脚数目之后再选择Flash容量的大小。对于STM32微控制器,具有相同引脚数目的微控制器会有不同的Flash容量可供选择,它也要根据实际需要进行选择,程序大就选择容量大的Flash,一般也是够用即可。到这里,根据实际的应用需求,确定了所需的微控制器的具体型号,下一步的工作就是开发相应的应用。 除了可以选择STM32外,还可以选择国产芯片。Arm技术发源于国外,但通过研究人员十几年的研究和开发,我国的Arm微控制器技术已经取得了很大的进步,国产品牌已获得了较高的市场占有率,相关的产业也在逐步发展壮大之中。 (1) 兆易创新于2005年在北京成立,是一家领先的无晶圆厂半导体公司,致力于开发先进的存储器技术和IC解决方案。该公司的核心产品线为Flash、32位通用型 MCU及智能人机交互传感器芯片及整体解决方案,产品以“高性能、低功耗”著称,为工业、汽车、计算、消费类电子、物联网、移动应用以及网络和电信行业的客户提供全方位服务。与STM32F103兼容的产品为GD32VF103。 (2) 华大半导体是中国电子信息产业集团有限公司(CEC)旗下专业的集成电路发展平台公司,围绕汽车电子、工业控制、物联网三大应用领域,重点布局控制芯片、功率半导体、高端模拟芯片和安全芯片等, 形成竞争力强劲的产品矩阵及全面的整体芯片解决方案。可以选择的Arm微控制器有HC32F0、HC32F1和HC32F4系列。 学习嵌入式微控制器的知识,掌握其核心技术,了解这些技术的发展趋势,有助于为我国培养该领域的后备人才,促进我国在 微控制器技术上的长远发展,为国产品牌的发展注入新的活力。在学习中,应注意知识学习、能力提升、价值观塑造的有机结合,培养自力更生、追求卓越的奋斗精神和精益求精的工匠精神,树立民族自信心,为实现中华民族的伟大复兴贡献力量。 3.2STM32F407ZGT6概述 与其他单片机一样,STM32是一个单片计算机或单片微控制器。所谓单片,就是在一枚芯片上集成了计算机或微控制器该有的基本功能部件。这些功能部件通过总线连在一起。就STM32 而言,这些功能部件主要包括CortexM 内核、总线、系统时钟发生器、复位电路、程序存储器、数据存储器、中断控制、调试接口以及各种功能部件(外设)。不同的芯片系列和型号,外设的数量和种类也不同,常用的基本功能部件(外设)有输入/输出接口(GPIO)、定时/计数器 (Timer/Counter)、通用同步/异步收发器 (Universal Synchronous/Asynchronous Receiver/Transmitter,USART)、串行总线I2C和SPI或I2S、SD卡接口SDIO、USB接口等。 STM32F407属于STM32F4系列微控制器,采用了最新的168MHz的CortexM4处理器内核,可取代当前基于微控制器和中低端独立数字信号处理器的双片解决方案,或者将两者整合成一个基于标准内核的数字信号控制器。微控制器与数字信号处理器整合还可以提高能效,让用户使用支持STM32的强大研发生态系统。STM32全系列产品在引脚、软件和外设上相互兼容,并配有巨大的开发支持生态系统,包括例程、设计IP、低成本的探索工具和第三方开发工具,可提升设计系统扩展和软、硬件再用的灵活性,使STM32平台的投资回报率最大化。因此,STM32F407微控制器的相关结构、原理及使用方法适用于其他STM32F4系列微控制器,对于使用相同封装形式和相同功能的片上外设应用,代码和电路可以共用。 3.2.1STM32F407的主要特性 STM32F407的主要特性如下。 (1) 内核。带有FPU的Arm 32位 CortexM4 CPU,在Flash中实现零等待状态运行性能的自适应实时加速器(ART加速器),主频高达168MHz, 具有内存保护单元(Memory Protection Unit,MPU),能够实现高达210DMIPS即1.25DMIPS/MHz (Dhrystone 2.1)的性能,具有DSP 指令集。 (2) 存储器。 高达1MB的Flash,组织为两个区,可读写同步; 高达192KB+4KB的SRAM,包括64KB的CCM(内核耦合存储器)数据RAM; 具有高达32位数据总线的灵活外部存储控制器: SRAM、 PSRAM、 SDRAM/LPSDR SDRAM、Compact Flash/NOR/NAND存储器。 (3) LCD 并行接口,兼容 8080/6800 模式。 (4) LCDTFT 控制器具有高达XGA 的分辨率,具有专用的 ChromART Accelerator,用于增强的图形内容创建(DMA2D)。 (5) 时钟、复位和电源管理。 ① 1.7~3.6V供电和I/O。 ② 上电复位(Power On Reset,POR)、 掉电复位(Power Down Reset,PDR)、 可编程电压检测器(Programmable Voltage Detector,PVD)和 欠压复位(Brownout Reset,BOR)。 ③ 4~26MHz晶振。 ④ 内置经工厂调校的16MHz RC振荡器(1%精度)。 ⑤ 带校准功能的32kHz RTC振荡器。 ⑥ 内置带校准功能的32kHz RC振荡器。 (6) 低功耗。 ① 具有睡眠、停机和待机模式。 ② VBAT可为RTC、20×32位备份寄存器+可选的4KB备份SRAM供电。 (7) 3个12位2.4MSPS ADC。多达24通道,三重交叉模式下的性能高达7.2MSPS。 (8) 两个12位DAC。 (9) 通用DMA: 具有FIFO和突发支持的16路DMA控制器。 (10) 12个16位定时器和两个频率高达168MHz的32位定时器,每个定时器都带有4个输入捕获/输出比较/PWM或脉冲计数器与正交(增量)编码器输入。 (11) 调试模式。 ① SWD & JTAG 接口。 ② CortexM4 跟踪宏单元。 (12) 多达140个具有中断功能的I/O端口。 ① 高达136个快速I/O,最高84MHz。 ② 高达138个可耐5V的I/O。 (13) 多达15个通信接口。 ① 3个I2C接口(SMBus/PMBus)。 ② 4个USART和两个UART(10.5Mb/s,ISO 7816接口,LIN,IrDA,调制解调器控制)接口。 ③ 3个SPI(37.5Mb/s),两个可以复用的全双工I2S,通过内部音频PLL或外部时钟达到音频级精度。 ④ 两个CAN(2.0B主动)以及SDIO接口。 (14) 高级连接功能。 ① 具有片上PHY的USB 2.0全速器件/主机/OTG控制器。 ② 具有专用DMA,片上全速PHY和ULPI的USB 2.0高速/全速器件/主机/OTG控制器。 ③ 具有专用DMA的10/100以太网MAC,支持IEEE 1588v2硬件,MII/RMII接口。 (15) 8~14位并行照相机接口,速度高达54MB/s。 (16) 真随机数发生器。 (17) CRC 计算单元。 (18) RTC: 亚秒级精度,硬件日历。 (19) 96位唯一 ID。 3.2.2STM32F407的主要功能 STM32F407xx器件基于高性能的Arm CortexM4 32位RISC内核,工作频率高达168MHz。CortexM4内核带有单精度浮点运算单元(FPU),支持所有Arm单精度数据处理指令和数据类型。它还具有一组DSP指令和 一个提高应用安全性的存储器保护单元(MPU)。 STM32F407xx 器件集成了高速嵌入式存储器(Flash和SRAM的容量分别高达2MB和256KB)和高达4KB的后备SRAM,以及大量连至两条APB总线、两条AHB总线和一个32位多AHB总线矩阵的增强型I/O与外设。 所有型号均带有3个12位ADC、两个DAC、一个低功耗RTC、12个通用16位定时器(包括两个用于电机控制的PWM定时器)、两个通用32位定时器。 STM32F407xx还带有标准与高级通信接口,主要功能如下。 (1) 高达3个I2C。 (2) 3个SPI和两个全双工I2S。为达到音频级的精度,I2S 外设可通过专用内部音频PLL 提供时钟,或使用外部时钟以实现同步。 (3) 4个USART及两个UART。 (4) 一个USB OTG全速和一个具有全速能力的USB OTG高速(配有 ULPI低引脚数接口)接口。 (5) 两个CAN接口。 (6) 一个SDIO/MMC 接口。 (7) 以太网和摄像头接口。 高级外设包括一个SDIO、一个灵活存储器控制(FMC)接口、一个用于CMOS传感器的摄像头接口。 STM32F407xx器件的工作温度范围为-40~105℃,供电电压范围为1.8~3.6V。 若使用外部供电监控器,则供电电压可低至1.7V。 该系列提供了一套全面的节能模式,可实现低功耗应用设计。 STM32F407xx 器件有不同封装,范围从64引脚至176引脚,所包括的外设因所选的器件而异。 这些特性使得STM32F407xx微控制器应用广泛: (1) 电机驱动和应用控制; (2) 工业应用,如PLC、逆变器、断路器; (3) 打印机、扫描仪; (4) 警报系统、视频电话、 HVAC; (5) 家庭音响设备。 3.3STM32F407ZGT6芯片内部结构 STM32F407ZGT6芯片主系统由32位多层AHB总线矩阵构成,STM32F407ZGT6芯片内部 通过8条主控总线(S0~S7)和7条被控总线(M0~M6)组成的总线矩阵将 CortexM4内核、存储器及片上外设连在一起。 1. 8条主控总线 (1) CortexM4内核I总线、D总线和S总线(S0~S2)。 S0: I总线,用于将CortexM4内核的指令总线连接到总线矩阵。内核通过此总线获取指令。此总线访问的对象是包含代码的存储器(内部Flash/SRAM或通过FSMC的外部存储器)。 S1: D总线,用于将CortexM4内核的数据总线和64KB CCM数据RAM连接到总线矩阵。内核通过此总线进行立即数加载和调试访问。此总线访问的对象是包含代码或数据的存储器(内部Flash或通过FSMC的外部存储器)。 S2: S总线,用于将CortexM4内核的系统总线连接到总线矩阵。此总线用于访问位 于外设或SRAM中的数据。也可通过此总线获取指令(效率低于I总线)。此总线访问的对象是 内部SRAM(112KB、64KB和16KB)、包括APB外设在内的AHB1外设和AHB2外设,以及 通过FSMC的外部存储器。 (2) DMA1存储器总线、DMA2存储器总线(S3、S4)。 S3、S4: DMA存储器总线 ,用于将DMA存储器总线主接口连接到总线矩阵。DMA 通过此总线执行存储器数据的传入和传出。此总线访问的对象是内部SRAM(112KB、64KB、16KB)及通过FSMC的外部存储器。 (3) DMA2外设总线(S5), 用于将DMA2外设总线主接口连接到总线矩阵。DMA通过此总线访问AHB外设或执行存储器间的数据传输。此总线访问的对象是AHB和APB外设及数据存储器(内部SRAM及通过FSMC的外部存储器)。 (4) 以太网DMA总线(S6), 用于将以太网DMA主接口连接到总线矩阵。以太网DMA通过此总线向存储器存取数据。此总线访问的对象是 内部SRAM(112KB、64KB和16KB)及通过FSMC的外部存储器。 (5) USB OTG HS DMA总线(S7), 用于将USB OTG HS DMA主接口连接到总线矩阵。USB OTG HS DMA通过此总线向存储器加载/存储数据。此总线访问的对象是内部SRAM(112KB、64KB和16KB)及通过FSMC的外部存储器。 2. 7条被控总线 (1) 内部Flash I总线(M0)。 (2) 内部Flash D总线(M1)。 (3) 主要内部SRAM1(112KB)总线(M2)。 (4) 辅助内部SRAM2(16KB)总线(M3)。 (5) AHB1外设(包括AHBAPB总线桥和APB外设)总线(M5)。 (6) AHB2外设总线(M4)。 (7) FSMC总线(M6)。FSMC借助总线矩阵,可以实现主控总线到被控总线的访问,这样即使在多个高速外设同时运行期间,系统也可以实现并发访问和高效运行。 此外,还有辅助内部SRAM3(64KB)总线(仅适用于STM32F42和STM32F43系列器件)(M7)。 主控总线所连接的设备是数据通信的发起端,通过矩阵总线可以和与其相交被控总线上连接的设备进行通信。例如,CortexM4内核可以通过S0总线与M0总线、M2总线和M6总线连接Flash、SRAM1及FSMC进行数据通信。STM32F407ZGT6芯片总线矩阵结构如图36所示。 图36STM32F407ZGT6芯片总线矩阵结构 3.4STM32F407VGT6芯片引脚和功能 STM32F407VGT6 芯片引脚如图37所示。图37只列出了每个引脚的基本功能,由于芯片内部集成功能较多,实际引脚有限,因此多数引脚为复用引脚(一个引脚可复用为多个功能)。对于每个引脚的功能定义请查看STM32F407XX数据手册。 STM32F4系列微控制器的所有标准输入引脚都是CMOS的,但与TTL兼容。 STM32F4系列微控制器的所有容忍5V电压的输入引脚都是TTL的,但与CMOS 兼容。在输出模式下,在 2.7~3.6V供电电压范围内,STM32F4系列微控制器所有输出引脚都是与TTL兼容的。 由STM32F4芯片的电源引脚、晶振I/O引脚、下载I/O引脚、BOOT I/O引脚和复位I/O引脚NRST组成的系统叫作最小系统。 图37STM32F407VGT6芯片引脚 3.5STM32F407VGT6最小系统设计 STM32F407VGT6最小系统是指能够让STM32F407VGT6正常工作的包含最少元器件的系统。STM32F407VGT6片内集成了电源管理模块(包括滤波复位输入、集成的上电复位/掉电复位电路、可编程电压检测电路)、8MHz高速内部RC振荡器、40kHz低速内部RC振荡器等部件,外部只需7个无源器件就可以让STM32F407VGT6工作。然而,为了使用方便,在最小系统中加入了USB转TTL串口、发光二极管等功能模块。 STM32F407VGT6最小系统核心电路原理图如图38所示,其中包括了复位电路、晶体振荡电路和启动设置电路等模块。 图38STM32F407VGT6最小系统核心电路原理图 1. 复位电路 STM32F407VGT6的NRST引脚输入中使用CMOS工艺,它内部连接了一个不能断开的上拉电阻 Rpu,典型值为40kΩ; 外部连接了一个上拉电阻R4、按键RST及电容C5。当 按下RST按键时NRST引脚电位变为0,通过这个方式实现手动复位。 2. 晶体振荡电路 STM32F407VGT6一共外接了两个高振: 一个25MHz的晶振X1提供给高速外部时钟,另一个32.768kHz的晶振X2提供给全低速外部时钟。 3. 启动设置电路 启动设置电路由启动设置引脚BOOT1和BOOT0构成,二者均通过10kΩ的电阻接地,从用户Flash启动。 4. JTAG接口电路 为了方便系统采用JLink仿真器进行下载和在线仿真,在最小系统中预留了JTAG接口电路用来实现STM32F407VGT6与JLink仿真器进行连接。JTAG接口电路如图39所示。 图39JTAG接口电路 5. 流水灯电路 最小系统板载16个LED流水灯,对应STM32F407VGT6的PE0~PE15引脚,如图310所示。 图310流水灯电路原理 另外,还设计有USB转TTL串口电路(采用CH340G)、独立按键电路、ADC采集电路(采用10kΩ电位器)和5V转3.3V电源电路(采用AMS11173.3V),具体电路从略。