购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

任务1.1
STM32学习八问

1.1.1 什么是STM32

1.STM32概述

STM32微控制器是意法半导体(ST Microelectronics,ST)有限公司出品的一系列微控制器(Micro Controller Unit,MCU)的统称。

意法半导体有限公司于1987年6月成立,由意大利的SGS微电子公司和法国的Thomson半导体公司合并而成(以下简称ST公司),是世界上最大的半导体公司之一。

STM32微控制器基于Arm Cortex®-M0、M0+、M3、M4和M7内核,这些内核是专门为高性能、低成本和低功耗的嵌入式应用设计的。STM32微控制器按内核架构可以分为以下产品系列。

● 通用微处理器产品系列:STM32MP1。

● 高性能产品系列:STM32F2、STM32F4、STM32F7、STM32H7。

● 主流产品系列:STM32F0、STM32F1、STM32F3。

● 超低功耗产品系列:STM32L0、STM32L1、STM32L4、STM32L4+。

● 无线系列:STM32WB。

图1-1-1展示了STM32微控制器的产品家族。

图1-1-1 STM32微控制器的产品家族

2.STM32微控制器的命名规则

各个型号的STM32微控制器在封装形式、引脚数量、静态随机存储器(SRAM)和闪存的大小、最高工作频率(影响产品的性能)等方面有所不同,开发人员可根据应用需求选择最合适的STM32微控制器来完成项目设计。STM32微控制器型号的各部分含义介绍如图1-1-2所示。

图1-1-2 STM32微控制器型号各组成部分含义介绍

下面以一个具体的STM32微控制器型号(STM32F407ZGT6)为例来介绍型号中各部分的含义,如表1-1-1所示。

表1-1-1 STM32微控制器型号STM32F407ZGT6的各部分含义介绍

3.STM32F4系列微控制器的系统架构

STM32F4系列微控制器在片上集成了各种功能部件,各部件之间通过总线相连。这些功能部件包括内核(Core)、系统时钟发生器、复位电路、程序存储器、数据存储器、中断控制器、调试接口以及各种外设等。

STM32F4系列微控制器的片上外设有:通用输入/输出(GPIO)端口、定时器(Timer)、模数转换器(ADC)、数模转换器(DAC)、通用同步/异步收发器(USART)、安全数字输入/输出(SDIO)接口、串行外设接口(SPI)、内部集成电路(IIC)接口、控制器区域网络(CAN)总线等。

图1-1-3展示了STM32F4系列微控制器的系统架构。

图1-1-3 STM32F4系列微控制器的系统架构

从图1-1-3中可以看到,主系统由32位多层先进的高性能总线(AHB)矩阵构成。借助AHB矩阵,MCU可以实现主控总线到被控总线的访问。这样,即使多个高速外设同时运行,系统也可以实现并发访问和高效运行。

1.1.2 什么是Arm

Arm(Advanced RISC Machines)公司是微处理器行业中的一家知名企业,它设计了大量高性能、低能耗且廉价的微处理器。Arm公司的产品适用于多个领域,如嵌入式控制、消费/教育类多媒体、数字信号处理和移动式应用等。目前全世界超过95%的智能手机和便携式计算机的微处理器都采用Arm架构。

1990年11月,Arm公司在英国剑桥正式成立,专门从事基于精简指令集计算机(Reduced Instruction Set Computer,RISC)技术的芯片设计开发工作。作为一家知识产权供应商,Arm公司并不直接生产芯片,只出售芯片设计技术的授权,而由合作公司生产具体的芯片。世界各大半导体生产商从Arm公司购买其设计的微处理器核心,根据不同的应用领域加入适当的外围电路,生产出各具特色的基于Arm内核的微处理器芯片。目前全世界有几十家半导体公司与Arm公司签订了硬件技术使用许可协议,其中包括Intel、IBM、三星半导体、NEC、SONY、飞利浦和美国国家半导体等大公司。Arm公司软件系统的合作伙伴包括微软、SUN和MRI等知名公司。图1-1-4展示了Arm公司与合作伙伴的关系。

图1-1-4 Arm公司与合作伙伴的关系

综上所述,“Arm”既代表一家公司(从事基于RISC技术的芯片设计工作,只出售芯片设计技术的授权)的名称,又代表一种技术(微处理器核心设计),还代表一类微处理器(由半导体公司生产的基于Arm架构的微处理器)。

