轻松玩转STM32微控制器(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-28 18:53:40

点击下载

作者:杨百军

出版社:电子工业出版社

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

轻松玩转STM32微控制器

轻松玩转STM32微控制器试读:

前言

本书在写作之初本来是准备写“ARM-Linux”相关的嵌入式系统教材的,然而计划赶不上变化,技术更新日新月异,因此后来决定随市场而动写STM32微控制器相关的内容。原本笔者认为STM32是不需要教材指导的,因为ST和ARM两家公司已经提供了丰富的资料:《ARM Cortex-M3权威指南》.宋岩,译

The Cortex-M3 Technical Reference Manual(Cortex-M3技术参考手册)

STM32F10xxx Reference Manual(STM32F10xxx参考手册,RM0008)

STM32F10xxx Cortex-M3 Programming Manual(STM32F10xxx Cortex-M3 编程手册,PM0056)

STM32F10xxx Flash Programming Manual(STM32F10xxx Flash编程手册,PM0075)

DS5792: STM32F103xC、STM32F103xD、STM32F103xD Datasheet(数据手册)

STM32F10x_StdPeriph_Driver_3.5.0(含中文版使用手册)

MDK-ARM开发环境、其例程及帮助文档

其他相关器件数据手册及网络资料

其中,STM32F10x_StdPeriph_Driver既有库函数源代码,又有丰富的实例,再加上其使用手册,足够一个有经验的8/16位单片机工程师向STM32转型了。

但是后来发现,对于一个熟练掌握了单片机程序设计技巧的工程师而言,利用这些内容入门是没有问题的;可是对于一个只学了C语言的学生或在8位单片机的路上跌跌撞撞走过来的入门者,只利用这些内容学习,困难还是不小的。因为,STM32F10xxx系列的参考手册(RM0008)是学习ST微控制器最全面的一份文档,但该文档是将小容量、中容量、大容量,甚至网络型产品糅合在一起讲解的;虽然大容量、中容量、小容量、网络型产品也都有各自的数据手册(Datasheet),但又相对简单得多,只能用来参考选型及了解具体参数。而且其内核又是另一家公司(ARM)设计的,这样要了解内核,又要去学习Cortex-M3以及ARMv7的相关知识。另外,STM32F10xxx是32位微控制器,其内部集成了丰富的外设、中断控制系统、时钟系统、总线系统等,这些对初学者而言都是一个难以跨越的门槛。

笔者还算不上STM32微控制器的资深工程师,只是早入门了两年而已,因而也不敢在读者面前讲太多高深的理论,本书只想告诉读者怎么能够利用这些免费的资源快速入门。对于有信心可以自学的读者,在此笔者向你提供一个学习大纲:

先看看《STM32F10xxx参考手册》的前面几章,对STM32有一个初步的认识;接下来再读一读宋岩先生翻译的《ARM Cortex-M3权威指南》,也不需要看完、吃透,对其内核有个了解就可以了;然后就可以使用MDK-ARM提供的例子程序和帮助文档,结合ST公司提供的固件库(STM32F10x_StdPeriph_Driver)的源代码及其使用手册进行学习了。在学习例子程序时,要学会针对例子程序再去学习《STM32F10xxx参考手册》的相关章节。

STM32入门的门槛相对8位单片机是高了些,不过根据上面的流程入门之后,接下来的路怎么走,你心里就会清楚许多。本书也正是根据上面的流程来引导读者学习STM32的,没有什么高深的东西,只是在适当的地方加以注释,让新手少走点弯路,轻松入门而已。

入门建议

虽然这是一本介绍STM32入门的书籍,但笔者还是建议读者最好选择8位单片机作为自己走进单片机世界的钥匙。因为越是复杂的东西,越是难以吃透、门槛越高,容易打击学习的积极性。但是8位单片机就相对简单得多,像51单片机若是选对一本教材,用一周至一个月的时间就可以入门;AVR单片机结合其数据手册,大概一个月也能够入门。

另外,学习STM32对使用者的C语言基础的要求也比较高。学习8位单片机,读过谭浩强老师的《C语言程序设计》,掌握其中前半部分的知识点就可以入门了。但STM32的例程用到的知识点就多了:指针、结构体、条件编译、文件操作,等等,一些相对有难度的C语言知识都要用到。对于C语言基础不是太好的读者,还是建议手边有本C语言教材,这样有不理解的地方,可以找到相应的知识点复习一下。

目前市面上的教材可以分为两类:一类是基于固件库函数讲解的,这类的教材多些;另一类是基于寄存器讲解的。通常基于库函数讲解的会说这样可以快速上手、移植方便等;基于寄存器讲解的会说讲解深入、代码效率较高。笔者并不觉得谁优谁劣,首先要真正学会操作STM32,不管是用其固件库函数,还是直接操作寄存器,都要对其深入了解,然后才能灵活应用;而且库函数提供的有源代码,深入学习之后,可以根据源代码写自己的程序,也可以直接修改源代码。因而不存在谁优谁劣的问题,区别只是教材是如何引导读者入门的,而读者希望选择哪条路走进STM32的世界。

开发板选型

目前市面上的开发板很多,参差不齐,有不少是王婆卖瓜、自卖自夸。这个要看读者的喜好,其实从主芯片的选择来说,它们是没有本质区别的。不管使用的是L系列、M系列,还是H系列,都不会影响基本内容的学习,也就是说对于STM32入门来说,几乎所有的开发板都可以满足要求。它们的区别是板上有多少外设,对我们后期进一步深入的学习会有哪些影响。另外,也要看读者想在哪方面进一步深入学习,不一定非要盲目选择外设丰富的。例如,想学习物联网、无线通信,当然要选择有这些接口、提供丰富例程的开发板;而如果想低成本入门,那么选择一块几十块钱的板子就够了。

笔者也为本书选择了一块开发板:秉火ISO STM32。不过对于入门学习来说,使用其他的开发板也是完全可以的,因为笔者也是将例程在上面根据其原理图移植而已。

致谢

全书由杨百军统稿,并参与第19 ~24章的具体编写;黄河科技学院王学春老师主要参与完成第1 ~6章的编写,河南省轻工业学校黄雅琴老师主要参与完成第10 ~14章的编写,河南大学史蕊老师主要参与完成第7 ~9章的编写,中国人民解放军国防科学技术大学张志洲老师主要参与完成第15 ~18章的编写。此外,参与本书编写的还有陈泽慧、高维娜、黄得建、康磊、李楠、聂运中、王路、杨俊杰、张延杰、周宏云等。另外,东莞秉火网络科技有限公司为本书的编写提供了秉火ISO STM32开发板,在此表示感谢。“学然后知不足,教然后知困”,由于编著者水平有限,在写作的过程中难免会出现一些错误。若读者有什么疑问或建议,希望能发邮件与编著者沟通,邮箱是 young45@126.com,也可通过编著者的博客 young 45.blog.chinaunix.net来了解相关内容。另外,还可以登录野火开源社区www.chuxue123.com,直接与火哥(刘火良,下同)交流。

最后,感谢我的家人和朋友,特别是父母能在社会压力较大的今天放任我如此自由地写作,不给他们的儿子那么多的压力;也感谢在洛阳时的师长和同事——刁海南、张文勇、郭锐、齐文钊、陈剑、李为民、赵博、尹国利、谢永进等,嵌入式这条路是在工作之后走上的,若不是这些前辈的指点,就没有我的今天;感谢那些在大学、中学谆谆教导过我的老师——杨明祥、高克权、杨万才、李小申、程东明、张晓红、黎蔚、王辉、刘勇等,杨明祥老师帮我走进了洛工,洛工数理学院的老师为我铺垫了良好的逻辑分析能力,计算机方向的老师帮我走进了IT这个行业,内心由衷感谢他们的帮助和指引;还有前两本书的读者,特别是那些来信给出建议的读者与学生,如郭凯、张锋、王帅阳、牛鹏举、竹显涛、刘帅等,他们的帮助、鼓励和建议为我继续写作增添了动力;感谢曾经帮助过我的师长、朋友——郝云鹏、黄桂平、朱锦、段富军、许元霄、高金龙、申雷等,这些年是在他们的鼓励与帮助下完成这三部作品的,在此一并表示感谢;也感谢电子工业出版社的王敬栋、张剑、徐萍及其他编辑朋友。最后,感谢人生路上伴我走过的朋友们。杨百军2015年12月郑州·华水第1篇基础篇

工欲善其事,必先利其器。——孔子

本篇主要为后面深入学习STM32微控制器做准备工作,全篇共4章内容。第1章,讲解如何选择一块适合自己学习目的的开发板;第2章,初步了解准备学习的微控制器STM32F103ZE;第3章,带领大家熟悉要使用的开发环境MDK-ARM;第4章,介绍ST公司提供的开发宝典——固件库。第1章 选择开发板

学习单片机,非常重要的一点就是要多做练习,这就要用到开发板。开发板可以将抽象的理论和程序显示在有形的实物中,对学习单片机非常有效,下面我们就先认识一下在本书中会用到的开发板。1.1 开发板简介

意法半导体公司(STMicroelectronics,缩写为ST)在2007年6月推出Cortex-M3内核处理器:STM32系列。到现在,国内有关STM32的开发板可谓百花齐放、丰富多彩,因而我们在选择时也要多做比较。1.STM3210E-EVAL评估板

首先要说的就是ST公司自己推出的评估板,到编著本书时(2013年5月)ST共推出了40款有关STM32微控制器的评估板。我们在初学阶段可以重点关注 STM32100B-EVAL、STM32100E-EVAL、STM3210E-EVAL、STM3210E-SK/IAR、STM3210E-SK/KEI 等几款开发板。

这里简单介绍一下:STM32100B、STM32100E、STM3210E几个系列评估板的区别是使用的处理器不同;而STM3210E-EVAL、STM3210E-SK/IAR、STM3210E-SK/KEI三者的区别是针对的开发工具有些不同,如 STM3210E-SK/IAR 是针对 IAR 开发环境推出的,而STM3210E-SK/KEI是针对Keil开发环境推出的。

这里以 STM3210E-EVAL 为例,给读者展示一下评估板的外观,如图1-1所示。图1-1 STM3210E-EVAL

在ST公司官网(www.st.com)上可以找到评估板STM3210E-EVAL的详细介绍:Home﹥Products﹥Microcontrollers(Hardware→STM32 MCU Eval Boards),也可以在其主页搜索栏直接输入 STM3210E-EVAL 搜索(ST公司官网在不断更新,具体菜单路径有时会改变)。

该评估板主要面向基于STM32F103ZET6或STM32F103ZGT6的微控制器,其硬件接口比较丰富,可以评估 LCD、SPI Flash、USART、IrDA、USB、音频、CAN 总线、智能卡、MicroSD卡、NOR Flash、NAND Flash、SRAM、温度传感器、音频DAC和电机控制等外设。

由于是国外的产品,价格也就相对较贵,国外报价248.75美元左右(按照6.13的汇率,折合人民币为1 525元)。不过如果想找一块与STM3210E-EVAL兼容的开发板也并不难,淘宝上的百为STM32开发板和安富莱STM32-V3开发板与其兼容性就很不错。2.Keil STM32评估板

接下来要介绍的评估板是ARM公司的MDK-ARM开发环境所支持的评估板。ARM公司为STM32提供了6款评估板支持:MCBSTM32、MCBSTM32E、MCBSTM32EXL、MCBSTM32C、MCBSTM32F200/MCBSTM32F400。它们的区别就是支持的STM32芯片的种类不同。对于初学者来说,仅仅关注一下MCBSTM32和MCBSTM32E就好了。

这里以MCBSTM32E为例,展示一下评估板外观,如图1-2所示。

其实细心的读者会发现,Keil所谓的MCBSTM32E评估板就是ST所指的STM3210E-SK/KEI评估板。

该评估板集成了 STM32F103ZET6微控制器,可以评估 USB 设备、CAN、USART 接口、音频、MicroSD卡接口和QVGA LCD等外设。其最大特点是配有精简版Keil MDK-ARM开发环境(限制32KB代码),而且提供ULINK-ME(USB/JTAG)仿真器。

从集成外设和提供的外设接口来说,MCBSTM32E评估板没有STM3210E-EVAL评估板提供得丰富,不过它附带的开发环境和仿真器是不小的诱惑。

若要进一步了解MCBSTM32E评估板,可以通过KEIL公司的网站http://www.keil.com/mcbstm32EXL/(目前Keil是将MCBSTM32E和MCBSTM32EXL混在一起讲的)或前面介绍的ST公司的网站了解。3.深圳英蓓特

前面介绍的两款评估板都是国外的产品,东西很好,不过价格不菲。下面我们要介绍一下国内STM32开发板的情况。说到国产的开发板,首先要说的就是深圳英蓓特(Embedinfo)信息技术有限公司。

英蓓特基于STM32微控制器的开发板有两款:STM32F103V100-Ⅱ型和EM-STM3210E型。其中,开发板STM32F103V100-Ⅱ是STM32F103VBT6微控制器的,而EM-STM3210E是基于STM32F103ZET6微控制器的。下面以EM-STM3210E开发板为例展示给读者,如图1-3所示。图1-2 MCBSTM32E图1-3 EM-STM3210E开发板

英蓓特的这两款开发板应该与Keil的MCBSTM32和MCBSTM32E评估板有很好的兼容性,而且英蓓特还提供了丰富的实例和技术文档,特别是李宁的《基于MDK的STM32处理器应用开发》,就是基于开发板STM32F103V100而著的。

与国外的评估板相比,英蓓特的开发板具有性价比高、实例丰富、技术文档齐全等特点,而且是国内的公司,在售后技术支持方面也可以有便捷的沟通。

要获取更多英蓓特的信息,可以登录其公司主页http://www.embedinfo.com进一步详细了解。4.秉火ISO STM32开发板

接下来要介绍的是秉火(原野火)网络科技有限公司的“秉火 ISO STM32开发板”,该开发板是笔者在淘宝网看到的性价比较高的一块开发板。特别值得一提的是其早期的产品“野火 STM32 V3板”和新产品“秉火ISO-MINI STM32开发板”,在淘宝上都是名列前茅的产品。

我们先看看“秉火ISO STM32开发板”的外观,如图1-4所示。图1-4 秉火ISO STM32开发板“秉火ISO STM32开发板”有几点很值得一提。

丰富的外设:该开发板除了集成USB、CAN、485、USART等常用外设接口,还集成了EEPROM、SPI Flash、扩展SRAM、MP3解码器、FW收发模块、USB转串口模块、红外接收头等模块;另外,还集成了PS2、SPI、I2S、I2C、SDIO、NRF 2.4G 等扩展接口;此外,火哥还为开发板配套开发了GPS模块、GSM模块、摄像头模块、以太网模块、WIFI模块、NRL24L01模块等,因而笔者评价该开发板性价比很高。

经典实例:开发板提供62个经典实例,若再加上本教程讲解的31个例程,则有近百个例程可以参考;另外,其指导教材完整,火哥编著的《STM32库开发实战指南》在2013年由机械工业出版社正式出版。

提供视频教学:除了教材和实例,火哥还提供了36个经典视频,特别是几个入门视频的讲解,可以让初学者轻松走入STM32的世界。

售后技术支持:秉火网络科技的售后支持有三个形式——技术资料(3套光盘、36个视频讲解)、电话支持、技术论坛支持。特别是野火初学论坛(www.chuxue123.com),为初学者解惑答疑提供了一个好去处。5.综合比较

在本节的最后,我们以火哥的秉火ISO STM32开发板和淘宝上热销的几款开发板做一个综合的比较,如表1-1所示。表1-1 开发板综合比较续表注:至本书上市时有些开发板可能会更新换代。【说明】 国内开发板并没有本质的区别,只是在扩展外设的形式(板载或外接模块)和外设多少上有些区别,如果对后期扩展资源学习没有特殊要求,笔者建议读者选择一块更适合自己的开发板。资源丰富的开发板会相对贵一些,而有些开发板宣传的资源丰富,但只是提供了外设接口,想扩展使用还要另外购买模块。市面上几乎所有的STM32开发板都能满足STM32单片机的入门学习,只是看读者选择的重心在哪里。1.2 开发板功能简介

笔者为本教材选择的是秉火网络科技的“秉火ISO STM32开发板”,该开发板的优点在1.1节已经简单分析了,另外一点就是其老板刘火良的开发思想与笔者有很多共同之处:一、其对C语言的学习特别重视,在论坛(www.chuxue123.com)上特开设专栏“每日一题”来引导初学者加强C语言练习;二、其引导用户学习STM32的过程与笔者有些神似,都是从固件库的使用入手,进而具体分析固件库的实现过程,从而使读者能轻松入门,又可深入学习。

另外,在开发板秉火ISO STM32发行时,系统集成了一套整板测试程序。该系统分为3个界面共17个图标(也是17个测试项),通过触摸屏可以在两个界面之间互相切换,下面我们就根据这套测试介绍开发板的硬件。1.整板测试程序

我们拿到开发板,首先要操作的就是给开发板加电检查一下系统是否有问题。在给开发板加电之前,最好看一下秉火网络科技提供的视频:ISO-整板测试。将耳机、摄像头模块、SD卡等连接到开发板上。

为系统加电有三种方式可以选择:①用开发板自带的USB线连接计算机和开发板的USB口;②用USB线连接计算机和开发板的USB转串口;③找一个DC 6 ~24V 的变压器连接开发板的电源输入口。注意:连接好USB/电源线后,要拨动电源开关开发板才能正常加电。开发板加电之后就可以看到系统启动和操作主界面了,如图1-5所示。图1-5 整板测试程序主界面

整板测试程序用到的相关硬件有 STM32F103ZET6、LED 指示灯、按键、EEPROM AT24C02、FW收发模块、MP3模块、扩展SRAM、扩展Flash、SD卡、温湿度传感器 DHT11、温度传感器DS18B20、摄像头模块、以太网模块、触摸屏等。下面我们就在开发板中将这些硬件标注出来以获得一个感性认识,如图1-6所示。

系统启动完成后,会进入整板测试程序操作主界面,主界面共有三屏,每屏最多6个图标,共17个测试程序,我们可以像玩手机那样通过触摸屏操作一下。2.LED和RTC测试程序

我们先以开发板整板测试程序操作主界面上的 LED 测试程序和 RTC 测试程序为例介绍。开发板标配的是一块3.2寸的触摸屏,我们可以在操作主界面上单击“LED”的图标,和玩手机没什么区别,运行流水灯测试程序,如图1-7所示。

在流水灯测试程序运行时,观察开发板的3个 LED 指示灯,它们会像跑马灯那样轮流闪烁;退出流水灯测试程序时,可以操作液晶屏上的“复位返回”键或开发板上的“RESET”键(红色),返回测试程序的操作主界面。另外,也可以运行RTC测试程序,观察程序的运行结果,如图1-7所示。测试完成后,按照同样的方法返回测试主界面。图1-6 系统自检硬件标注图1-7 LED和RTC测试程序3.其他实例

除了以上介绍的两个测试程序,整板测试程序还提供了15个测试程序。有些测试程序是开发可以直接看到结果的,如按键测试程序、EEPROM测试程序、ADC测试程序、CAN总线测试程序、呼吸灯测试程序、SRAM测试程序等;而有些需要插入SD卡,通过文件系统配合测试,如MP3测试程序、USB测试程序等;还有些测试程序需要其他模块配合才能使用,如收音机测试程序要插入耳机作为天线、温湿度测试程序要使用DHT11模块、温度测试程序要使用DS18B20模块、摄像头测试程序要使用摄像头模块、以太网测试程序要使用以太网扩展模块、NOR Flash和NAND Flash测试程序需要存储器扩展模块等配合才能使用。

有关其余的15个测试程序,这里就不一一详细介绍了,读者可以根据采购开发板时所选的扩展模块来自己动手尝试。其中需注意的一点是,在液晶屏上找不到“复位返回”键时,可以通过开发板左下角的“RESET”键返回测试程序的主界面。

另外,读者在尝试着操作测试程序时,可以边操作边观察并加以思考,例如,流水灯测试程序和按键测试程序都会用到LED指示灯,它们在程序处理上会有什么不同呢?ADC测试程序和呼吸灯测试程序,联想自己学习过的理论知识,它们之间会有什么关联吗?通过操作与思考,可以使你在后面的学习过程中了解更多。

此外,读者在操作测试程序时也可以通过原理图来了解每个测试程序所使用的硬件部分。同时,还可以上网查看主控制器STM32F103ZE 和扩展芯片(如TJA1050、DS18B20、DHT11等)的介绍,这样可以对开发板有更直观的认识,也更利于后面章节的学习。【思考与练习】(1)上网查2 ~3块开发板,比较它们的外设有哪些不同。(2)比较秉火ISO STM32开发板和奋斗V5开发板所选微控制器STM32的内部资源有哪些区别。(3)根据自己的学习目的选择一款适合自己的开发板。第2章 走近STM32

在第1章我们已经在开发板上练过手了,也见到了STM32那秀气的身影,下面我们要做的就是进一步了解STM32,查查她的家谱、看看她的身世,看是谁家的姑娘长得这么漂亮。2.1 认识STM321.了解STM32F103Z

要了解STM32,我们首先要知道她长什么模样,然后再进一步了解。开发板中的主芯片选择的是增强型大容量系列STM32F103ZET6,我们可以在开发板中找到它。如图2-1所示是LQFP封装(STM32F103ZET6)和BGA封装(STM32F103VBH6)的产品外观图。

秉火ISO STM32开发板上选用的STM32是STM32F103ZET6,其自身特点有:集成高性能32位 Cortex-M3的 RISC 内核,工作频率为72MHz,内置高速存储器(512KB Flash 和64KB SRAM),LQFP144封装、增强I/O口112个,3个12位的ADC,4个通用16位定时器、2个PWM定时器,2个I2C接口、3个SPI 接口、2个I2S 接口、1个SDIO 接口、5个USART接口、一个USB接口和一个CAN接口。图2-1 STM32F103外观2.STM32命名规范

STM32系列单片机有一套完整的命名规范,不过在其数据手册中是以“订货代码”的形式给出的,也就是说用户可以根据该命名规范向供货商提供所需要产品的具体型号。下面以STM32F103ZET6Axxx为例给出STM32的命名规范,如图2-2所示。

我们在选择开发板时,首先要注意的是其产品子系列是否是增强型(103),然后就是引脚数目,通常要选择100引脚(V)或144引脚(Z)系列的产品。接下来的闪存容量(C/D/E)其实并不影响我们的学习,唯一的影响是单片机集成Flash的大小,这一指标将影响到我们可编写程序的大小,不过最小容量也是256KB了,在我们初学阶段应是绰绰有余的。3.STM32分类

目前,STM32的产品从其应用方向可分为6大系列:超值型 STM32F100、基本型STM32F101、USB基本型STM32F102、增强型STM32F103、互联型STM32F105/107和超低功耗STM32L。而ST公司按其内部集成的闪存存储器的容量又分为4个类型:小容量产品(内置Flash 16 ~32KB)、中容量(内置Flash 64 ~128KB)、大容量(内置Flash 256 ~512KB)和互联型(STM32F105xx和STM32F107xx)。

在《STM32F10xxx 参考手册》中,是将 STM32F101xx、STM32F102xx、STM32F103xx、STM32F105xx、STM32F107xx等揉在一起讲的,这样区分起来比较复杂,而且其外设区别也比较大。这里我们仅将增强型 STM32F103xx 分为小容量、中容量、大容量三种,用表格的形式做个比较,如表2-1所示。图2-2 STM32系列产品命名规范表2-1 STM32F103系列产品配置【注意】 观察表2-1中3种容量STM32F103产品的不同配置,会发现小容量产品和中等容量产品的外设配置并没有本质区别,只有数量的区别;而大容量产品要比中/小容量产品多出基本定时器、I2S、DAC、SDIO、FSMC等功能项。因此如果做产品开发,要根据实际需要选择合适的型号,而如果学习入门,则可以选择一款大容量产品的开发板。

在表2-1中我们将STM32F103xx产品按小容量、中等容量、大容量做了一个简单的比较,下面进一步将大容量产品按其引脚数目做一个比较,如表2-2所示。表2-2 增强型STM32配置【说明】 FSMC为静态存储器控制器,用于控制片外 SRAM、NOR Flash、NAND Flash、PC卡等。

由表2-2可以看出,64引脚的大容量STM32F103和100/144引脚的大容量STM32F103的主要区别在于前者没有 FSMC,而后者具有 FSMC。FSMC 主要应用在片外 SRAM 扩展、NOR Flash、NAND Flash、PC卡等方面,若想在这方面学习或应用,就要选择后者,否则影响我们选择的就是其通用I/O的数量了。

从表2-2进一步分析可知,STM32F103VCxx、STM32F103VDxx、STM32F103VExx、STM32F103ZCxx、STM32F103ZDxx、STM32F103ZExx这几款 STM32单片机在其集成外设上几乎没有区别,它们的区别仅仅是通用I/O口的数量不同,内部集成的Flash和 SRAM 的容量有些不同。然而这些都影响不到我们对STM32单片机的入门学习和进一步研究,这样在我们选择开发板时,影响最大的就是在开发板上将这些外设引出的多少。2.2 STM32与Cortex-M3的关系

细心的读者会发现,开发板上的STM32芯片上会有“ARM”字样,有些人会想STM32和ARM有什么关系呢?为什么要在片子上刻“ARM”呢?要回答这个问题,看看身边的笔记本电脑就会发现,几乎每台笔记本电脑上都会贴上Intel和Windows的标签,其实STM32与ARM的关系和这是类似的。

要说明STM32与ARM的关系,还是要先讲一下计算机的组成部分。以一台笔记本为例,它包括显示器、主板、CPU、内存、硬盘、显卡、网卡、键盘、鼠标等设备。平常我们说一台品牌计算机如联想、华硕、惠普、DELL等,其CPU通常是Intel/AMD的、操作系统是微软的、硬盘是希捷/日立/西数的、显卡是Nvidia/ATI的、内存是金士顿/威盛的。图2-3是联想T61笔记本电脑和“鲁大师”显示的其基本信息。图2-3 联想T61笔记本电脑及其基本信息

如果把ST看作笔记本电脑的一个品牌,那么STM32就可以看作该品牌笔记本电脑的一个系列,而ARM就是在一台笔记本内部安装的CPU的品牌,Cortex-M3就是这款CPU的具体型号。如图2-4所示,是增强型大容量STM32的系统结构图。

从图2-4中可以清晰地看到,STM32是由两部分设计的,其内核由ARM公司设计,而内部集成的DMA、Flash、SRAM、AHB系统总线、FSMC、SDIO、高速外设、低速外设等由ST公司设计完成,而且ST在ARM提供内核的基础上也对NVIC、总线矩阵、总线仲裁等做了很大的优化。

其实以Cortex-M3为内核设计的芯片公司不止ST 一家,LUMINARY(2009年被TI 收购)、TOSHIBA(东芝)、NXP(恩智浦半导体)、ATMEL等半导体公司都有基于Cortex-M3内核的产品。这一点有些像20世纪80年代流行的51单片机,ATMEL、PHILIPS、DALLAS等公司都生产51系列的单片机,它们的核心技术都是由Intel授权的。

LUMINARY是ARM为了推广Cortex-M3内核而投资的一家公司,早在2006年3月就推出了Cortex-M3的产品,也是第一个勇吃螃蟹者,为其他公司做了示范。其产品特点是简单、价格低、速度快,所针对的目标是工厂自动化控制、工业控制动力设备以及楼宇自动化等。该公司在2009年5月18日被TI收购。图2-4 大容量STM32系统结构

ST是在2007年6月11日宣布推出 Cortex-M3内核的,其产品特点是高性能(1.25 DMIPS/MHz)、低成本、低功耗。正是ST推出的Cortex-M3内核微处理器比较早、性价比又高,因而其STM32系列也是国内销售最火的。

NXP基于Cortex-M3第二版内核,具有极高的代码集成度和极低的功耗,其LPC1769、LPC1759两款产品的工作频率为120MHz,性能上可与低成本的DSP相媲美。国内NXP开发板做得比较好的要数广州致远电子了。

ATMEL是在2008年才推出Cortex-M3产品的,这是因为ATMEL本身就有32位的AVR产品,之所以再推出ARM内核的产品,只是为了对其自身的产品做一个互补,因而该公司这一系列产品的种类不是很多。

下面在表2-3中列举ST、TI、NXP、ATMEL等几家公司以Cortex-M3为内核的产品,做一个比较。表2-3 几种Cortex-M3内核产品的比较

通过比较可以发现,其实几家的产品并没有太大的区别,而且各个厂家的产品种类也比较多。例如,ST公司的105/107系列就支持以太网控制器,这是因为他们的内核都是 Cortex-M3,而其区别就是推出产品针对的市场有些不同。

目前,已经拿到Cortex-M3内核许可的半导体公司有40多家,而在这么丰富的32位ARM产品中只有ST和TI两家遥遥领先,特别是ST,据说每出货2个Cortex-M系列的MCU,就有一个是STM32系列的。那么有这么多种类的Cortex-M3内核的产品,为什么市场会选择STM32呢?这就像在8位单片机里 AVR 是首选一样,因为它具有较低的价格、丰富的外设、杰出的低功耗控制、多种可供选择的型号、开发成本低等优点。另外一点也特别重要,那就是TI和ST都是最早与ARM合作推出Cortex-M3产品的。

历史的车轮在前进,ST推出STM32系列单片机时提出的口号是“让32位单片机的价格低于1欧元”,也就是说一片32位单片机将进入10元以下的时代。同样的价格,STM32拥有8位/16位单片机都不能达到的速度,并且集成了更丰富的外设、更完美的功耗控制,开发成本又低,也就是说随着Cortex-M3的出现,很多10元以上的8位/16位单片机将面临着被更优秀的32位单片机所取代的危险。下面就以51、AVR、PIC、STM32中的代表做一下性能上的比较,如表2-4所示。

其中,STM32F101R8为基本型中容量控制器,STM32F103RC 为增强型大容量控制器。特别是将STM32F101R8与AVR、PIC两款产品进行比较可以发现,STM32在集成度和速度方面都有明显的优势。表2-4 几种单片机性能比较【说明】 特别值得一提的是,海思半导体有限公司(原华为集成电路设计中心)在2013年年初透露,在下半年将推出Cortex A15内核的处理器HiSiliconK3V3;海尔集团与海外IC设计公司合资于2000年11月在上海成立了上海海尔集成电路有限公司,2005年12月首款海尔MCU正式投产;另外,大陆的中芯、台湾新唐科技、台湾芯科等也相继推出了Cortex-M内核的产品;特别是台湾的联发科科技,近年来几乎是 Android 智能手机解决方案的领跑者,华为、小米等手机产品都有其设计的芯片。这些代表着国内IT技术一次质的提升,就像汽车行业从汽车国产化到发动机国产化,是值得我们技术人员追求和自豪的事情。2.3 Cortex-M3与ARM1.Cortex-M3

ARM(Advanced RISC Machines Ltd.)公司是一家知识产权(IP)供应商,它和我们通常了解的半导体公司(如Intel、Atmel、STC等)不同,它出售的不是实际的产品芯片,而是一套设计方案,最终由半导体公司将这些设计方案生产为芯片。在ARM的第7代产品之前,都是以微处理器为主,就像Intel和AMD是PC上CPU的主流一样,ARM公司的产品最终主要在平板电脑、游戏机、智能手机、多媒体设备、机顶盒、数字电视等设备中使用。然而,到第7代产品(ARMv7架构)出现时,ARM将其分为Cortex-A、Cortex-R、Cortex-M三个系列。其中Cortex-M3就是Cortex-M系列中的一个子系列,该系列产品是针对微控制器(单片机)市场开发的。我们通过表2-5对这三个系列的产品有一个初步认识。表2-5 Cotex的分类:A/R/M32.ARM简史

在了解ARM的产品之前,我们先简单了解一下ARM的历史。

1978年3月,Hermann Hauser和Chris Curry(Sinclair Research Ltd.的工程师)在英国剑桥创办CPU(Cambridge Processing Unit,剑桥处理器)公司,主要业务是为当地市场供应电子设备。

1978年12月5日,Hermann Hauser、Chris Curry 和Andy Hopper一起创立了Acorn公司,主要为当地提供廉价的计算机设备;CPU公司变成了一个开发和控股公司。

1982年,Acorn与大名鼎鼎的英国广播公司BBC合作,贩卖教育用的计算机BBC Micro,该计算机在1984年获得英国女王技术奖。

1983年,Acorn认为将来计算机需要速度更快、价格更低的处理器(当时使用的摩托罗拉的16位芯片又贵又慢),后来在向Intel索取资料遭拒的情况下,只好选择开发当时不被看好的RISC结构的处理器。

1985年,Roger Wilson和Steve Furber设计出第一代使用RISC(精简指令集)的32位处理器,简称ARM(Acorn RISC Machine); 1985年4月26日,VLSI成功产出第一颗ARM处理器,ARM1仅有25 000个晶体管,甚至没有乘法部件。

1986年,ARM1被新面世的ARM2所取代。ARM2集成了3万个晶体管,配置了1个真正的32位数据总线、1个26位地址总线和16个注册器,使用8MHz的工作时钟,可以说是当时极为先进的处理器。第一个基于ARM2的产品是ARM Development System,后来ARM2被使用在Acorn公司的多媒体个人计算机BBC Archimedes上。

1989年,Acorn公司因财务困难被Olivetti以1 200万英镑收购49.3%的股份,后来成为Olivetti Research Lab。

1990年下半年,当时正在摩托罗拉工作的Robin Saxby被Hermann Hauser任命为CPU(Cambridge Processor Unit)的CEO,首批团队成员是12名工程师。

1990年11月27日,Advanced RISC Machines Ltd.(ARM)正式成立。苹果公司出资150万英镑,芯片制造商VLSI出资25万英镑,Acorn公司则以价值150万英镑的知识产权和12名工程师入股。公司的目标是专注于市场不断增长的对低费用、低功耗、高性能的32位RISC芯片的需求。在众多可能的商业模式中,ARM最终选择了设计基础技术,并将其以知识产权(IP)的形式向客户进行授权。

新成立的ARM公司的第一个产品是专为苹果公司设计的ARM610(ARMv3内核),该芯片后来被用于苹果公司的Newton PDA。同时,ARM的软件开发团队也开发出了ARM Cross开发工具包、硬件评估工具包。

1991年,ARM将产品授权给英国GEC Plessey半导体公司,这是ARM公司第一笔成功的商业交易。

1993年,通过与Nokia和TI的密切合作,ARM发明了16位的Thumb指令集,真正意义上创建了基于ARM/Thumb的SoC(System on a Chip,系统级芯片)商业模式。同年,ARM迎来了公司成立以来最重要的一颗处理器内核:ARM7(ARMv4内核)。

ARM7使用的Die(芯片裸片)尺寸是Intel 80486的1/16,使ARM7处理器获得了较低的功耗,适合手持式应用。

ARM7处理器引起了当时的处理器巨头 DEC(Digital Equipment Corporation)的关注。1995年,DEC获得了ARM架构的完整授权,开始研发新的处理器架构StrongARM。第二年的2月5日,DEC正式发布SA110处理器。SA110处理器迅速得到了业界的认可,Apple开始使用SA110处理器开发MessagePAD 2000。

ARM7之后,ARM8内核于1996年发布。与ARM7相比,AMR8在没有显著提高功耗的前提下,性能提高了一倍,依然无法和DEC的StrongARM抗衡。

1997年发布ARM9,ARM9不再使用普林斯顿结构,而转向哈佛结构,原来的3级指令流水线提高到5级,最高的时钟频率达到220MHz,MIPS指标首次超过了1.0大关。

ARM9是一个重要的里程碑产品:这个产品标志着ARM 处理器正式进入微处理器领域,而不再是简单的微控制器。

1998年的EPF(Embedded Processor Forum)ARM10内核正式推出,使用了6级流水线结构,并改良 Cache Memory,对乘法指令进行最佳化,并增加浮点运算。不过,ARM10巧遇Intel的XScale,因而并未做很好的商业推广。

1998年4月17日,ARM公司在英国伦敦证交所和美国纳斯达克上市。

1999年,ARM 发布可合成的 ARM9E 处理器,提高了信号的处理能力;ARM收购Micrologic。

2000年,ARM收购AllantSoftware和InfiniteDesigns。

2001年10月,ARM 发布新型处理器架构ARMv6。

2002年12月,ARM发布ARMv6架构的ARM1136内核处理器。

2004年,基于ARMv7架构的ARM Cortex系列处理器发布,同时还发布了这个新处理器系列的首款产品 ARM Cortex-M3。

2005年,ARM 发布 Cortex-A8处理器。

2007年,ARM 推出 Cortex-A9处理器以实现可扩展性能和低功耗设计。

2008年,ARM 宣布销售100亿台处理器。

2009年,ARM 宣布实现具有2GHz 频率的 Cortex-A9双核处理器;同年推出体积最小、功耗最低和能效最高的处理器 Cortex-M0。

2010年,ARM为实现高性能的数字信号控制推出了Cortex-M4处理器;9月正式发布5倍ARM9架构的Cortex A15内核。

2011年10月,推出新款低功耗处理器Cortex-A7 MPCore; 10月底发布64位架构处理器ARMv8; 11月宣布20nm新工艺Cortex-A15多核处理器流片成功。

2012年3月,推出超低功耗、低成本微处理器Cortex-M0+; 4月发布Cortex-A15架构的四核Hard Macro处理器;10月推出新款ARMv8架构Cortex-A50处理器系列产品Cortex-A53、Cortex-A57; ARM架构处理器全年出货量达到87亿颗,累计出货量为300多亿颗。

2013年4月,ARM与台积电合作、首个采用16纳米FinFET工艺技术生产的ARM Cortex-A57处理器流片成功。3.ARM的版本

了解过了ARM的发家史,下面再来了解一下ARM的历史版本(见表2-6),从而也可以看看Cortex-M系列产品所在的位置。表2-6 ARM内核及架构续表

通过上面对ARM简史的学习,我们可以发现,其实StrongARM内核与XScale内核并非由ARM公司独立完成,StrongARM内核对ARM8、XScale对ARM10的推广都有较大影响;然而StrongARM和XScale内核为ARM后来的产品做了很好的技术积累。特别是与Intel合作的XScale内核,大量借鉴了Pentium系列微处理器的设计技术和工艺,对ARM产品来说是一次技术的飞跃。其实,这也是作为技术人员值得思考的地方,设计与学习不能闭门造车,要学会与人沟通,互相学习、交流,这样才容易有质的提升。【思考与练习】(1)上网查一下单片机的发展史,分析当年Intel出售51内核与如今ARM出售知识产权内核的区别。(2)上网查一下计算机的发展史,思考:当年蓝色巨人成就了微软、甲骨文等,而自己却慢慢退出了PC的市场;如今ARM不仅成就了ST、TI等公司,而且实现了共赢的局面。这两者之间有什么异同?(3)通读《STM32F10xxx参考手册》前8章内容(第7章可以略过),对STM32有一个初步、全面的了解,为后面章节的学习做准备。(4)通读《ARM Cortex-M3权威指南》前6章内容(第4章指令集部分可暂时略过),全面了解STM32的内核Cortex-M3。(5)下载并安装MDK-ARM,了解其使用方法。(6)下载STM32F10x_StdPeriph_Lib_V3.5.0并解压,看看里面都有什么宝贝。第3章 认识MDK-ARM“工欲善其事,必先利其器。”同样,学习STM32单片机也要先熟悉一款合适的开发工具。下面我们就来介绍一下ARM公司自己开发的利器——MDK-ARM。3.1 开发工具介绍

当前支持 STM32程序开发的工具有很多,如 AsIDE(Ashling Microsystems)、CoIDE(CooCox)、DS-5(ARM)、EmbestIDE(Embest)、EWARM(IAR)、Hitop 5(Hitex)、MDK-ARM(Keil ARM)、STVD(ST)、TrueSTUDIO(Atollic)、RIDE(Raisonance)等。其中国内使用比较多的应该是IAR的EWARM和Keil ARM的MDK-ARM,下面我们就简单了解一下这两款开发工具。1.IAR EWARM

EWARM(Embedded Workbench for ARM)是瑞典IAR Systems公司为ARM 微处理器开发的一个集成开发环境。比较其他的ARM 开发环境,IAR EWARM 具有入门容易、使用方便和代码紧凑等特点。IAR开发环境以支持MCU丰富而著称,特别是常用的8位单片机几乎都支持;很多工程师在开发AVR、PIC、MSP430等单片机时都是在IAR开发环境下进行的,因而在升级到STM32时,首选的也是IAR的开发环境。也有网友评价EWARM的编辑器对中文的支持是一大亮点,要比MDK好;另外,编译速度也比较快。感兴趣的读者不妨到IAR公司的主页www.iar.com下载试用一下。2.MDK-ARM

MDK-ARM是比较官方的名字,其实在生活中还有很多工程师习惯用别的名字叫它:Keil MDK、RVMDK、ARM MDK等。为何MDK-ARM会有这么多的名字呢?那就要了解一下它的前世今生:2005年10月,ARM公司收购了Keil公司,说到Keil公司从51单片机入门的读者应该很熟悉了,Keil C51是大多数51单片机入门者的首选;2006年1月,ARM推出集成Keil μVision3的RealView MDK开发环境,当时叫DK-ARM(大家更喜欢叫Keil for ARM),后来经过版本的演变,ARM 公司最后将其命名为MDK-ARM。在Keil for ARM 出现以前,ARM公司推出的ARM处理器开发工具是ADS,因而很多书上介绍MDK-ARM的优越性时会有一个与ADS的比较。

MDK-ARM 的全称是 Microcontroller Development Kit for ARM,其集成开发环境是 Keil μVision IDE,和Keil C51是同一个集成开发环境,因而深得从51单片机向STM32转型的工程师的喜爱;而且其集成了ARM公司的开发工具集RealView(包括RVD、RVI、RVT、RVDS等),ARM和STM32的关系就不用多说了,其根正苗红的特性,也是很多人选择MDK-ARM的又一个原因。

到2013年2月,Keil已经发布了最新版Version 5,提供V4.71a的下载。有关更多MDK-ARM的信息,可以登录Keil公司的主页www.keil.com了解。3.开发工具的选择

初学者总是为选择具体哪个开发工具而纠结,我们上面也介绍了国内开发者使用较多的两款开发工具,那么读者会进一步问,我选择哪个比较好呢?这里笔者有两点建议:一、以所选开发板的例程为主,开发板的例程使用的是哪个开发工具,我们入门就用哪个,这样容易上手;二、以所选教材为主,可能你手边的教材不止一本,但看书时要有一个重点,选择一本你认为还不错的,然后以其为主,这样以该书选择的开发工具为自己要用的开发工具。

其实,选择哪个开发工具并不重要,只是很多人都有一个先入为主的习惯,如果你开始上手用的是IAR EWARM,那么后面就会习惯它;而如果你开始选择的是MDK-ARM,那么后面也会偏重于它。但这毕竟只是一个工具,既然有那么多人使用,当然就有它的优点,我们没必要在开发工具的选择上浪费太多的时间。

在这里笔者选择的是MDK-ARM V4.23,如果读者要跟着笔者入门STM32,那么希望选择相同的开发环境,并且是相近的版本,具体原因,看完本章后面的内容你就会明白了。3.2 安装MDK-ARM1.安装MDK-ARM

安装软件的过程对读者来说应该很简单,下面我们抓几个图简单介绍一下。要安装软件,第一步当然是要下载一个安装包了(这里选择的是MDKARM V4.23,若你的系统是Windows 8.1,可选择MDK-ARM V4.72a),这个应该是轻车熟路了。接下来就是双击安装包程序,进入程序安装的欢迎界面,如图3-1所示。

这里不用管它,直接单击“Next”,进入安装协议界面。想使用别人的软件,当然就要勾选“I agree to all the...”了,单击“Next”,进入下一步,如图3-2所示。图3-1 MDK-ARM欢迎界面图3-2 安装目录选择

该步骤是选择安装目录,这里最好按照默认的目录安装。当然也可以选择其他目录,但有些要注意的地方,这里提示一下:最好选择不含中文路径的目录;另外,目录的层数也不要太多。否则在编译或调试时出现什么问题就比较麻烦了。

选择好目录,单击“Next”进入注册个人信息界面,如图3-3所示。

该页面随便填写就可以了,不过在E-mail栏至少要填写邮箱的格式,否则无法进行下一步。一切完成,单击“Next”,进入漫长的安装过程,这时你可以休息一下了。

安装完成后,系统会提示MDK-ARM已经安装成功,如图3-4所示。图3-3个人信息界面图3-4 MDK-ARM安装成功

虽然开发环境已经安装成功了,但是事情还不算完,还有点扫尾工作要做,单击“Next”,进入仿真器驱动安装选择界面,如图3-5所示。

直接单击“Finish”完成安装,会弹出“Dos”对话框安装ULINK Pro Driver,瞬间就完成安装了。安装完成后,弹出Release Notes网页,如图3-6所示。图3-5 选择安装仿真器驱动图3-6 Release Notes网页

如图3-6所示,Release Notes 文档共介绍了6部分内容,我们重点关心的是第1点:“What's New in the Microcontroller Development Kit”。下面我们就通过该文档来认识一下MDK-ARM。2.学习Release Notes

1)有关MDK-ARM的名称 从软件的安装过程开始,有细心的读者会发现,软件上标注的名称是“MDK-ARM V4.70a”,也就是说ARM公司称之为MDK-ARM。这里的MDK表示的就是Release Notes所指的Microcontroller Development Kit(微控制器开发平台/套件)。

