STM32F0实战:基于HAL库开发(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-29 00:10:28

点击下载

作者:高显生

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

STM32F0实战:基于HAL库开发

STM32F0实战:基于HAL库开发试读:

前言

意法半导体公司(下文简称意法公司)近年来在国内单片机市场上的业绩可圈可点,旗下STM32系列单片机凭借其高性能、高性价比成为32位单片机的市场主力,在如今的人才市场上,会不会使用STM8和STM32单片机往往是用人方选择硬件工程师的条件之一,其重要性和业界的影响力可见一斑。在意法公司的产品线中,STM32F0系列是32位微控制器中的入门级产品。该系列基于ARM公司的Cortex-M0内核,集实时性能、低功耗运算和STM32平台的先进架构及外设于一身,既保留了对传统8位和16位市场的压倒性竞争力,又可以传承STM32用户的开发平台和程序代码,是入门STM32开发的不二之选。本书将以STM32F0系列微控制器中的旗舰型号STM32F072VBT6微控制器为例,从整体架构、存储器、时钟树、异常处理、DMA和外设模块等方面做详细的介绍,特别是对微控制器片内的bxCAN模块和USB模块的原理和开发方法进行重点介绍。

学习ARM微控制器的方法其实与学习8位机并无两样,只要找准入门的方法就会事半功倍。在接触STM32F0系列的32位单片机之前,你一定也曾经是8位单片机的“发烧友”,回想当初我们使用8051单片机点亮一个LED时,那种激动的心情至今仍难以忘怀。在此笔者向大家推荐与当初学习8051单片机相同的方法,即从一个简单的实验入手,如点亮一个LED,由局部到整体,逐步积累开发经验,增强信心,循序渐进,由浅入深。要特别注意的是不要在你还没有学会使用寄存器和函数来操作STM32的时候,就贸然研究操作系统移植、图形用户界面(GUI)以及上位机开发等。这不但会让你对学习STM32望而却步,还会使你对学习嵌入式开发的信心丧失,这是最可怕的事情。本书不拘泥于概念和原理的探究,而是立足于实践,从系统板基础电路起步,一章一个例子、一章一个实验、一章一个总结、一个模块一套或多套代码,从最基本的I/O口学起,逐步拓展到定时器、时钟、串行口、ADC等,届时你会发现其实STM32与8位单片机也没有太大差别。

近期,意法公司专门针对旗下不同系列的微控制器产品推出了一款全新的开发软件——STM32CubeMX。该软件允许用户使用图形化界面简单直观地对目标微控制器的引脚、时钟等进行初始化设置,并能针对不同的集成开发环境,如EWARM、MDK-ARM、TrueSTUDIO等快速生成开发项目,这无疑是STM32入门用户最重大的利好消息。本书将利用STM32CubeMX作为项目建立和代码初始化工具,快速生成STM32F0系列微控制器的程序架构,并在MDK-ARM软件上对代码进行进一步的编辑修改,直至完成最终的项目开发。

作为STM32微控制器开发的新手,往往在从寄存器开发入手还是从固件库开发入手的选择上纠结不定。业界对开发STM32系列微控制器的方法通常也持有两种不同的观点:一种认为寄存器开发能使开发者明晰单片机内部结构,编写出简洁的代码,执行效率高;而另一种则认为固件库开发能避开对寄存器操作,减轻编程者的压力,还可以为开发者访问底层硬件提供一个中间应用编程界面(API),并方便上层软件的调用。笔者认为,作为开发STM32的硬件工程师,以上两种开发方法都应该掌握,原因是寄存器开发能加深对芯片内部结构和功能的理解,是微控制器入门的必经之路,而固件库开发则是一种趋势,它的编程思想更加先进,对应代码更规范,更具有可读性。本书基于STM32CubeMX软件自带的HAL库开发——HAL库不同于以往的标准外设库,是意法公司最新推出的替代标准外设库的产品,书内附HAL库、函数、结构、常量等的详细说明及开发实例。

为了配合本书的出版,相应的开发板和视频教程“STM32奇幻漂流记”也会在近期由“睿芯美微”淘宝网店同步推出,网址为http://shop59521455.taobao.com。由于作者水平有限,加之写作时间仓促,书中错误在所难免,在此恳请读者和有识之士给予批评斧正,也欢迎大家通过互联网与笔者分享STM32的开发心得。

作者QQ:710878209,微信号:gpmza2000。

本书得以出版,首先要特别感谢机械工业出版社华章公司朱捷等资深编辑,他们对本书的选题、立意和编纂给予了大力支持和悉心指导。其次要感谢的是广大热心网友,你们为本书内容、结构、写法献言献策,给予了莫大关心和支持。再次要感谢笔者的家人,在笔者奋笔疾书的日日夜夜照顾饮食起居,让笔者能更加专注于本书的创作。

尺有所短,寸有所长。每个人的天赋迥异,如果你发现自己对电子产业时常会萌发出一些新奇的想法或创意,请一定将其捕捉住,并且尽早阅读本书,那时你会发现使用STM32系列微控制器会让你的想法变为现实,会让你的创意尽情表达,这也许就是你走上研发之路的起点,你的人生也会因此而更加精彩!再次感谢你选择本书,祝学业有成,事业顺达!高显生于哈尔滨第一篇系统架构

STM32F0系列是意法半导体32位微控制器中的入门级产品。但入门不代表低性能,相反,STM32F0系列微控制器恰恰是集高运算能力和低功耗特性于一身的、极具竞争力的产品。全系列微控制器基于ARM公司的Cortex-M0高性能内核,集实时性、低功耗运算和STM32平台的先进架构及外设于一身,既保留了对传统8位和16位微控制器市场的压倒性竞争力,又传承了STM32用户的开发平台和程序代码,为成本敏感型应用带来了更加灵活的选择。不仅如此,STM32F0系列微控制器通过集成了USB 2.0和CAN总线接口,提供了更加丰富的通信功能选项,成为智能电话、通信网关、智能能源器件、多媒体设备、游戏终端等众多便携式消费类应用的理想选择。

本篇将以STM32F072VBT6微控制器为例,重点讲述片内系统架构、存储器、系统配置、时钟以及电源管理等内容。在编程方法上,使用了STM32CubeMX软件生成开发项目,并且完成对时钟、外设模块的初始化,之后编辑用户应用程序源文件,使用STM32CubeMX软件提供的HAL库来实现对外设模块的运行控制。第1章“芯”系ARM

在剑桥郊外一个不起眼的商业园区中,坐落着几栋随意排列的办公楼,这就是英国最成功的科技公司之一——ARM公司的总部所在地。也许你对ARM这个名字还不太熟悉,但它的产品却在几乎所有智能手机中处于核心地位。从本章开始,我们将一起步入ARM的世界,领略它惊人的运算和处理能力。1.1 强劲的ARM芯

ARM(Advanced RISC Machines)公司是微控制器行业的一家知名企业,设计了大量高性能、廉价、低耗能的RISC微控制器和相关技术及软件。通过将其技术授权给世界上许多著名的半导体、软件和OEM厂商,ARM公司成为许多全球性RISC标准的缔造者。目前总共有30余家半导体公司与ARM签订了硬件技术使用许可协议,其中包括Intel、IBM、LG半导体、NEC、SONY、飞利浦和国家半导体等知名企业。1.1.1 最成功的科技公司

采用ARM技术知识产权的微处理器已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场,基于ARM技术的微处理器应用约占32位RISC微处理器75%以上的市场份额。目前,全世界超过95%的智能手机和平板电脑都采用ARM架构,ARM技术正在逐步渗入我们生活的方方面面。

20世纪90年代,ARM业绩平平,处理器的出货量徘徊不前。由于资金短缺,ARM做出了一个意义深远的决定,不再制造芯片,只将芯片的设计方案授权给其他公司,由它们来生产。正是这个模式,最终使得ARM芯片遍地开花。进入21世纪,由于手机制造行业的快速发展,出货量呈现爆炸式增长,ARM处理器占据了全球智能手机市场的主导地位。2016年7月,ARM被日本软银收购,并欲成为下一个潜力巨大的科技市场即物联网的领导者。

在传统的计算设备中,如笔记本电脑、台式计算机和服务器等,Intel和AMD两家公司生产的处理器占据了绝大多数的市场份额。应当说,单纯从计算能力来讲,Intel和AMD的处理器都是非常强大的,大量机器运行的操作系统也都依靠这两家公司的芯片产品,包括Windows、Mac OS和Linux。但强大的计算能力带来的是功耗的成倍提升,以Intel的处理器为例,其平均80W的功率显然不是一般移动设备所能承受的。而由ARM公司授权生产的处理器运行功率非常小,一个多核心的ARM处理器大约只有4W的功率,并能让整个系统都运行在一个芯片上。这一特点使其产品特别适合用于个人电子设备,更小的功率意味着更小的占用空间、更好的散热和更加经济的成本。这也是ARM处理器成功的关键。1.1.2 ARMv6-M架构

Cortex是ARM公司一个处理器系列的名称。ARM公司最初的处理器产品都以数字命名,如ARM7、ARM9和ARM11等。在ARM11之后,新推出的处理器产品则改用Cortex命名。Cortex系列基于先进的ARMv7架构。按照应用领域不同,基于ARMv7架构的Cortex处理器系列所采用的技术也不尽相同:基于v7A的称为Cortex-A系列,定位为应用处理器,支持复杂的运算,主要面向尖端的、基于虚拟内存的操作系统和用户应用,代表型号如Cortex-A9;基于v7R的称为Cortex-R系列,定位为实时高性能处理器,主要针对实时系统的应用,如硬盘控制器和汽车控制系统等,代表型号为Cortex-R4;基于v7M的称为Cortex-M系列,定位为微控制器处理器,用于工业控制和低成本消费产品等嵌入式系统,代表型号为Cortex-M3。我们所熟悉的STM32F103xx就是基于Cortex-M3内核的微控制器产品。

也许好多好的想法都源于偶然,就像牛顿的万有引力定律与苹果的关系一样。在基于Cortex-M3内核的微控制器产品获得成功后,一个全新的设计理念诞生了,这就是基于Cortex-M0的新系列微控制器产品。Cortex-M0的设计理念源于酒吧里几位工程师的对话。作为ARM的开发者,他们都在寻找一种很小的32位处理器,这个想法很快就成为一个成熟的项目(代号为Swift),于是在2009年,Cortex-M0设计完成,并在很短的时间里便成为最成功的ARM处理器产品之一。

Cortex-M0系列并没有基于传统的ARMv7架构,而是在Cortex-M3的基础上,在易用性和低功耗方面加以改进,以ARMv7-M架构的异常处理和调试特性为基础,使用了ARMv6架构的Thumb指令集,从而设计出了崭新的ARMv6-M架构。1.1.3 Cortex-M0处理器简介

Cortex-M0系列处理器具有低功耗和操作简单的特点,主要面向的是入门级市场。为了实现这一目的,并且能够保留Cortex-M3特有的先进高端特性,Cortex-M0系列的硅片面积进一步缩小,并且代码量极少,这使得该系列处理器能够在低成本应用中实现32位的高性能。Cortex-M3和Cortex-M0指令集之间的对应关系如图1-1所示。

不仅如此,为了降低功耗,微控制器的结构也做了重大修改,从哈佛结构改为冯·诺依曼结构(单总线接口),进一步降低了系统的复杂性。Cortex-M0使用32位的精简指令集(RISC)。该指令集被称为Thumb,其中增加了几条ARMv6架构的指令,并且纳入了Thumb-2指令集的部分指令。Cortex-M0处理器的内部结构如图1-2所示。图1-1 Cortex-M0指令集(图片源自ST技术手册)图1-2 Cortex-M0处理器的内部结构

Cortex-M0处理器的各部分功能如下。

1)处理器内核包含寄存器组、算术逻辑单元(ALU)、数据总线和控制逻辑。按照设计要求,流水线可以工作在取指、译码和执行三种状态下。