Arm处理器经过多年的发展,产生了Arm v1、v2、v3、v4、v5、v6、v7、v8等不同版本的内核架构。自Arm v7架构开始,内核命名将Cortex作为前缀,分为Cortex-A、Cortex-R和Cortex-M三大系列。三大系列分工明确:Cortex-A系列内核面向尖端的基于虚拟内存的操作系统和用户应用,如移动领域的微处理器(MPU);Cortex-R系列内核面向对实时性要求较高的应用;Cortex-M系列内核主要用于微控制器。STM32系列微控制器就是基于Arm v7架构中的Cortex-M系列内核设计出来的。

1.1.3 用STM32能做什么

随着电子技术、计算机技术、通信技术的发展,嵌入式技术已无处不在。从随身携带的可穿戴智能设备到智慧家庭中的远程抄表系统、智能洗衣机和智能音箱,再到智慧交通中的车辆导航、流量控制和信息监测等,各种创新应用及需求不断涌现。

电子产品得以快速更新、淘汰,其组成部分中最基础的底层架构芯片——微控制器(MCU)功不可没。目前MCU已成为电子产品及行业应用解决方案中不可或缺的一部分。

ST公司在2007年发布了首款搭载Arm Cortex-M3内核的32位MCU。在之后的十余年时间里,STM32产品线又相继加入了基于Arm Cortex-M0、Cortex-M4和Cortex-M7内核的产品,产品线覆盖了通用型、低成本、超低功耗、高性能低功耗以及甚高性能等类型。正是由于STM32系列微控制器拥有完整的产品线和简单易用的应用开发生态系统,越来越多的领域的电子产品才将STM32系列微控制器作为主流的解决方案,涵盖智能硬件、智能家居、智慧城市、智慧工业、智能驾驶等领域。图1-1-5是生活中的一些常见的使用STM32系列微控制器的电子产品。

图1-1-5 使用STM32微控制器的电子产品

1.1.4 学习STM32必备的知识基础是什么

STM32系列微控制器应用开发使用的编程语言主要是C语言。在应用开发的过程中,用户还经常需要阅读电路原理图、集成电路芯片的数据手册(Datasheet)等专业资料。因此在学习STM32前,应先学习“C语言程序设计”“模拟电子电路分析与应用”“数字电子电路分析与应用”等课程。上述课程可为学习STM32奠定模拟和数字电子电路分析设计的原理与方法、基本的C语言程序设计语法与规范等知识基础。

1.1.5 学习STM32需要哪些工具与平台,有什么好的学习方法

1.学习STM32所需的工具与平台

在开始STM32学习之前,我们需要先挑选一块合适的STM32开发板。初学者不应盲目地追求开发板的功能,应以够用为原则,重点关注开发板配套的学习资料与视频是否详细、全面。目前市面上可供选购的STM32开发板主要有两种:最小系统板和外设齐全的开发板,分别如图1-1-6(a)和图1-1-6(b)所示。上述两种开发板各有优缺点:从价格上来说,最小系统板比外设齐全的开发板便宜;从提升硬件电路的构建能力来说,在使用最小系统板进行学习时,需要自行搭建外设的应用电路,这有助于学习者更好地理解外设电路的原理,并能够提高其电路板设计与制作的能力;从使用的便利性来说,外设齐全的开发板具有绝对的优势,学习者使用这种开发板可以方便地完成芯片性能的测试、程序功能的验证以及想法创意的快速应用。

图1-1-6 STM32开发板

ST公司官网显示,支持STM32开发的集成开发环境(Integrated Development Environment,IDE)有20余种,其中包括商业版IDE和免费的IDE。目前比较常用的商业版IDE有MDK-ARM STM32和IAR-EWARM,免费的IDE有SW4STM32、TrueSTUDIO和CoIDE等。另外,ST公司官方推荐使用STM32CubeMX软件可视化地进行芯片资源和管脚的配置,然后生成项目的源程序,最后导入IDE中进行编译、调试与下载。常见的支持STM32开发的IDE如图1-1-7所示。

图1-1-7 常见的支持STM32开发的IDE

2.学习STM32的方法