不过我们浏览一下“What's New in the Microcontroller Development Kit”的内容会发现,MDK从发布到现在共使用了3个名称:在开始发布时的名称是“DK-ARM”,该名称使用到1.4版;从1.5版开始使用“Keil Development Suite for ARM”,该名称使用到2.42版;从2.50版开始改用“RealView Microcontroller Development Kit”,这个名称一直被使用到现在。所以现在很多人叫它RVMDK。也有钟情于Keil的老用户(我就是其一)喜欢叫它Keil MDK;当然,也有人使用ARM公司对它的命名——MDK-ARM或ARM MDK。

2)MDK-ARM对STM32的支持 我们要使用MDK-ARM学习STM32F103增强版大容量的产品,可以先通过关键字“STM32F103”来搜索一下。搜索时让该关键字的词高亮显示,然后从低版本往高版本看。可以在Version 3.22a中看到有这么一句:

[Board Support]

Added:examples for EK-STM32 board in folder..\ARM\Boards\ST\EK-STM32F.

也就是说,在Version 3.22a版开始加入了ST评估板EK-STM32F的例子程序。

再往高版本看,可以在Version 3.23b中看到开始对STM32F103xC/xD/xE部分器件提供驱动支持,如图3-7所示。图3-7 Version 3.22b对STM32的支持

按照这个方法向上找下去,你会发现 Version 3.50版对 STM32器件的支持做了较多的补充:

[New Supported Devices]

ST Microelectronics STM32F103T4,STM32F103C4,STM32F103R4,STM32F102CB,STM32F102C8,

STM32F102RB,STM32F102R8,STM32F101T4,STM32F101C4,and STM32F101R4 devices.

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

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载