2)嵌套向量中断控制器(NVIC)用于处理最多32个中断请求和一个不可屏蔽中断(NMI)输入,NVIC需要比较正在执行中断和处于请求状态中断的优先级,然后自动执行高优先级的中断。

3)唤醒中断控制器(WIC)在低功耗应用中使用。当微控制器的大部分模块关闭后,微控制器会进入待机状态。此时,WIC可以在NVIC和处理器处于休眠的情况下执行中断监测功能,当WIC检测到一个中断时,会通知电源管理器给系统上电,让NVIC和处理器内核执行剩下的中断过程。

4)调试子系统由多个模块构成,用于处理调试控制、程序断点和数据监视点。当调试进行时,处理器内核会自动进入暂停状态。

5)JTAG和SWD接口提供了通向内部总线系统和调试功能的入口。JTAG一般用作测试功能,而SWD则是一种新型接口,只需两根线(时钟线和数据线)就可以完成芯片编程或实现与JTAG相同的调试功能。

6)内部总线系统、处理器内核的数据通路以及AHB-LITE总线均为32位宽,其中AHB-LITE是片上总线协议,应用于多款ARM处理器中。AMBA是ARM开发的总线架构,已经广泛应用于IC设计领域。1.1.4 Cortex-M0处理器的特点

Cortex-M0微控制器功耗非常低、门数量少、代码占用空间小,能在8位微控制器的价位上获得32位微控制器的性能,可明显降低系统成本,同时能保留对功能强大的Cortex-M3微控制器开发工具的兼容能力。Cortex-M0微控制器的主要特点如下。