如果想在短时间内上手STM32微控制器的开发(即“入门STM32”),初学者需要采用科学的学习方法,制定一个完善的学习计划并严格按照计划实施。

首先,不要把时间过多地花在犹豫上。人们在学习一项新技术前,可能都会经历“犹豫期”。他们会先查阅资料,了解新技术并解决心中的一些疑问,如这个技术难不难、需要什么基础、适合不适合自己等。适当的前期调研是必要的,但过多地思索却没有实际行动是永远不可能入门的。因此,如果你对STM32开发感兴趣,那么请不要过多地犹豫,根据后面介绍的方法按部就班地开始学习吧。

然后,准备好必需的STM32开发板、开发软件和学习文档。STM32开发板与开发软件的选择可参考前文,此外,我们还需要准备以下几个必备的学习文档:一是《STM32F4xx中文参考手册》,它介绍了STM32F4系列微控制器各种外设的工作原理;二是《STM32标准外设库使用手册》,它介绍了STM32标准外设库函数API的调用方法和使用实例;三是某个型号的STM32微控制器的Datasheet,该文档有助于我们了解MCU的电气性能、管脚分布与外设功能;四是开发板生产厂商编制的产品使用手册。

最后,一个很重要的环节是制定学习计划。

(1)快速浏览一遍文档

STM32开发涉及的文档内容很多,没必要也无法一次性全部看完,但STM32开发的通用基础部分必须得看,如存储器和总线架构、电源控制、备份寄存器、复位和时钟控制、GPIO引脚及其功能复用、中断等。具体某个外设的工作原理与使用方法在用到时再仔细阅读即可。

(2)制定分阶段目标

STM32的学习过程可以分为以下3个阶段。

第一阶段是“找感觉”阶段。拿到STM32开发板之后,先把厂家配套的开发板使用手册浏览一遍,以熟悉开发板上的硬件组成。接下来可以按照使用手册中与开发板配套的测试例程的操作步骤,操作一遍开发板。本阶段的学习能让你找到感觉并建立自信。

第二阶段是“模仿”阶段。在了解了STM32开发的基本流程之后,可以选取一些例程,详细分析其工作原理与实现方法,并对例程的功能进行修改,以达到不同的运行效果。本阶段的学习能让你获得成就感。

第三阶段是“自由发挥”阶段。在熟练掌握STM32的开发流程并具备一定的开发经验之后,你可以选取并开发一个综合性较强的小项目。在项目的开发过程中,应严格按照实际的项目开发流程实施,不可遗漏一些重要的环节,如需求分析、系统功能描述、程序流程图绘制与软件文档编写等。通过本阶段的学习,你将积累宝贵的项目开发实战经验。

经过以上3个阶段的学习,你就可入门STM32微控制器的开发!

3.经验之谈

(1)遇到问题怎么办

先谈谈对待问题的态度:遇到问题时不要抱怨。俗话说得好:出现问题是给你学习的机会。因此解决问题的过程可以促进能力的提升。我们应摆正态度,正视问题。

另外,遇到问题时不要马上四处求助。当问题刚出现时,你可能还无法看清问题的全貌,也无法用最合适的语言将问题表述清楚以使别人理解并做出回答。因此在遇到问题时,应先查资料,自己尝试解决问题。

如果经过一番分析,你仍然无法解决问题且必须向他人请教时,应注意提问题的艺术,即不问不具体的问题。如“FreeRTOS如何移植?”这个问题,需要非常大的篇幅才能阐述清楚,因此类似的问题是需要避免的。换个角度,如果我们将项目实施过程中遇到的具体问题提出来并向技术“大师”请教,有经验的人可能几句话就可以解答,因此这才是正确的提问方式。

(2)学习过程中注意总结经验

在STM32的学习过程中,可能会遇到很多问题,你通过自己的努力解决了这些问题,并获得了成就感,但是过了一段时间你可能会忘记当时的解决方法与步骤。因此在学习过程中,花一点时间进行经验总结是非常有必要的。如果我们能将总结文档发布到博客中进行分享,则可为遇到相同问题的人提供帮助,何乐而不为呢?

1.1.6 如何搭建STM32F4系列微控制器的最小系统

一般来说,STM32F4xx微控制器的最小系统应包含以下6个部分。

1.STM32F4xx微控制器

STM32F407ZGT6、STM32F405RGT6等型号的微控制器均属于STM32F4xx微控制器。

