版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章嵌入式系统概述1.1嵌入式系统简介按嵌入式微控制器类型划分,嵌入式系统可分为:(1)以单片机为核心的嵌入式单片机系统(2)以工业计算机板为核心的嵌入式计算机系统(3)以DSP为核心组成的嵌入式数字信号处理器系统(4)以FPGA为核心的嵌入式SOPC(SystemonaProgrammableChip,可编程片上系统)等。嵌入式系统还应该具备下述三个特征。1)嵌入式系统的微控制器通常是由32位及以上的RISC(ReducedInstructionSetComputer,精简指令集计算机)处理器组成的。2)嵌入式系统的软件系统通常是以嵌入式操作系统为核心,外加用户应用程序。3)嵌入式系统在特征上具有明显的可嵌入性。嵌入式系统应用经历了无操作系统、单操作系统、实时操作系统和面向Internet四个阶段。1.嵌入式系统的起源嵌入式系统的起源与集成电路技术的发展密切相关,其发展历程展示了技术进步如何推动特定领域的创新和效率提升。随着技术的进一步进步,嵌入式系统的应用领域和功能也在不断扩展和深化。嵌入式系统起源于20世纪60年代集成电路的诞生,使电子设备微型化且具备足够计算能力。最初应用于军事和航空,如导弹导航和航天控制,执行特定任务。1971年英特尔推出4004微处理器,推动嵌入式系统发展,电子设备更智能、更小巧。随后,嵌入式技术广泛应用于汽车、家电、医疗等领域,专注监控与控制。1.1.1嵌入式系统的产生嵌入式系统的发展紧随技术进步,推动了创新和效率提升,应用不断扩大和深化。2.嵌入式系统的技术发展嵌入式系统的技术发展是一个涵盖硬件、软件和系统集成多个方面的进程。从早期的简单控制器到现代的复杂智能系统,嵌入式技术已经经历了显著的变革。下面是嵌入式系统技术发展的几个关键阶段:(1)微处理器引入革新了电子技术,英特尔4004集成核心功能,体积小成本低,推动复杂嵌入式系统的发展和信息技术进步。(2)实时操作系统(RTOS)满足复杂任务需求,支持多任务处理,保证系统稳定和快速响应,广泛应用于工业和医疗领域。(3)系统芯片(SoC)集成多种模块,提高性能和能效,缩小体积,成为移动设备和消费电子的核心组件。(4)通信技术整合使嵌入式系统具备无线连接功能,支持物联网发展,实现设备远程管理和数据采集。(5)人工智能与机器学习集成增强了嵌入式系统智能化,提升用户体验,推动智能家居等自动化服务。(6)软件和开发工具进步促进嵌入式创新,提供丰富支持,开源社区推动普及和持续发展。3.嵌入式系统的技术革新进入21世纪,嵌入式系统整合无线通信、物联网和人工智能,拓展功能,支持复杂数据处理和智能决策,成为多功能平台,推动技术革新显著加速。无线通信使设备实现互联网连接和即时数据传输,促进物联网发展。人工智能赋予系统学习和预测能力,提高效率,优化用户体验,推动智能化应用普及。技术融合促进工业、医疗和家庭自动化发展,实时监控环境,执行复杂控制,提升效率与生活质量。嵌入式系统智能化进步不断,未来应用前景广阔。目前,国际国内对嵌入式系统的定义有很多。国际电气和电子工程师协会(theInstituteofElectricalandElectronicsEngineers,IEEE)对嵌入式系统的定义为:嵌入式系统是用来控制、监视或者辅助机器、设备或装置运行的装置。而国内普遍认同的嵌入式系统定义是:嵌入式系统是以应用为中心、以计算机技术为基础,软、硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗等方面有特殊要求的专用计算机系统。嵌入式系统与对象系统密切相关,其主要技术发展方向是满足嵌入式应用要求,不断扩展对象系统要求的外围电路(如ADC、DAC、PWM、日历时钟、电源监测、程序运行监测电路等),形成满足对象系统要求的应用系统。1.1.2嵌入式系统的定义嵌入式系统具有一些显著的特点,这些特点使它们在多种应用领域中都非常适用,从工业控制到消费电子,再到汽车和医疗设备。以下是嵌入式系统的一些关键特点:1.专用性嵌入式系统通常是为了执行特定的任务而设计和优化的,而不是作为通用计算机使用。它们通常只运行为其设计的特定应用程序或软件。2.可裁剪性受限于体积、功耗和成本等因素,嵌入式系统的硬件和软件必须高效率地设计,根据实际应用需求量体裁衣,去除冗余,从而使系统在满足应用要求的前提下达到最精简的配置。1.1.3嵌入式系统的特点3.实时性许多嵌入式系统需要实时操作能力,能够在严格的时间约束条件下准确地完成任务。这对于如汽车防抱死制动系统或医疗监测设备等关键应用尤为重要。4.可靠性和稳定性由于嵌入式系统常用于关键任务,如飞行控制系统或工业自动化,它们必须非常可靠和稳定,能够在长时间内无故障运行。5.资源约束嵌入式系统通常在处理能力、内存、电源和空间等方面有限制。因此,它们需要高效的算法和精简的操作系统来最大化资源使用效率。6.低功耗尤其是在便携式或远程监控设备中,嵌入式系统需要具有低功耗特性,以延长电池寿命并减少能源消耗。7.与环境的紧密集成嵌入式系统通常需要与它们控制的物理环境紧密集成,这可能要求它们能够抵抗恶劣环境条件,如温度变化、湿度、振动和冲击。8.连接性随着物联网(IoT)的兴起,越来越多的嵌入式系统被设计为可以连接到网络,支持远程监控、数据收集和控制功能。9.安全性随着嵌入式系统在关键基础设施和个人数据处理中的应用增多,其安全性变得越来越重要。这包括数据加密、安全通信协议和防止未授权访问的措施。10.不可垄断性传统计算机行业由Wintel联盟长期垄断桌面市场,而嵌入式系统融合多种技术,应用广泛,市场细分,技术和资金密集,创新持续,5G、物联网和人工智能推动其快速发展。1.2嵌入式系统的组成嵌入式系统的组成复杂多变,取决于其应用场景和功能要求。然而,大多数嵌入式系统都包括以下基本组件:1.处理器(CPU或微控制器)处理器是嵌入式系统的核心,负责执行程序指令和处理数据。它可以是一个简单的微控制器(MCU)或更复杂的中央处理单元(CPU),具体取决于所需的处理能力。2.内存内存分为两种主要类型:程序存储器和数据存储器。程序存储器通常是只读存储器(ROM)或闪存,用于存放系统启动和运行的固件或软件。数据存储器通常是随机访问存储器(RAM),用于存放运行时的数据和变量。3.输入/输出接口(I/O)嵌入式系统需要与外部世界交互,这通常通过各种输入/输出接口实现。这些接口可以包括数字和模拟输入输出端口、串行通信接口(如UART、SPI、I2C)、网络接口(如以太网或Wi-Fi)等。4.传感器和执行器许多嵌入式系统用于监控和控制外部环境,这需要使用传感器来收集环境数据(如温度、压力、光线等),以及执行器来影响环境(如电机、继电器、LED灯等)。5.电源管理电源管理对于保证嵌入式系统的稳定运行至关重要,尤其是在便携式设备中。这可能包括电源转换器、电池管理系统和能效优化策略。6.操作系统或固件许多嵌入式系统运行一个操作系统或固件来管理硬件资源和运行程序。这可以是一个简单的实时操作系统(RTOS)或更复杂的系统,如Linux或WindowsEmbedded。7.通信模块对于需要远程数据传输的嵌入式系统,可能会集成各种通信模块,如蓝牙、Wi-Fi、LTE或专用的工业通信协议模块。8.用户界面许多嵌入式系统含用户界面,如按钮、触屏和声音反馈,构成基础架构,实现高效可靠的特定任务。嵌入式系统的核心部分由嵌入式硬件和嵌入式软件组成,而从层次结构上看,嵌入式系统可划分为硬件层、驱动层、操作系统层以及应用层四个层次,如图1-1所示。图1-1嵌入式系统的组成结构(1)嵌入式硬件包括处理器、存储器、I/O接口和电源,处理器类型有微处理器、微控制器和数字信号处理器。(2)存储器包含RAM、Flash及EEPROM,支持程序和数据存储,处理器可集成或外扩存储资源。(3)I/O接口连接外部,分数字和模拟接口,数字接口有并行和串行,多种接口满足不同需求。(4)I/O设备包括人机交互设备和机机交互设备,按应用需求选择传感器、执行器等设备类型。(5)嵌入式软件分驱动层、操作系统层和应用层,操作系统可选,中间层提供硬件抽象和支持。1.3典型嵌入式操作系统FreeRTOS是2003年发布的开源免费实时操作系统,核心轻量,支持任务、信号量、内存管理,适合小型系统需求。历经十版,拥有百万开发者,合作厂商众多,10.4版本后用日期戳版本号,市场占有率高,应用广泛。FreeRTOS支持抢占式调度,兼容多处理器架构,可运行于资源极限微控制器,适合低资源环境。由RichardBarry开发,RealTimeEngineersLtd维护,特别适合嵌入式系统,降低嵌入式产品成本。相比收费RTOS如μC/OS-II,FreeRTOS免费开源,优势明显,广泛应用于嵌入式实时操作系统领域。1.3.1FreeRTOSFreeRTOS是可裁剪的小型嵌入式实时操作系统,除开源、免费以外,还具有以下特点。(1)FreeRTOS的内核支持抢占式、合作式和时间片3种调度方式。(2)支持的芯片种类多,已经在超过30种架构的芯片上进行了移植。(3)系统简单、小巧、易用,通常情况下其内核仅占用4~9KB的Flash空间。(4)代码主要用C语言编写,可移植性高。(5)支持ARMCortex-M系列中的MPU(内存保护单元,MemoryProtectionUnit),如STM32F407、STM32F429等有MPU的芯片。(6)任务数量不限。(7)任务优先级不限。(8)任务与任务、任务与中断之间可以使用任务通知、队列、二值信号量、计数信号量、互斥信号量和递归互斥信号量进行通信和同步。(9)有高效的软件定时器。(10)有强大的跟踪执行功能。(11)有堆栈溢出检测功能。(12)适用于低功耗应用。FreeRTOS提供了一个低功耗tickless模式。(13)在创建任务通知、队列、信号量、软件定时器等系统组件时,可以选择动态或静态RAM。(14)SafeRTOS作为FreeRTOS的衍生品,具有比FreeRTOS更高的代码完整性。RT-Thread的全称是RealTime-Thread,是由上海睿赛德电子科技有限公司推出的一个开源嵌入式实时多线程操作系统。(1)RT-Thread遵循ApacheLicense2.0协议,主要由内核层、组件与服务层、软件包三部分组成,结构清晰。(2)内核层含多线程调度、信号量、消息队列等系统对象,Libcpu/BSP负责外设驱动和CPU移植。(3)组件与服务层模块化设计,包含虚拟文件系统、命令行界面、网络和设备框架,耦合度低。(4)软件包面向多应用领域,涵盖物联网、多媒体、脚本语言、工具和外设驱动等通用组件。(5)支持主流MCU架构,实时性高、资源占用少,适用于资源受限环境,拥有活跃开源社区和广泛应用。1.3.2睿赛德RT-ThreadμC/OS-II(Micro-ControllerOperatingSystemII)是一种基于优先级的可抢占式的硬实时内核。它属于一个完整、可移植、可固化、可裁剪的抢占式多任务内核,包含了任务调度、任务管理、时间管理、内存管理和任务间的通信和同步等基本功能。μC/OS-II嵌入式系统可用于各类8位单片机、16位和32位微控制器和数字信号处理器。μC/OS-II由JeanJ.Labrosse于1992年开发,1999年改写命名,2000年获美国航空管理局认证,安全稳定。系统90%用C语言编写,少量汇编便于移植,支持ANSI标准工具,执行效率高,占用空间小,实时性能优良。1.3.3μC/OS-IIμC/OS-II系统的主要特点如下:(1)μC/OS-II源代码公开,支持多微处理器移植,开发透明且效率高。(2)源码主要用ANSIC写,汇编部分最小,方便在多微处理器间移植。(3)需支持堆栈指针和内嵌汇编,保证程序中断控制与移植性。(4)适配软硬件工具,可固化到产品中,成为嵌入式系统一部分。(5)用户可按需裁剪功能,通过条件编译定义系统服务使用。(6)完全抢占式内核,总运行优先级最高任务,保证实时性。(7)支持多任务,最大可管理248个应用任务,无时间片轮转调度。(8)函数调用执行时间确定,不依赖任务数量,保证系统可预测。(9)各任务独立栈空间,支持栈空间校验,减少RAM需求。(10)提供邮箱、消息队列、信号量等多种系统服务,方便任务通信。(11)支持中断嵌套,中断优先级高者先执行,嵌套层数达255层。Linux诞生于1991年10月5日(这是第一次正式向外公布时间),是一套开源、免费使用和自由传播的类UNIX的操作系统。(1)Linux基于POSIX和UNIX,支持多用户、多任务、多线程及多CPU,兼容32位和64位硬件。(2)继承UNIX网络设计,性能稳定,有多版本,用于手机、路由器、超级计算机等硬件。(3)遵守GPL协议,无许可费,拥有丰富免费工具和庞大开发者社区支持。(4)大量免费开源应用,易于修改维护,降低软件开发和维护成本。(5)完全用C语言编写,入门简单,资源占用少,网络功能强,适合嵌入式应用。1.3.4嵌入式Linux1.4嵌入式系统的应用领域嵌入式系统是一种专门为执行特定任务而设计的计算系统,它们通常被整合到设备中以增强或实现其功能。这些系统的应用广泛,涉及从普通家用电器到复杂的工业和科技设备。嵌入式系统主要应用在以下领域:1.智能消费电子产品嵌入式系统是智能手机、平板、音响等设备核心,负责数据处理、界面管理和网络通信。2.工业控制嵌入式系统监控机械和生产流程,确保数字机床、电网设备等运行高效、安全可靠。3.医疗设备嵌入式系统提升血糖仪、心电监护仪等准确性,实时监测患者健康并调整治疗。4.信息家电及家庭智能管理系统家电可通过嵌入式系统实现远程智能管理,提高自动抄表和安全系统效率与安全。5.网络与通信系统嵌入式系统处理数据传输和认证,ARM架构提供计算力同时保持低功耗优势。6.环境工程嵌入式系统用于水文、气象监测,保障恶劣环境中实时数据采集和预警功能。7.机器人技术机器人依赖嵌入式系统实现精准运动控制和环境交互,推动智能化与微型化发展。第2章STM32F4嵌入式微控制器2.1STM32微控制器概述STM32是意法半导体(STMicroelectronics)较早推向市场的基于Cortex-M内核的微处理器系列产品,该系列产品具有成本低、功耗优、性能高、功能多等优势,并且以系列化方式推出,方便用户选型,在市场上获得了广泛好评。STM32目前常用的有STM32F103~107系列,简称“1系列”,最近又推出了高端系列STM32F4xx系列,简称“4系列”。前者基于Cortex-M3内核,后者基于Cortex-M4内核。STM32F4xx系列在以下诸多方面做了优化:(1)增加了浮点运算;(2)DSP处理;(3)存储空间更大,高达1M字节以上;(4)运算速度更高,以168MHz高速运行时可达到210DMIPS的处理能力;(5)更高级的外设,新增外设,例如,照相机接口、加密处理器、USB高速OTG接口等,提高性能,更快的通信接口,更高的采样率,带FIFO的DMA控制器。市场上常见的Cortex-M3MCU包括意法半导体STM32F103、德州仪器LM3S8000和恩智浦LPC1788,应用广泛于工业控制、消费电子和智能家居等领域。意法半导体成立于1987年,全球第五大半导体厂商,领先推出基于Cortex-M内核的STM32系列MCU,具低成本、低功耗和高性价比优势。STM32系列微控制器适合的应用:替代绝大部分8/16位MCU的应用,替代目前常用的32位MCU(特别是ARM7)的应用,小型操作系统相关的应用以及简单图形和语音相关的应用等。STM32系列微控制器不适合的应用有:程序代码大于1MB的应用,基于Linux或Android的应用,基于高清或超高清的视频应用等。2.1.1STM32微控制器产品线STM32系列微控制器的产品线包括高性能类型、主流类型和超低功耗类型三大类,分别面向不同的应用,其具体产品系列如图2-1所示。图2-1STM32产品线图1. STM32F1系列(主流类型)STM32F1系列基于Cortex-M3内核,具高性能、低功耗、高集成度,满足工业、医疗和消费需求,助ST成为全球领先厂商。STM32F1系列微控制器包含以下5个产品线,它们的引脚、外设和软件均兼容。1)STM32F100,超值型,24MHzCPU,具有电机控制功能。2)STM32F101,基本型,36MHzCPU,具有高达1MB的Flash。3)STM32F102,USB基本型,48MHzCPU,具备USBFS。4)STM32F103,增强型,72MHzCPU,具有高达1MB的Flash、电机控制、USB和CAN。5)STM32F105/107,互联型,72MHzCPU,具有以太网MAC(介质访问控制,MediaAccessControl)、CAN和USB2.0OTG。2.STM32F4系列(高性能类型)STM32F4基于Cortex-M4内核,90nm工艺,180MHz频率,性能达225DMIPS,动态功耗调整使电流消耗128~260μA/MHz。STM32F4系列包括8条互相兼容的数字信号控制器(DigitalSignalController,DSC)产品线,是MCU实时控制功能与DSP信号处理功能的完美结合体。1)STM32F401,84MHzCPU/105DMIPS,小尺寸低成本,具卓越功耗效率。2)STM32F410,100MHz/125DMIPS,智能DMA,低功耗定时器,停机89μA/MHz。3)STM32F411,100MHz/125DMIPS,大SRAM,智能DMA,优化批处理功耗。4)STM32F405/415,168MHz/210DMIPS,1MB闪存,支持先进连接和加密。5)STM32F407/417,168MHz/210DMIPS,1MB闪存,具以太网MAC和相机接口。6)STM32F446,180MHz/225DMIPS,512KB闪存,支持DualQuadSPI和SDRAM。7)STM32F429/439,180MHz/225DMIPS,2MB双区闪存,含SDRAM与Chrom-ART。8)STM32F427/437,180MHz/225DMIPS,2MB闪存,配备Chrom-ART和音频接口。9)STM32F469/479,180MHz/225DMIPS,2MB闪存,带SDRAM、QSPI及多种接口。在微控制器选型过程中,工程师常常会陷入这样一个困局:一方面抱怨8位/16位微控制器有限的指令和性能,另一方面抱怨32位处理器的高成本和高功耗。能否有效地解决这个问题,让工程师不必在性能、成本、功耗等因素中做出取舍和折中?(1)STM32于2007年基于Cortex-M3,计算能力1.25DMIPS/MHz,性能优于ARM7TDMI。(2)STM32具双12位ADC,UART4Mbit/s,SPI18Mbit/s,功耗低,性能稳定。(3)选型根据需求,轻量应用用STM32F1,重运算及数字信号用STM32F4。2.1.2STM32微控制器的选型(4)STM32F1细分产品线,选择依据功能需求,如USB、CAN或网络通信模块。(5)具体型号选取依引脚数和FLASH容量。国产ARM微控制器市场占有率逐步提升。(1)兆易创新成立于2005年,专注FLASH和32位MCU,产品高性能低功耗,涵盖工业、汽车等领域,GD32VF103兼容STM32F103。(2)华大半导体隶属CEC,聚焦汽车电子、工业控制和物联网,提供控制芯片及安全方案,主要ARMMCU为HC32F0、HC32F1和HC32F4系列。2.2STM32F407ZGT6概述STM32是单片微控制器,集成Cortex-M内核、存储器、时钟、中断等基本功能和外设如GPIO、USART、I2C、USB等。STM32F407属于F4系列,168MHzCortex-M4内核,整合数字信号控制功能,提升能效和性能,适用多种数字解决方案。STM32全系列产品引脚、软件、外设兼容,拥有强大开发生态,包括例程、IP和开发工具,助力系统扩展和资源复用。STM32F407的结构与原理适用于F4系列其他型号,支持相同封装和功能的外设,代码和硬件设计可以共用。该兼容性和生态系统使STM32平台投资回报高,设计灵活,适合多领域应用开发。STM32F407的主要特性如下:(1)内核:带有FPU的Arm32位Cortex-M4CPU、在Flash存储器中实现零等待状态运行性能的自适应实时加速器(ART加速器)、主频高达168MHz,MPU,能够实现高达210DMIPS/1.25DMIPS/MHz(Dhrystone2.1)的性能,具有DSP指令集。(2)存储器(3)LCD并行接口,兼容8080/6800模式。(4)LCD-TFT控制器有高达XGA的分辨率,具有专用的Chrom-ARTAccelerator™,用于增强的图形内容创建(DMA2D)。2.2.1STM32F407的主要特性(5)时钟、复位和电源管理。(6)低功耗。(7)3个12位、2.4MSPSADC:多达24通道,三重交叉模式下的性能高达7.2MSPS。(8)2个12位D/A转换器。(9)通用DMA:具有FIFO和突发支持的16路DMA控制器。(10)多达17个定时器:STM32F407含17个定时器,支持168MHz,具输入捕获、输出比较、PWM及编码器功能,涵盖16位和32位多种类型。(11)调试模式。(12)多达140个具有中断功能的I/O端口。(13)多达15个通信接口。(14)高级连接功能。(15)8~14位并行照相机接口:速度高达54MB/s。(16)真随机数发生器。(17)CRC计算单元。(18)RTC:亚秒级精度、硬件日历。(19)96位唯一ID。STM32F407xx还带有标准与高级通信接口,主要功能如下:(1)高达3个I2C。(2)3个SPI,2个I2S全双工。为达到音频级的精度,I2S外设可通过专用内部音频PLL提供时钟,或使用外部时钟以实现同步。(3)4个USART及2个UART。(4)一个USBOTG全速和一个具有全速能力的USBOTG高速(配有ULPI低引脚数接口)。(5)2个CAN接口。(6)一个SDIO/MMC接口。(7)以太网和摄像头接口。2.2.2STM32F407的主要功能高级外设包括一个SDIO、一个灵活存储器控制(FMC)接口、一个用于CMOS传感器的摄像头接口。STM32F405xx和STM32F407xx器件的工作温度范围是-40~+105°C,供电电压范围是1.8~3.6V。若使用外部供电监控器,则供电电压可低至1.7V。该系列提供了一套全面的节能模式,可实现低功耗应用设计。STM32F405xx和STM32F407xx器件有不同封装,范围从64引脚至176引脚。所包括的外设因所选的器件而异。这些特性使得STM32F405xx和STM32F407xx微控制器适合于广泛的应用:(1)电机驱动和应用控制。(2)工业应用:PLC、逆变器、断路器。(3)打印机、扫描仪。(4)警报系统、视频电话、HVAC。(5)家庭音响设备。2.3STM32F407ZGT6芯片内部结构STM32F407ZGT6芯片主系统由32位多层AHB总线矩阵构成,STM32F407ZGT6芯片内部通过8条主控总线(S0~S7)和7条被控总线(M0~M6)组成的总线矩阵将Cortex-4内核、存储器及片上外设连在一起。1.8条主控总线(1)Cortex-M4内核I总线、D总线和S总线(S0~S2)。S0指令总线连接内核与存储器取指,S1数据总线连数据RAM与存储器加载数据,S2系统总线访问内部SRAM和外设。(2)DMA1存储器总线、DMA2存储器总线(S3、S4)。S3、S4为DMA存储器总线,连接DMA和总线矩阵,访问内部SRAM及外部存储器。(3)DMA2外设总线(S5)。S5为DMA2外设总线,连接DMA2与总线矩阵,访问AHB/APB外设及内部和外部存储器。(4)以太网DMA总线(S6)。(5)USBOTGHSDMA总线(S7)。S6为以太网DMA总线,连接以太网DMA与总线矩阵,访问内部SRAM及外部存储器。S7:USBOTGHSDMA总线。USBOTGHSDMA总线连接USBDMA与总线矩阵,访问内部SRAM和外部存储器进行数据传输。2.7条被控总线(1)内部FlashI总线(M0)。(2)内部FlashD总线(M1)。(3)主要内部SRAM1(112KB)总线(M2)。(4)辅助内部SRAM2(16KB)总线(M3)。(5)辅助内部SRAM3(64KB)总线(仅适用于STM32F42系列和STM32F43系列器件)(M7)。(6)AHB1外设(包括AHB-APB总线桥和APB外设)总线(M5)。(7)AHB2外设总线(M4)。(8)FSMC总线(M6)。FSMC借助总线矩阵,可以实现主控总线到被控总线的访问,这样即使在多个高速外设同时运行期间,系统也可以实现并发访问和高效运行。STM32F407ZGT6芯片总线矩阵结构图如图2-2所示。图2-2STM32F407ZGT6芯片总线矩阵结构2.4STM32F407VGT6芯片引脚和功能STM32F407VGT6芯片引脚示意图如图2-3所示。图2-3只列出了每个引脚的基本功能。但是,由于芯片内部集成功能较多,实际引脚有限,因此多数引脚为复用引脚(一个引脚可复用为多个功能)。对于每个引脚的功能定义请查看STM32F407XX数据手册。STM32F4系列微控制器的所有标准输入引脚都是CMOS的,但与TTL兼容。STM32F4系列微控制器的所有承受5V电压的输入引脚都是TTL的,但与CMOS兼容。在输出模式下,在供电电压2.7~3.6V的范围内,STM32F4系列微控制器所有的输出引脚都是与TTL兼容的。由STM32F4芯片的电源引脚、晶振I/O引脚、下载I/O引脚、BOOTI/O引脚和复位I/O引脚NRST组成的系统叫最小系统。图2-3STM32F407VGT6芯片引脚2.5STM32F407VGT6最小系统设计STM32F407VGT6最小系统是能让芯片正常工作的最简元件组合,保障基本功能运行。芯片内含电源管理模块,包括滤波复位、集成上电/掉电复位和可编程电压检测电路。还集成8MHz高速内部RC振荡器和40kHz低速RC振荡器,外部仅需7个无源元件即可工作。最小系统核心电路原理图如图2-4所示,其中包括了复位电路、晶体振荡电路和启动设置电路等模块。图2-4STM32F407VGT6的最小系统核心电路原理图1. 复位电路STM32F407VGT6NRST脚内置40kΩ上拉,外接电阻、按键和电容,按键按下实现手动复位。2. 晶体振荡电路STM32F407VGT6一共外接了两个高振:一个25MHz的晶振X1提供给高速外部时钟,一个32.768kHz的晶振X2提供给全低速外部时钟。3. 启动设置电路启动设置电路有启动设置引脚BOOT1和BOOT0构成。二者均通过10kΩ的电阻接地。从用户Flash启动。4. JTAG接口电路为了方便系统采用J-Link仿真器进行下载和在线仿真,在最小系统中预留了JTAG接口电路用来实现STM32F407VGT6与J-Link仿真器进行连接。JTAG接口电路原理图如图2-5所示。图2-5JTAG接口电路5. 流水灯电路最小系统板载16个LED流水灯,对应STM32F407VGT6的PE0~PE15引脚,电路原理如图2-6所示。图2-6流水灯电路原理另外,还设计有USB转TTL串口电路(采用CH340G)、独立按键电路、ADC采集电路(采用10kΩ电位器)和5V转3.3V电源电路(采用AMS1117-3.3V),具体电路从略。第3章STM32CubeMX配置工具3.1安装STM32CubeMXSTM32CubeMx软件是ST有限公司为STM32系列微控制器快速建立工程,并快速初始化使用到的外设、GPIO等而设计的,大大缩短了开发时间。该软件不仅能配置STM32外设,还能进行第三方软件系统的配置,例如FreeRtos、FAT32、LWIP等;而且还有一个功能,就是可以用它进行功耗预估。此外,这款软件可以输出PDF、TXT文档,显示所开发工程中的GPIO等外设的配置信息,供开发者进行原理图设计等。STM32CubeMX是ST官方出的一款针对ST的MCU/MPU跨平台的图形化工具,支持在Linux、MacOS、Window系统下开发。(1)ST全系列产品包括STM32L0、L1、L4、L5,STM32F0、F1、F2、F3、F4、F7,STM32G0、G4,STM32H7,STM32WB、WL,STM32MP1等。(2)这些产品使用的底层接口是HAL库。(3)STM32CubeMX集成MCU/MPU的硬件抽象层(HAL),还集成了RTOS、文件系统、USB、网络、显示、嵌入式AI等中间件。(4)开发者可轻松完成底层驱动配置,专注上层功能逻辑开发,提高嵌入式开发效率。STM32CubeMX架构如图3-1所示。图3-1STM32CubeMX架构STM32CubeMX软件的特点:(1)集成了ST有限公司的每一款型号的MCU/MPU的可配置的图形界面,能够自动提示IO冲突并且对于复用IO可自动分配。(2)具有动态验证的时钟树。(3)能够很方便的使用所集成的中间件。(4)能够估算MCU/MPU在不同主频运行下的功耗。(5)能够输出不同编译器的工程,比如能够直接生成MDK、EWARM、STM32CubeIDE、MakeFile等工程。为了使开发人员能够更加快捷有效地进行STM32的开发,ST有限公司推出了一套完整的STM32Cube开发组件。STM32Cube主要包括两部分:STM32CubeMX图形化配置工具,它是直接在图形界面简单配置下,生成初始化代码,并对外设做了进一步的抽象,让开发人员更只专注于应用的开发。基于STM32微控制器的固件集STM32Cube软件资料包。从ST有限公司官网可下载STM32CubeMX软件最新版本的安装包,本书使用的版本是6.6.1。安装包解压后,运行其中的安装程序,按照安装向导的提示进行安装。安装过程中会出现图3-2所示的界面,需要勾选第一个复选框后才可以继续安装。第二个复选框可以不用勾选。图3-2需要同意ST的隐私政策和使用条款才可以继续安装安装过程中,用户需设置软件安装目录。安装目录不能包含汉字、空格及非下划线符号,因为STM32CubeMX对中文支持有限。STM32Cube开发还需安装MCU固件包,建议将其与STM32CubeMX安装在相同根目录下,如:“C:\ProgramFiles\STMicroelectronics\STM32Cube\”,再将STM32CubeMX安装到该目录下的“STM32CubeMX”文件夹。3.2安装MCU固件包在安装完STM32CubeMX后,若要进行后续的各种操作,必须在STM32CubeMX中设置一个软件库文件夹(RepositoryFolder),在STM32CubeMX中安装MCU固件包和STM32Cube扩展包时都安装到此目录下。双击桌面上的STM32CubeMX图标运行该软件,软件启动后的界面如图3-3所示。3.2.1软件库文件夹设置图3-3软件启动后的界面在图3-3界面的最上方有3个主菜单项,单击菜单项Help→UpdaterSettings,会出现图3-4所示的对话框。首次启动STM32CubeMX后,立刻单击这个菜单项可能提示软件更新已经在后台运行,需要稍微等待一段时间后再单击此菜单项。在图3-3中,RepositoryFolder就是需要设置的软件库文件夹,所有MCU固件包和扩展包要安装到此目录下。图3-4UpdaterSettings对话框图3-4中,CheckandUpdate设置更新方式,DataAuto-Refresh控制启动时数据刷新,建议手动检查更新和关闭自动刷新,启动后可手动更新和刷新数据。设置了软件库文件夹,就可以安装MCU固件包和扩展包了。在图3-3所示的界面上,单击主菜单项Help→Manageembeddedsoftwarepackages,出现图3-5所示的EmbeddedSoftwarePackagesManager(嵌入式软件包管理)对话框。3.2.2管理嵌入式软件包图3-5EmbeddedSoftwarePackagesManager对话框图3-5界面包括多个页面,STM32CubeMCUPackages管理所有STM32系列MCU固件包,按系列分节点。展开节点显示该系列不同版本固件包,建议STM32CubeMX只保留最新版本。旧项目打开时会提示迁移,通常能自动完成。在图3-4界面的下方有几个按钮,它们可用于完成不同的操作功能。(1)FromLocal按钮,选择本地固件包压缩文件安装,不需解压,不能放在库根目录。(2)FromUrl按钮,输入网址下载固件包,通常不用因未知网址。(3)Refresh按钮,刷新目录树,查看是否有新固件包版本。(4)Install按钮,选固件包版本后下载并安装尚未安装的固件包。(5)Remove按钮,选择已安装固件包版本后删除该固件包。本章是基于STM32F103ZET6讲述的,所以需要安装STM32CubeF1固件包。例如,1.8.0版本的STM32CubeF1固件包安装后的固件库目录如下:C:\Users\lenovo\Repository\STM32Cube_FW_F1_V1.8.4如果是开发STM32F系列微控制器,则需要安装STM32CubeF4固件包,但安装和使用方法是一样的。STMicroelectronics界面的管理内容如图3-6所示,这个界面是ST有限公司提供的一些STM32Cube扩展包,包括人工智能库X-CUBE-AI、图形用户界面库X-CUBE-TOUCHGFX等,以及一些芯片的驱动程序,如MEMS、BLE、NFC芯片的驱动库。用户可以根据设计需要安装相应的扩展包,例如,安装4.20.0版本的TouchGFX后,TouchGFX库保存在如下的目录之下:C:\Users\lenovo\Repository\Packs\STMicroelectronics\X-CUBE-TOUCHGFX\4.20.0图3-6STMicroelectronics嵌入式软件包管理界面3.3软件功能与基本使用1.初始主界面启动STM32CubeMX之后的初始界面如图3-2所示。图3-2的界面主要分为3个功能区,分别描述如下。(1)主菜单栏位于窗口顶部,有File、Window、Help三菜单及下拉项。右端快捷按钮点击可用浏览器打开ST社区、官网等网站。(2)标签导航栏。主菜单栏下方是标签导航栏。在新建或打开项目后,标签导航栏可以在STM32CubeMX的3个主要视图之间快速切换。3.3.1软件界面(3)工作区。窗口其他区域都是工作区。STM32CubeMX使用的是单文档界面,工作区会根据当前操作的内容显示不同的界面。图3-2的工作区显示的是Home视图,Home视图的工作区可以分为3个功能区域。2.主菜单功能STM32CubeMX有3个主菜单项,软件的很多功能操作都是通过这些菜单项实现的。(1)File菜单。该菜单主要包括如下菜单项。①NewProject:新建项目,选择MCU创建.ioc项目文件。②LoadProject:打开已有.ioc项目文件载入。③ImportProject:导入相同MCU型号项目设置。④SaveProject:保存当前项目,首次保存需命名。⑤SaveProjectAs:项目另存为新文件。⑥CloseProject:关闭当前项目。⑦GenerateReport:生成项目设置PDF报告。⑧RecentProjects:显示最近打开项目列表。⑨Exit:退出STM32CubeMX软件。(2)Window菜单。该菜单主要包括如下菜单项。①Outputs(输出),一个复选的菜单项,被勾选时,在工作区的最下方显示一个输出子窗口,显示一些输出信息。②Fontsize(字体大小)。有3个子菜单项,用于设置软件界面字体大小,需重启STM32CubeMX后才生效。(3)Help菜单。该菜单主要包括如下菜单项。①Help(帮助),显示STM32CubeMX的英文版用户手册PDF文档,文档有300多页,是个很齐全的使用手册。②About(关于),显示关于本软件的对话框。③Docs&Resources(文档和资源),只有在打开或新建一个项目后此菜单项才有效。④RefreshData(刷新数据),会显示图3-7所示的DataRefresh对话框,用于刷新MCU和开发板的数据,或下载所有官方文档。图3-7DataRefresh对话框⑤UserPreferences(用户选项),会打开一个对话框用于设置用户选项,只有一个需要设置的选项,即是否允许软件收集用户使用习惯。⑥CheckforUpdates(检查更新),会打开一个对话框,用于检查STM32CubeMX软件、各系列MCU固件包、STM32Cube扩展包是否有新版本需要更新。⑦Manageembeddedsoftwarepackages(管理嵌入式软件包),会打开图3-4所示的对话框,对嵌入式软件包进行管理。⑧UpdaterSettings(更新设置),会打开图3-3所示的对话框,用于设置软件库文件夹,设置软件检查更新方式和数据刷新方式。1.选择MCU创建项目单击主菜单项File→NewProject,或Home视图上的ACCESSTOMCUSELECTOR按钮,都可以打开图3-7所示的NewProjectfromaMCU/MPU对话框。该对话框用于新建项目,是STM32CubeMX的3个主要视图之一,用于选择MCU或开发板以新建项目。图3-8所示的是MCU/MPUSelector界面,用于选择MCU。3.3.2新建项目图3-8NewProjectfromaMCU/MPU对话框图3-7的界面有如下几个功能区域。(1)MCU/MPUFilters区,设置筛选条件,缩小型号范围,含搜索框及筛选项。(2)MCUs/MPUsList区,显示筛选后MCU型号及参数,可多种操作。(3)MCU资料显示区,选中型号后显示详细资料,含界面和操作按钮。图3-7左侧的MCU/MPUFilters框内是用于MCU筛选的一些功能操作,上方有一个工具栏,有4个按钮。(1)Showfavorites按钮,显示收藏的MCU,星星图标收藏取消。(2)SaveSearch按钮,保存当前筛选条件为搜索名称。(3)LoadSearches按钮,列出并快速加载保存的搜索条件。(4)Resetallfilters按钮,重置所有筛选条件。MCU的筛选主要通过下方的几组条件进行设置。(1)Core(内核),筛选内核,选项中列出了STM32支持的所有Cortex内核,如图3-9所示。(2)Series(系列),选择内核后会自动更新可选的STM32系列列表,图3-10只显示了列表的一部分。(3)Line(产品线),选择某个STM32系列后会自动更新产品线列表中的可选范围。例如,选择了STM32F1系列之后,产品线列表中只有STM32F1xx的器件可选。图3-11是产品线列表的一部分。(4)Package(封装),根据封装选择器件。用户可以根据已设置的其他条件缩小封装的选择范围。图3-12是封装列表的一部分。(5)Other(其他),还可以设置价格、IO引脚数、Flash大小、RAM大小、主频等筛选条件。如图3-9选择Cortex内核图3-10选择STM32系列图3-11选择产品线图3-12选择封装2.选择开发板新建项目用户还可以在NewProjectfromaMCU/MPU窗口里选择开发板新建项目,其界面如图3-13所示。STM32CubeMX目前仅支持ST官方的开发板。图3-13选择开发板新建项目1. 交叉选择MCU新建项目NewProjectfromaMCU/MPU对话框的第三个界面是CrossSelector,用于交叉选择MCU新建项目,界面如图3-14所示。图3-14交叉选择MCU新建项目在图3-14中,左上方的PartNumberSearch部分用于选择原有MCU的厂家和型号,厂家有NXP、Microchip、ST、TI等,选择厂家后会在第二个下拉列表框中列出厂家的MCU型号。选择厂家和MCU型号后,会在下方的MatchingSTcandidates(500)框中显示可选的STM32MCU,并且有一个匹配百分比表示了匹配程度。选择一个MCU创建项目后,界面上显示的是项目操作视图。因为本书所用开发板上的MCU型号是STM32F103ZET6,所以选择STM32F10ZET6新建一个项目进行操作。新建项目后的工作界面如图3-15所示,界面主要由主菜单栏、标签导航栏和工作区三部分组成。工作区是一个多页界面,有4个工作界面。(1)Pinout&Configuration(引脚与配置)界面,这是对MCU的系统内核、外设、中间件和引脚进行配置的界面,是主要的工作界面。(2)ClockConfiguration(时钟配置)界面,通过图形化的时钟树对MCU的各个时钟信号频率进行配置的界面。3.3.3MCU图形化配置界面总览(3)ProjectManager(项目管理)界面,对项目进行各种设置的界面。图3-15MCU引脚配置界面(4)Tools(工具)界面,进行功耗计算、DDRSDRAM适用性分析(仅用于STM32MP1系列)的操作界面。引脚与配置界面是MCU图形化配置的主要工作界面,如图3-14所示。这个界面包括ComponentList(组件列表)、Mode&Configuration(模式与配置)、Pinoutview(引脚视图)、Systemview(系统视图)和一个工具栏。1. 组件列表位于工作区左侧的是MCU可以配置的系统内核、外设和中间件列表,每一项称为一个组件(Component)。组件列表有两种显示方式:分组显示和按字母顺序显示。单击界面上的Categories或A->Z页标签就可以在这两种显示方式之间切换。3.3.4MCU配置在分组显示状态下,主要有如下的一些分组(每个分组的具体条目与MCU型号有关,这里选择的MCU是STM32F103ZE)。①SystemCore(系统内核),有DMA、GPIO、IWDG、NVIC、RCC、SYS和WWDG。②Analog(模拟),片上的ADC和DAC。③Timers(定时器),包括RTC和所有定时器。④Connectivity(通信连接),各种外设接口,包括CAN、ETH、FSMC、I2C、SDIO、SPI、UART、USART、USB_OTG_FS、USB_OTG_HS等接口。⑤Multimedia(多媒体),各种多媒体接口,包括数字摄像头接口DCMI和数字音频接口12S。⑥Security(安全),只有一个RNG(随机数发生器)。⑦Computing(计算),计算相关的资源,只有一个CRC(循环冗余校验)。⑧Middleware(中间件),MCU固件库里的各种中间件,主要有FatFS、FreeRTOS、LibJPEG、LwIP、PDM2PCM、USB_Device、USB_Host等。⑨AdditionalSoftware(其他软件),组件列表里默认是没有这个分组的。在初始状态下,组件列表的各个项前面没有任何图标,在对MCU的各个组件做一些设置后,组件列表的各个项前面会出现一些图标(如图3-16所示),表示组件的可用性信息。图3-16组件的上下文帮助功能和可用标记2. 组件的模式和配置在图3-15的组件列表中单击一个组件后,就会在其右侧显示模式与配置(ModeandConfiguration)界面。这个界面分为上下两个部分,上方是模式设置界面,下方是参数配置界面,这两个界面的显示内容与选择的具体组件有关。例如,图3-15显示的是SystemCore分组里RCC组件的模式和配置界面。RCC用于设置MCU的两个外部时钟源,模式选择界面上高速外部(HighSpeedExternal,HSE)时钟源的下拉列表框有如下3个选项。(1)Disable,禁用外部时钟源。(2)BYPASSClockSource,使用外部有源时钟信号源。(3)Crystal/CeramicResonator,使用外部晶体振荡器作为时钟源。下半部分的Configuration界面用于对组件的一些参数进行配置,分为多个界面,且界面内容与选择的组件有关,一般有如下的一些界面。(1)ParameterSettings,设置组件参数如USART1波特率和数据位数。(2)NVICSettings,启用中断,显示优先级,优先级在SystemCore设置。(3)DMASettings,启用DMA及相关设置,优先级在SystemCore配置。(4)GPIOSettings,显示GPIO引脚设置,具体参数SystemCore里改。(5)UserConstants,自定义常量生成代码时定义为宏放main.h。3. MCU引脚视图图3-14工作区的右侧显示了MCU的引脚图,在图上直观地表示了各引脚的设置情况。通过组件列表对某个组件进行模式和参数设置后,系统会自动在引脚图上标识出使用的引脚。例如,设置RCC组件的HSE使用外部晶振后,系统会自动将Pin23和Pin24引脚设置为RCC_OSC_IN和RCC_OSC_OUT,这两个名称就是引脚的信号(signal)。引脚视图下方有一个工具栏,通过工具栏按钮可以进行放大、缩小、旋转等操作,通过鼠标滚轮也可以缩放,按住鼠标左键可以拖动MCU引脚图。图3-17是单击引脚PA9时出现的引脚功能选择菜单。这个菜单里列出了引脚PA9所有可用的功能,其中的几个解释如下。(1)Reset_State,恢复为复位后的初始状态。(2)GPIO_Input,作为GPIO输入引脚。(3)GPIO_Output,作为GPIO输出引脚。(4)TIM1_CH2,作为定时器TIM1的输入通道2。(5)USART1_TX,作为USART1的TX引脚。(6)GPIO_EXTI9,作为外部中断EXTI9的输入引脚。图3-17引脚PA9的引脚功能选择菜单用户还可以在一个引脚上单击鼠标右键调出一个快捷菜单,如图3-18所示。不过,只有设置了功能的引脚,才有右键快捷菜单。此快捷菜单有3个菜单项。图3-18引脚的快捷菜单(1)EnterUserLabel,输入用户自定义标签替代引脚信号名,便于识别功能。(2)SignalPinning,绑定引脚与信号,防止自动改动,解绑时显示SignalUnpinning。(3)PinStacking/Unstacking功能不明,官方无解,避免点击以免影响代码生成。4.Pinout菜单在引脚视图的上方还有一个工具栏,上面有两个按钮:Additiona1Software和Pinout。单击AdditionalSoftware按钮会打开一个对话框,用于选择已安装的STM32Cube扩展包,添加到组件面板的AdditionalSoftware组里。单击Pinout按钮会出现一个下拉菜单,菜单项如图3-19所示。图3-20引脚视图上方的Pinout菜单各菜单项的功能描述如下。(1)UndoModeandpinout,撤销上一次的模式设置和引脚分配操作。(2)RedoModeandpinout,重做上一次的撤销操作。(3)KeepCurrentSignalsPlacement(保持当前信号的配置)。(4)ShowUserLabel(显示用户标签)。如果勾选此项,将显示引脚的用户定义标签,否则显示其已设置的信号名称。(5)DisableAllModes(禁用所有模式),取消所有外设和中间件的模式设置。(6)ClearPinouts(清除引脚分配),可以让所有引脚变成复位初始状态。(7)ClearSingleMappedSignals(清除单边映射的信号),清除那些定义了引脚的信号。(8)Pins/SignalsOptions(引脚/信号选项),会打开一个图3-20所示的对话框,显示MCU已经设置的所有引脚名称、关联的信号名称和用户定义标签。图3-20Pins/SignalsOptions对话框(9)ListPinoutCompatibleMCUs(列出引脚分配兼容的MCU),会打开一个对话框,显示与当前项目的引脚配置兼容的MCU列表。(10)ExportpinoutwithAlt.Functions,将具有复用功能的引脚的定义导出为一个.csv文件。(11)ExportpinoutwithoutAlt.Functions,将没有复用功能的引脚的定义导出为一个.csv文件。(12)SetunusedGPIOs(设置未使用的GPIO引脚),用于打开一个图3-21所示的对话框,对MCU未使用的GPIO引脚进行设置,可设置为Input、Output或Analog模式。(13)ResetusedGPIOs(复位已用的GPIO引脚),打开一个对话框,复位那些通过SetunusedGPIOs对话框设置的GPIO引脚,可以选择复位的引脚个数。(14)Layoutreset(布局复位),将Pinout&Configuration界面的布局恢复为默认状态。图3-21设置未使用GPIO引脚的对话框4. 系统视图在图3-15所示的芯片图片的上方有两个按钮:Pinoutview(引脚视图)和Systemview(系统视图),单击这两个按钮可以在引脚视图和系统视图之间切换显示。图3-22是系统视图界面,界面上显示了MCU已经设置的各种组件,便于对MCU已经设置的系统资源和外设有一个总体的了解。图3-22系统视图界面MCU图形化设置的第二个工作界面是时钟配置界面。为了充分演示时钟配置的功能,我们先设置RCC的模式,将HSE和LSE都设置为Crystal/CeramicResonator,并且启用MasterClockOutput2(MCO2),如图3-23所示。3.3.5时钟配置图3-23RCC模式设置时钟源、时钟信号或选择器的作用如下。(1)HSE时钟,外部晶振频率4~16MHz,设置后自动计算相关时钟频率。(2)HSI时钟,MCU内部8MHz高速RC振荡器。(3)PLL时钟源选HSE或HSI,通过倍频分频生成高频时钟,主PLL输出72MHz信号供USB等用。(4)系统时钟选择器,从HSI、HSE或PLLCLK选择一个作为系统时钟SYSCLK。(5)SYSCLK最高72MHz,无法直接修改,是PTP时钟源,经过AHB预分频生成HCLK。(6)HCLK由SYSCLK经AHB分频器生成,是CPU时钟,最高72MHz,用户可直接设置频率。(7)音频时钟输入,勾选AudioClockInput后可用外部时钟驱动I2S接口。(8)MCO输出,勾选MasterClockOutput后,为外设输出分频时钟信号。(9)LSE时钟,启用后用作RTC时钟,固定32.768kHz,便于产生1Hz信号。(10)LSI时钟,内部32kHz振荡器,作为RTC和独立看门狗时钟。(11)RTC时钟选择器,选LSI、LSE或HSE分频信号,LSE最佳精度。1.功能概述对MCU系统功能和各种外设的图形化配置,主要是在引脚配置和时钟配置两个工作界面完成的,完成这些工作后,一个MCU的配置就完成了。STM32CubeMX的重要作用就是将这些图形化的配置结果导出为C语言代码。STM32CubeMX工作区的第3个界面是ProjectManager界面,如图3-24所示。这个界面是一个多页界面,有如下3个工作界面。3.3.6项目管理图3-24项目管理器的Project界面(1)Project界面,用于设置项目名称、保存路径、导出代码的IDE软件等。(2)CodeGenerator界面,用于设置生成C语言代码的一些选项。(3)AdvancedSettings界面,生成C语言代码的一些高级设置,例如,外设初始化代码是使用HAL库还是LL库。2.项目基本信息设置新建的STM32CubeMX项目首次保存时会出现一个选择文件夹的对话框,用户选择一个文件夹后,项目会被保存到文件夹下,并且项目名称与最后一级文件夹的名称相同。例如,保存项目时选择的文件夹是:“D:\Demo\MDK\1-LED\”项目会被保存到此目录下,并且项目文件名是LED.ioc。对于保存过的项目,就不能再修改图3-23中的ProjectName和ProjectLocation两个文本框中的内容了。图3-23的界面上还有如下一些设置项。(1)ApplicationStructure(应用程序结构),有Basic和Advanced两个选项。①Basic结构,适合单中间件或无中间件,代码文件夹并列管理。②Advanced结构,适合多中间件,便于中间件统一管理。(2)Donotgeneratethemain()复选框,如果勾选此项,导出的代码将不生成main()函数。但是C语言的程序肯定是需要一个main()函数的,所以不勾选此项。(3)ToolchainFolderLocation,也就是导出的IDE项目所在的文件夹,默认与STM32CubeMX项目文件在同一个文件夹。(4)Toolchain/IDE,从一个下拉列表框里选择导出C语言程序的工具链或IDE软件,下拉列表的选项如图3-25所示。图3-25可选的工具链/IDE软件列表本书使用的IDE软件是KeilMDK,Toolchain/IDE选择MDK-ARM。(1)LinkerSettings,设置应用程序堆的最小大小,默认值为0x200和0x400。(2)McuandFirmwarePackage,默认使用最新固件库,支持多版本固件库切换。3.代码生成器设置CodeGenerator界面如图3-26所示,用于设置生成代码时的一些特性。图3-26CodeGenerator界面的设置内容(1)STM32CubeMCUpackagesandembeddedsoftwarepacks选项,用于设置固件库和嵌入式软件库复制到IDE项目里的方式,有3种方式。(2)Generatedfiles选项,生成C语言代码文件的一些选项。(3)HALSettings选项,用于设置HAL。(4)TemplateSettings选项,用于设置自定义代码模板。一般不用此功能,直接使用STM32CubeMX自己的代码模板就很好。4.高级设置AdvancedSettings界面如图3-27所示,分为上下两个列表。(1)DriverSelector列表,用于选择每个组件的驱动库类型。该列表列出了所有已配置的组件,如USART、RCC等,第2列是组件驱动库类型,有HAL和LL两种库可选。HAL是高级别的驱动程序,MCU上所有的组件都有HAL驱动程序。HAL的代码与具体硬件的关联度低,易于在不同系列的器件之间移植。图3-27AdvancedSettings界面的设置内容LL是进行寄存器级别操作的驱动程序。本书完全使用HAL库进行示例程序设计,不会混合使用LL库,以保持总体的统一。(2)GeneratedFunctionCalls列表,对生成函数的调用方法进行设置。在对MCU进行各种配置以及对项目进行设置后,用户就可以生成报告和代码。单击主菜单项File→GenerateReport,会在STM32CubeMX项目文件目录下生成一个同名的PDF文件。这个PDF文件里有对项目的基本描述、MCU型号描述、引脚配置图、引脚定义表格、时钟树、各种外设的配置信息等,是对STM32CubeMX项目的一个很好的总结性报告。保存CubeMX项目并设置生成选项后,点击GENERATECODE生成或更新MDK-ARM项目代码框架。STM32CubeMX软件的工作区还有一个Tools界面,用于进行MCU的功耗计算,这会涉及MCU的低功耗模式。3.3.7生成报告和代码第4章STM32CubeIDE创
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网络安全数据加密协议
- 教师个人师德师风自查自纠整改报告
- 2026年保密观知识竞赛试题及答案(考试直接用)
- 2026年投资组合资产配置协议
- 电子商务平台数据分析合同
- 区块链奢侈品溯源协议
- 施工完成后验收协议
- 快递合作协议框架
- 项目进度执行协议
- 车辆保险续保合同
- 2025至2030中国X射线衍射仪(XRD)行业产业运行态势及投资规划深度研究报告
- 2026中国储备粮管理集团有限公司湖南分公司招聘(公共基础知识)综合能力测试题附答案
- 急性应激障碍护理
- 2025年高中信息技术会考真题及答案
- 带式输送机运输巷作为进风巷专项安全技术措施
- 中北大学2025年招聘编制外参编管理人员备考题库(一)及一套完整答案详解
- 挂靠车辆协议合同
- 2025滑雪场设备租赁行业市场供需分析场地设备投资运营管理模式研究
- 腰椎间盘突出患者术后护理课件
- 语文小学二年级上册期末培优试卷测试题(带答案)
- 医院护理培训课件:《高压氧临床的适应症》
评论
0/150
提交评论