1.功耗低

降低功耗是Cortex-M0处理器的设计初衷,在使用65nm半导体制造工艺时,处理器的功耗为12μW/MHz,在180nm工艺时功耗也仅为85μW/MHz,这对于32位处理器来说已经是很低的水平了。在Cortex-M0处理器的开发过程中,ARM应用了多种技术和优化措施,以确保硅片面积尽量小,并对处理器的每一部分都经过了小心处理和反复验证以降低功耗。通过尽量减少门数量,直接降低了芯片的动态功耗和漏电流:最低配置的ARM处理器仅需12 000个门;为了追求更佳的性能,门的数量通常控制在17 000~25 000个,这已经同一般的16位处理器差不多了,但性能却是16位处理器的两倍有余。

2.效率高

Cortex-M0处理器拥有高效率的架构,这主要归功于Thumb指令集以及高度优化的硬件设计,可以使用较低的时钟频率来降低动态电流并获取高性能。Cortex-M0处理器片内有快速乘法器(单周期)和小型乘法器(32周期)可供选择,在使用快速乘法器时,处理能力可以达到0.9 DMIPS/MHz,而使用小型乘法器时,可以达到0.85 DMIPS/MHz。这个性能与老式台式机使用的80486DX2的0.81 DMIPS/MHz处理能力差不多,但从硅片面积和功耗方面来看就有相当大的差距了。

3.架构先进

Cortex-M0本身在架构上支持低功耗,还提供了睡眠和深度睡眠两种低功耗模式,同时也支持Sleep-on-exit功能,即一旦中断处理完成,微控制器会重返睡眠模式,从而缩短微控制器处于活跃状态的时间。另外,Cortex-M0还提供了可选的WIC功能,在深度睡眠模式下整个系统时钟关闭,只保持WIC处于工作状态,用于在紧急时刻唤醒微控制器。

4.中断时间确定