2.电源

最小系统板的电源可采用多种不同的芯片组合方案。如果最小系统板采用12V直流电压适配器供电,则电源可采用“LM2596+ASM1117”的芯片组合方案,其中LM2596芯片将12V直流电压转换为4V,ASM1117芯片将4V直流电压转换为3.3V后为微控制器供电。电源的电路原理图如图1-1-8所示。

图1-1-8 电源部分的电路原理图

3.外部晶振

STM32F4系列微控制器的最小系统板需要安装两个外部晶振:高频晶振(频率为8MHz或者25MHz)和低频晶振(频率为32.768kHz)。外部晶振的电路原理图如图1-1-9所示。

图1-1-9 外部晶振的电路原理图

4.JTAG仿真调试接口

用户通过JTAG仿真调试接口将STM32开发板与J-Link或ST-Link仿真器相连,然后通过集成开发环境进行程序下载或完成在线调试。JTAG仿真调试接口的电路原理图如图1-1-10所示。

图1-1-10 JTAG仿真调试接口的电路原理图

5.启动模式配置电路

STM32微控制器有3种启动模式,它们对应的存储介质都是芯片内置的,分别是主Flash存储器、系统存储器和内置SRAM。用户通过配置两个启动模式选择引脚(BOOT0和BOOT1)可选择从哪个存储介质启动。启动模式配置方法见表1-1-2。

表1-1-2 启动模式配置方法

启动模式配置电路的原理图如图1-1-11所示。

6.人机接口——按键与LED

为了验证最小系统板的功能,我们通常会在开发板上设计若干个LED与按键。LED用于显示程序的运行情况,按键用于输入用户的指令。人机接口的电路原理图如图1-1-12所示。

图1-1-11 启动模式配置电路的原理图

图1-1-12 人机接口的电路原理图

1.1.7 STM32的软件开发模式有哪些

1.STM32的软件开发库

在学习STM32的软件开发模式之前,我们有必要先了解一下STM32的软件开发库。ST公司为开发者提供了多个软件开发库,如标准外设库、HAL库和LL库等。另外,ST公司还针对F0与L0系列的MCU推出了STM32Snippets。

上面提到的几个软件开发库中,标准外设库推出时间最早,HAL库次之,LL库是最近才新增的。目前LL库支持的芯片较少,尚未覆盖全系列产品。ST公司为这些软件开发库配套了齐备的开发文档,为开发者的使用提供了极大的方便。接下来分别对以上几种软件开发库进行介绍。

(1)STM32Snippets

STM32Snippets是ST公司推出的提供高度优化且立即可用功能的寄存器级代码段集合,以最大限度地发挥STM32微控制器应用设计的性能和能效的软件开发库。寄存器级的编程虽然可降低内存占用率,节省宝贵的处理器时钟周期,降低电源电流消耗,但通常需要开发者花费很多时间和精力研究产品手册。另外,这种开发模式的缺点是代码在不同系列的STM32微控制器之间没有可移植性。

(2)标准外设库

标准外设库(Standard Peripherals Library)是对STM32微控制器进行了完整封装的库,它包括了STM32微控制器所有外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间函数API。通过标准外设库,开发者无须深入掌握底层硬件的细节就可以轻松驱动外设,快速部署应用。因此,使用标准外设库可以减少开发者驱动片上外设的编程工作量,降低时间成本。

标准外设库早期的版本也称为固件函数库或固件库,它是目前使用最多的库,缺点是不支持近期推出的L0、L4和F7等系列的MCU。

ST公司为各个不同系列的MCU提供的标准外设库的内容是有区别的。例如,STM32F1xx的库和STM32F4xx的库在文件结构与内部实现上有所不同。因此基于标准外设库开发的程序在不同系列的MCU之间的可移植性较差。

(3)HAL库与LL库

为了减少开发者的工作量,提高程序开发效率,ST公司发布了一个新的软件开发工具产品——STM32Cube。这个产品由图形化配置工具STM32CubeMX、库函数(HAL库与LL库)以及一系列中间件(RTOS、USB库、文件系统、TCP/IP协议栈和图形库等)构成。

硬件抽象层(Hardware Abstraction Layer,HAL)库是ST公司为STM32系列微控制器推出的硬件抽象层嵌入式软件,它可以提高程序在不同系列产品之间的可移植性。