内置的嵌套向量中断控制器(NVIC)使中断配置和异常处理简洁而迅速。当接收到中断请求后,中断处理会自动执行,而且无须软件查找中断向量的位置,中断响应时间确定,同时保留了不可屏蔽中断(NMI)输入,对打造高可靠性系统提供了可能。

5.软件可移植

Cortex-M系列处理器主要是用于微控制器产品,其中Cortex-M3处理器首先发布,其功能丰富且性能出众;Cortex-M1随后发布,主要用于FPGA产品。而Cortex-M0则是Cortex-M系列发布的第三个处理器。尽管这些处理器的应用场景不同,但它们都有一致的内核架构、相似的系统模型和兼容的指令集。

Cortex-M3处理器基于ARMv7-M内核架构,使用Thumb-2指令集,而Cortex-M0和Cortex-M1处理器都是基于ARMv6-M内核架构,使用Thumb指令集。Thumb-2指令集是Thumb指令集的超集,因此在Cortex-M0上设计的程序可以在完全不用修改的情况下应用在Cortex-M3处理器上。

对于所有基于Cortex-M内核的微控制器,其软件代码都可以使用C语言来编写,这样编程时间更短,而且可移植性强。另外,Cortex-M0架构支持嵌入式操作系统——在一些复杂的应用中,使用嵌入式操作系统会让并行任务处理变得更加得心应手。1.1.5 RISC架构

RISC(Reduced Instruction Set Computer,精简指令集计算机)是一种执行较少类型计算机指令的微控制器。ARM公司设计的微控制器均基于RISC架构,它能够以更快的速度执行操作。因为计算机执行每个指令类型都需要额外的晶体管和电路元件,指令集越大,微控制器就会变得越复杂,执行操作也会更慢,因此使用RISC架构的微控制器可以增加工作效率并降低功耗。

RISC微控制器不仅精简了指令系统,还采用了超流水线结构。虽然它们的指令数目只有几十条,却大大增强了并行处理能力,可以在单一指令周期内容纳多个并行操作。另外,RISC芯片的工作频率一般在400MHz数量级,时钟频率低,功率消耗少,温升也少,机器不易发生故障和老化,提高了系统的可靠性。1.1.6 AMBA总线

ARM研发的AMBA(Advanced Microcontroller Bus Architecture)提供了一种特殊的机制,可将RISC微控制器集成在其他IP芯核和外设中。2.0版的AMBA标准中定义了三组总线:高级高性能总线(Advanced High-performance Bus,AHB)、高级系统总线(Advanced System Bus,ASB)和高级外设总线(Advanced Peripheral Bus,APB)。

1.AHB

高级高性能总线由主模块、从模块和基础结构三部分组成,整个AHB上的传输都由主模块发出,由从模块负责回应。其基本结构由仲裁器、主模块到从模块的多路选择器、从模块到主模块的多路选择器、译码器、虚拟从模块、虚拟主模块等组成,是应用于高性能、高时钟频率的系统模块。它构成了高性能的系统骨干总线。

2.ASB

高级系统总线适用于连接高性能的系统模块。它的读/写数据总线采用的是同一条双向数据总线,可以在某些高速且不需要使用AHB的场合作为系统总线使用,并可以支持处理器、片上存储器和片外处理器接口以及与低功耗外部单元之间的连接。

3.APB

APB是本地二级总线,通过桥与AHB或ASB相连,主要是为了满足不需要高性能流水线接口或不需要高带宽接口的设备互连。APB只有一个APB桥,用于将来自于AHB或ASB的信号转换为合适的形式以满足挂接在APB上设备的要求,如串行口、定时器等。1.1.7 微控制器软件接口标准(CMSIS)

随着嵌入式软件越来越复杂,软件代码的兼容性和可重用性变得非常重要,这样既可减轻项目开发者的压力、缩短开发时间,又方便第三方软件组件的使用。为了使这些软件产品具有高度的兼容性和可移植性,ARM同许多微控制器和软件供应商共同努力,为Cortex-M处理器产品开发出一个通用的软件接口标准CMSIS。该标准相当于Cortex-M处理器的跨平台驱动程序,用于在不同的开发环境中调用。

1.CMSIS的软件功能

CMSIS通常作为微控制器厂商提供的设备驱动库的一部分来使用,它提供了一种标准化的软件接口,并且针对Cortex-M0、Cortex-M3等处理器特性,定义了相应的操作函数,这也提高了软件的可移植性。CMSIS的软件功能如图1-3所示。

图1-3中,采用ARM内核的微控制器产品由Cortex-M0核和外设构成。对于外设来说,微控制器厂商通常会提供标准外设函数库来作为其外设产品的驱动,而CMSIS则是ARM公司为Cortex-M系列内核定义的驱动函数库。CMSIS提供了以下标准化的内容。

·标准化的操作函数,用于访问NVIC、系统控制块(SCB)以及SysTick定时器。

·使用Cortex-M微控制器特殊指令的标准化函数。因为有些指令不能由普通的C代码生成,如果需要这些指令,就可以使用CMSIS提供的相应函数来实现。

·系统异常处理的标准化命名。当系统异常有了标准化命名以后,在一个操作系统里支持不同的设备驱动库也变得更加容易。

·系统初始化函数的标准化命名。通用的系统初始化函数被命名为“SystemInit()”,提高了软件的兼容程度。

·为时钟频率信息建立标准化的变量。这个变量被命名为“SystemFreq”或者“System CoreClock”,用于确定处理器的时钟频率。图1-3 CMSIS的软件功能

2.CMSIS的组织结构

CMSIS被集成在微控制器供应商提供的设备驱动包中。当使用设备驱动库进行软件开发时,就已经在使用CMSIS了。CMSIS设备驱动库具有相似的内核函数和接口,一旦使用了一种Cortex-M微控制器,就可以触类旁通,很快上手另外一款微控制器产品。CMSIS的软件结构可以分为核心外设访问层、中间件访问层、设备外设访问层和外设访问函数等,具体如图1-4所示。CMSIS提供的驱动文件功能详见表1-1。图1-4 CMSIS结构表1-1 CMSIS中的文件1.2 STM32系列微控制器

意法公司推出的STM32F0系列微控制器集成了高性能的32位ARM Cortex-M0 RISC内核,内嵌高速存储器,具有广泛增强的外设和I/O端口、标准的通信接口、多个定时器、ADC和DAC转换设备,以及一整套可以用于低功耗应用的节电模式设计。这些特点使得STM32F0系列产品可以适用于各种应用,如家电控制、用户界面、手持设备、A/V接收器和数字TV、PC辅助设备、游戏和GPS平台、工业应用、PCL、逆变器、打印机、扫描仪、报警系统和视频应用等。1.2.1 STM32微控制器家族

从意法公司的网站上,我们能清楚地看到该公司旗下微控制器的产品线构成。意法公司的微控制器产品可以分为低成本的8位单片机产品STM8系列、基于32位ARM处理器的STM32系列以及32位的SPC56车用系列。意法公司的微控制器产品线结构如图1-5所示。

在意法公司微控制器产品中,目前型号最多、功能最丰富的当属STM32系列。该系列产品基于ARM Cortex-M内核,可划分成超低功耗系列、主流系列和高性能系列,分别基于Cortex-M0/M0+、Cortex-M3、Cortex-M4和Cortex-M7内核,为微控制器用户提供多种选择。STM32系列微控制器产品家族如图1-6所示。1.2.2 STM32的命名规则

STM32系列微控制器产品遵循统一的命名规则,产品型号的最开始部分“STM32”代表意法公司的32位产品家族,之后的型号定义规则如图1-7所示。图1-5 微控制器产品线结构(源自意法公司网站)

·产品类型

·F=通用

·L=超低功耗

·设备子系列

数字越大,即表示具有更多的功能。例如,STM32L0系列包括STM32L051、L052、L053、L061、L062、L063等子系列,其中STM32L06x系列具有AES功能,但STM32L05x系列没有这样的功能。另外,设备子系列编号的最后一个数字显示器件具备的功能:

·1=通用产品

·2=具备USB接口

·3=具备USB接口和液晶控制器

·引脚数量

·F=20引脚

·G=28引脚

·K=32引脚

·T=36引脚图1-6 STM32系列微控制器产品家族(源自意法公司网站)图1-7 STM32系列微控制器命名规则

·S=44引脚

·C=48引脚

·R=64引脚(或66引脚)

·M=80引脚

·O=90引脚

·V=100引脚

·Q=132引脚

·Z=144引脚

·I=176(+25)引脚

·B=208引脚

·N=216引脚

·Flash存储器容量

·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=1024KB Flash存储器

·I=2048KB Flash存储器

·封装

·B=SDIP

·H=BGA

·M=SO

·P=TSSOP

·T=LQFP

·U=VFQFPN

·Y=WLCSP1.2.3 STM32F0系列微控制器功能概述

STM32F0系列微控制器大致可以分成三类产品:STM32F030系列是F0家族中的低成本系列,其特点是引脚和外设数量较少,价格也经济实惠;STM32F0x1系列是主流产品,有着较多的产品型号、较多的外设、多种封装选择和适当的价格,是产品开发设计的首选;STM32F0x2系列代表F0家族中的最强阵容,该类产品在F0x1系列的基础上增加了全速USB2.0接口和CAN通信接口,是性能和低功耗的有机组合。本书余下的篇幅将以STM32F072VBT6微控制器为例,力求对其功能进行较为全面的叙述。

STM32F072VBT6微控制器基于ARM Cortex-M0的32位RISC内核,工作频率为48MHz,具有高达128KB的闪存和16KB的SRAM存储器,具有多个增强型外设,如定时器、串行通信接口、ADC、DAC、CAN、USB和I/O接口等。STM32F072家族微控制器的特性和外设配置详见表1-2。表1-2 STM32F072家族器件特性和外设配置

1.内核

STM32F072家族微控制器内核采用了ARM公司的32位Cortex-M0 CPU,最大频率为48MHz,在低成本、低功耗的前提下提供了出色的运算性能、较高的代码执行效率和快速的中断响应。

2.存储器

·Flash存储器:配置有64~128KB的Flash存储器,这些存储器可以被分成两部分,其中内部存储器区域用于存放程序和数据,选项字节则用于设定芯片的工作特性或为存储区域提供读写保护。

·SRAM存储器:内部16KB SRAM能以CPU的速度进行读写访问,无需等待周期,内置的奇偶校验功能可以防止在复杂苛刻的应用条件下发生错误。