与标准外设库相比,HAL库表现出了更高的抽象整合水平。HAL库的应用程序编程接口(API)集中关注各外设的公共函数功能,定义了一套通用的、对用户友好的API函数,开发者可以轻松地将程序从一个系列的STM32微控制器移植到另一个系列。目前,HAL库支持STM32全系列产品,它是ST公司未来主推的库。

低层(Low Layer,LL)库是ST最近新增的库,与HAL库捆绑发布,其说明文档也与HAL库的文档编写在一起。例如,在STM32L4xx的HAL库说明文档中,新增了LL库这一部分。

下面从可移植性、程序优化、易用性、程序可读性和支持硬件系列等方面对各软件开发库进行比较,结果如表1-1-3所示。

表1-1-3 软件开发库的比较结果

注:“+”越多,表示对应的某项特性越好。

目前,各软件开发库对不同系列STM32微控制器的支持情况如表1-1-4所示。

表1-1-4 各软件开发库对不同系列STM32微控制器的支持情况

注:“Now”表示该软件开发库已支持相应系列的MCU,“N.A.”反之。

2.STM32的软件开发模式

开发者可基于ST公司提供的软件开发库进行应用程序的开发,常用的STM32软件开发模式主要有以下3种。

(1)基于寄存器的开发模式

基于寄存器编写的代码简练、执行效率高。这种开发模式有助于开发者从细节上了解STM32系列微控制器的架构与工作原理,但由于STM32系列微控制器的片上外设多且寄存器功能复杂,因此开发者需要花费很多时间和精力研究产品手册。这种开发模式的另一个缺点是:基于寄存器编写的代码后期维护难、可移植性差。总体来说,这种开发模式适合有较强编程功底的开发者。

(2)基于标准外设库的开发模式

基于标准外设库的开发模式对开发者的能力要求较低,开发者只要会调用API函数即可编写程序。基于标准外设库编写的代码容错性好且后期维护简单,但是其运行速度相对于基于寄存器编写的代码偏慢。另外,基于标准外设库的开发模式与基于寄存器的开发模式相比不利于开发者深入掌握STM32系列微控制器的架构与工作原理。总体来说,这种开发模式适合想要快速入门的初学者,因此大多数初学者会选择这种开发模式编写代码。

(3)基于STM32Cube的开发模式

开发者基于STM32Cube开发软件的流程如下:

● 首先,根据应用需求使用图形化配置工具对MCU片上外设进行配置;

● 然后,生成基于HAL库或LL库的初始代码;

● 最后,将生成的代码导入集成开发环境并进行编辑、编译和运行。

基于STM32Cube的开发模式的优点有以下3个。

①初始代码框架自动生成,简化了开发者新建工程、编写初始代码的过程。

②图形化配置工具操作简单、界面直观,为开发者节省了查询数据手册以了解引脚与外设功能的时间。

③HAL库的特性决定了基于STM32Cube编写的代码可移植性最好。

当然,这种开发模式也有其缺点,如函数调用关系较复杂、程序执行效率偏低以及对初学者不友好等。

本书在综合考虑各种软件开发模式难易程度的基础上,选取了对初学者比较友好的“基于标准外设库的开发模式”展开讨论。

1.1.8 STM32F4标准外设库的文件结构是怎样的

截至本书出版,在ST公司官网上可下载到的STM32F4标准外设库的最新版本是V1.8.0,将压缩包解压后的文件结构如图1-1-13所示。

对图1-1-13中文件夹与文件的说明如下:

● _htmresc文件夹存放ST公司的Logo;

● Libraries文件夹存放标准外设库的源代码与启动文件等;

● Project文件夹存放官方范例与工程模板;

● Utilities文件夹存放ST公司官方开发板的示例代码,可作为学习的参考文件;

● .chm文件是STM32F4标准外设库的API说明与编程示例。

用户在使用标准外设库进行STM32开发时,需要用到的库函数主要在Libraries文件夹中。

图1-1-13 STM32F4标准外设库的文件结构 4ybxjgXPjT3kIfyswMg+wd1IDYSxUjgmaIxVIaSQCWnbMezq29UP+ciOnFubih7Q

点击中间区域
呼出菜单
上一章
目录
下一章
×