3.CRC计算单元

独立的CRC(循环冗余校验)计算单元可以依靠硬件计算并生成CRC码,用于检验数据传送或存储的完整性。

4.DMA控制器

7通道DMA控制器用于管理存储器到存储器、外设到存储器以及存储器到外设的数据传送。每个DMA通道都连接到专用的DMA请求,并且每个通道都支持软件触发。使用DMA可以极大地减轻CPU的数据传输压力,提高运算性能。

5.复位和供电管理

·STM32F072家族微控制器的电源供电分为几个部分:VDD的供电电压为2.0~3.6V,用于给I/O口和内部电压调节器供电;V的供DDA电电压同样为2.0~3.6V,用于给ADC、复位时钟、RC振荡器和PLL供电;V的供电电压为1.6~3.6V,当微控制器的V掉电后,BATDDV用于给RTC、外部32kHz时钟振荡器和备份寄存器供电。BAT

·微控制器内部集成了上电复位(POR)和掉电复位(PDR)电路。这两个电路会一直保持有效,以确保微控制器在2V阈值之上正常工作。当电源电压低于规定的阈值V/V时,微控制器将处于PORPDR复位状态。

·微控制器还内嵌一个可编程的电压检测器(PVD)以监控VDD电源。当V低于或高于V阈值时,会引发中断用于产生警告信息DDPVD或将微控制器置于某个安全状态。

·电压调节器有主电源(MR)、低功耗(LPR)和掉电三种工作模式。其中,MR用于正常工作模式,功率消耗最大;LPR用于停止(STOP)模式,这时微控制器工作在低功耗模式下;掉电用于待机(STANDBY)模式,电压调节器输出为高阻状态,内核电路掉电,寄存器和SRAM的内容全部丢失。

6.低功耗模式

STM32F072家族微控制器支持睡眠、停止和待机三种低功耗模式,以便在低电源功耗、快速启动时间和可唤醒三者之间实现最佳的低功耗解决方案。

7.时钟管理

STM32F072家族微控制器可用的时钟源有4~32MHz外部晶体振荡器、32kHz的RTC振荡器、内部8MHz RC振荡器(带×6锁相环倍频)、内部40kHz RC振荡器和48MHz振荡器。当微控制器复位后,默认情况下选择内部的8MHz RC振荡器作为默认的时钟。通过配置也可以选择4~32MHz的外部时钟。如果外部时钟出现故障,系统会自动切换到内部RC振荡器上继续运行。通过设定相应的预分频器,软件可以配置AHB和APB总线频率,AHB和APB的最大频率为48MHz。

8.通用输入输出接口(GPIO)

STM32F072家族微控制器最多可以配置87个高速I/O口,每个GPIO引脚都可以通过软件配置为输出(上拉或开漏)、输入(带或不带上拉/下拉)或作为外设的复用功能,所有GPIO可配置为外部中断输入。

9.模-数转换器(ADC)

STM32F072家族微控制器内部集成有1个12位模-数转换器,转换范围为0~3.6V,最多有16个外部通道和3个内部通道(温度传感器、参考电压和V电压测量)。ADC可以执行单次或扫描转换。BATADC还具有模拟看门狗功能,允许精确地监测一个或多个模拟电压,当模拟电压超出可编程阈值时会产生一个中断。

10.数-模转换器(DAC)

12位的DAC转换器可以将数字信号转换成模拟电压信号输出,内部集成有运算放大器,可以选择电压或电流输出,DAC可以通过定时器触发输出。

11.模拟比较器

微控制器内嵌两个快速低功耗轨至轨(rail to rail)模拟比较器,具有可编程的参考电压源。模拟比较器可以将微控制器从STOP模式中唤醒、产生中断或中止定时器,还可组合成窗口比较器。

12.触摸感应控制器

独立触摸感应控制器(TSC)具有最多24个电容感应通道,用于I/O端口上触控感应采集,支持接近、触摸按键、线性和旋转触摸感应控制。

13.实时时钟(RTC)

实时时钟(RTC)是一个独立BCD编码的定时器/计数器,用于产生亚秒、秒、分、时、周、天、日、月、年等时间信息,时间数据采用BCD编码格式,并可自动调整月天数;可编程闹钟可以将微控制器从停止或待机中唤醒;具有两个可编程防侵入检测引脚,当检测到侵入事件时可以将微控制器从停止或待机模式中唤醒;时间戳功能用来在发生时间戳事件时,保存日历内容并唤醒微控制器。

14.定时器

STM32F072家族微控制器内部配置有1个16位高级控制定时器,用于6通道PWM输出,并且带有死区时间发生器和紧急刹车功能;1个32位和7个16位定时器,具有最多4路输入捕获或输出比较通道,可用于红外控制和解码或DAC控制;1个独立的窗口看门狗定时器和24位向下计数的SysTick定时器。

15.通信接口2

·2个IC接口:支持快速脉冲模式(1Mbit/s),其中1个还支持SMBus/PMBus功能。

·4个USART接口:支持主同步SPI和Modem控制功能,其中2个还支持ISO7816接口、LIN、IrDA、自动波特率检测和唤醒功能。

·2个SPI接口:通信速率18Mbit/s,支持4到16位可编程字长,支2持IS接口。

·1个CAN通信接口。

·1个USB2.0全速接口,可以使用内部48MHz振荡器时钟运行。

16.高清晰度多媒体接口(HDMI)

微控制器内嵌HDM-CEC控制器,提供消费电子控制(CEC)协议的硬件支持,可供多媒体设备间的高级控制和互联使用。第2章开发环境

当我们还没有掌控一个微控制器时,它就好像摆在我们面前的一个魔盒,让人无从下手,打开这个魔盒需要两把“钥匙”,即软、硬件开发工具。让人欣喜的是,为STM32F0系列微控制器开发应用程序所需要的开发工具都非常廉价,甚至低于开发绝大多数8位微控制器的投入,这也在一定程度上促进了STM32F0系列微控制器的普及和推广。本章从介绍程序开发所需要的软、硬件资源入手,教你如何使用STM32CubeMX软件快速生成开发项目。2.1 软件开发工具

STM32F0系列微控制器的软件开发工具种类非常丰富,且以第三方软件厂商提供的软件居多,常用的软件开发工具有KEIL公司的MDK-ARM、IAR公司的EWARM集成开发环境等。其中MDK-ARM软件与开发8051系列单片机的集成开发环境C51同样出自KEIL公司,会让从51单片机过渡到ARM的开发者有一种似曾相识的感觉,这也许是很多ARM用户坚持使用MDK-ARM软件的原因之一。

在使用第三方厂商提供的集成开发环境为STM32F0系列微控制器开发应用程序时,一方面需要对集成开发环境做出必要的设置,使其能与目标芯片的特性相匹配。另一方面,基于ARM内核的芯片内部功能均较为复杂,为了降低开发难度、增加代码的可移植性,往往使用集成的函数库来为微控制器开发应用程序,所以在设置集成开发环境时,还需要考虑将适合的函数库添加到集成开发环境中来。以上两方面看似简单,实则会让大多数的ARM初学者就此止步。

作为STM32系列微控制器的生产商,意法公司比任何一家第三方的软件厂商都更了解自己的产品。为了简化设置并降低开发难度,意法公司专门针对旗下不同系列的微控制器产品推出了一款全新的开发软件——STM32CubeMX,该软件允许用户使用图形化界面简单直观地对目标微控制器的引脚、时钟和外设等进行初始化设置,并能针对不同的集成开发环境,如MDK-ARM、EWARM、TrueSTUDIO等快速生成开发项目,之后在相应的集成开发环境中调用生成的项目即可对程序进行进一步的开发。

本书介绍的STM32F0系列微控制器的软件开发就是应用上述方法,即首先使用STM32CubeMX软件生成开发项目,之后将开发项目转移至MDK-ARM软件中,对项目代码进行进一步的编写、编译直至生成相应的HEX文件并烧写至目标微控制器中。以下,我们将围绕MDK-ARM和STM32CubeMX这两个开发软件进行介绍。2.1.1 MDK-ARM集成开发环境

使用集成开发环境为微控制器开发应用程序已经是行业的标准做法,各大芯片厂商也都通过各种方式开发或完善适合自己产品的集成开发环境。集成开发环境通常是将微控制器软件开发的全过程整合到一个软件中,从项目的建立、源代码的编写、编译、仿真调试直至程序的烧写都由一个软件来完成,这样做能让用户更加专注于产品的设计和开发。

如果你曾经是8051系列单片机的用户,那么你一定对大名鼎鼎的KEIL C51有所了解,应当说使用KEIL C51开发8051系列单片机是用户的不二之选。其实作为一家业界领先的微控制器软件开发工具供应商,KEIL公司的软件产品也涵盖了基于ARM内核的微控制器产品的开发。特别是自2005年被ARM公司收购之后,KEIL公司更加集中精力为高速发展的32位微控制器市场提供完整的解决方案。

KEIL公司的集成开发环境(IDE)通常冠以μVision的名称,支持包括工程管理、源代码编辑、编译、下载调试和模拟仿真等多种功能。按照推出时间的不同,μVision有μVision2、μVision3、μVision4和μVision5四个版本,目前最新的版本是μVision5。确切地说,μVision只是提供了一个环境,让开发者易于操作,要完成具体的开发过程还需要相关的开发工具配合才行。目前在μVision5开发环境下,支持以下四种开发工具:

1)MDK-ARM(Microcontroller Development Kit-ARM):专为32位微控制器定制的开发工具,支持ARM和Cortex等微控制器内核。

2)KEIL C51:KEIL公司开发的支持绝大部分8051内核微控制器的开发工具。

3)KEIL C166:KEIL公司开发的支持C166、XC166和XC2000系列微控制器的开发工具。

4)KEIL C251:KEIL公司开发的支持基于80251内核微控制器的开发工具。

自2013年以来,KEIL公司正式推出了MDK-ARM V5版本。该版本使用μVision5集成开发环境,是目前针对ARM微控制器,尤其是ARM Cortex-M内核的微控制器的最佳集成开发工具之一。MDK-ARM V5加强了针对Cortex-M微控制器开发的支持,并且对传统的开发模式和界面进行了升级。MDK-ARM软件目前的最新版本是V5.20,其内部框架结构如图2-1所示。图2-1 MDK-ARM框架结构

从软件的框架结构图中可以看出,MDK-ARM V5将编译器与器件分离,细分成MDK Core和Software Packs两部分,其中Software Packs部分可以独立于工具链进行新芯片支持和中间件的升级。

·MDK Core(MDK核心)

MDK Core包含微控制器开发的所有组件,包括IDE(μVision5)、编辑器、C/C++编译器、μVision调试跟踪器和安装包管理器(Pack Installer)等,用于完成程序的编写、编译、仿真调试和代码烧写等任务。

·Software Packs(软件安装包)

Software Packs分为Device、CMSIS、MDK Professional Middleware三部分,包含了各类可用的设备驱动。软件安装包支持完整的微控制器系列,如ARM7、ARM9、Cortex-M0/M0+/M1/M3/M4等ARM内核芯片,另外也提供了对CMSIS库、中间件、开发板、示例代码和工程样板的支持,并可以随时将新增器件添加至MDK内核中。

按照授权的不同,MDK-ARM软件有四个不同级别的版本,分别是MDK-Lite、MDK-Basic、MDK-Standard和MDK-Professional。其中MDK-Lite(32KB)版可免费下载使用,不需要序列号或授权许可密钥。MDK-ARM软件具体下载方法如下:

1)在浏览器中输入网址“http://www.keil.com/”,访问KEIL公司网站,单击“Product Downloads”项,如图2-2所示。图2-2 下载MDK-ARM软件(一)

2)浏览器的“Download Products”窗口中列出了KEIL公司的四种软件开发工具,单击“MDK-ARM”项,如图2-3所示。图2-3 下载MDK-ARM软件(二)

3)单击“MDK520.EXE”项即可启动下载任务,如图2-4所示。图2-4 下载MDK-ARM软件(三)

4)在MDK-ARM软件下载完成后,还需要下载STM32F0系列微控制器的软件安装包,方法是在浏览器中输入网址“http://www.keil.com/dd2/Pack/”,即可进入软件安装包下载页面,如图2-5所示。图2-5 下载软件安装包(一)

5)在“MDK5 Software Packs”页面下找到目标器件所在的系列,如开发STM32F072VB微控制器则需要安装“STM32F0”系列,单击该系列后面的下载按钮,即可将该系列的安装包下载到你的PC中,如图2-6所示。2.1.2 安装MDK-ARM软件

MDK-ARM V5.20软件和相应的软件安装包成功下载后,即可将其安装在PC上,具体方法如下。

1)双击MDK-ARM V5.20软件的安装文件即可启动安装过程,如图2-7所示。

2)在弹出的窗口中勾选“I agree to all…”选项,并单击“Next”按钮,如图2-8所示。

3)软件安装时需要用户指定安装路径,这里需要注意的是V5.20版本的MDK-ARM软件的安装路径分为“Core”和“Pack”两个部分,此处保持默认的设置并单击“Next”按钮,如图2-9所示。

4)在弹出的窗口中依次输入用户的基本信息,并单击“Next”按钮,如图2-10所示。

5)软件自动进入文件拷贝过程,这一过程大约需要几分钟,如图2-11所示。图2-6 下载软件安装包(二)图2-7 安装MDK-ARM软件(一)

6)文件拷贝结束后会提示安装设备驱动程序,单击“安装”按钮,如图2-12所示。

7)单击“Finish”按钮结束安装,如图2-13所示。

8)MDK-ARM软件安装完成后会自动弹出软件安装包的欢迎窗口,单击“OK”按钮关闭此窗口,如图2-14所示。图2-8 安装MDK-ARM软件(二)图2-9 安装MDK-ARM软件(三)图2-10 安装MDK-ARM软件(四)图2-11 安装MDK-ARM软件(五)图2-12 安装MDK-ARM软件(六)图2-13 安装MDK-ARM软件(七)

9)MDK-ARM软件会自动连接互联网并开始下载软件安装包。这里需要说明的是,使用此方法下载和安装软件安装包需要耗费较长时间,此时可以单击窗口右上方的“×”按钮,中止本次安装包的下载和安装进程,而改用其他方式来下载和安装软件安装包,如图2-15所示。图2-14 安装MDK-ARM软件(八)图2-15 安装MDK-ARM软件(九)

10)双击桌面上MDK-ARM软件的快捷方式图标,运行MDK-ARM软件,如图2-16所示。图2-16 运行MDK-ARM软件

11)MDK-ARM软件运行后,界面如图2-17所示。单击工具栏上的“Pack Installer”按钮,即可启动安装包管理器。

12)在安装包管理器的“File”菜单中选择“Import”项,如图2-18所示。图2-17 安装软件安装包(一)图2-18 安装软件安装包(二)

13)指定软件安装包的存储路径,并选中安装包文件“Keil.STM32F0xx_DFP.1.5.0”,单击“打开”按钮,即可启动安装包的安装过程,如图2-19所示。

14)安装包安装完成后,在“Pack Installer”窗口的器件列表中会出现“STMicro-electronics”项,单击前面的“+”号可以展开所支持的器件列表,我们需要的目标器件“STM32F072VB”就包含在其中,如图2-20所示。图2-19 安装软件安装包(三)

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载