STM32入门100步 第1期 是时候学ARM了!

文 / 杜洋 洋桃电子


一,为啥学?

标题的意思是“现在是学习ARM最好的时机”。什么是ARM?(读英文单词arm,不要读字母A-R-M)简单来说就一种性能出众的32位处理器的内核架构。1991 年,一家叫ARM的公司在英国成立了,它 们设计出了一种高性能、低功耗的处理器 的设计方案,给方案取的名字也叫ARM。ARM公司设计出了ARM内核架构(有点绕但不难理解),但它们不去制造这种处理器芯片,而是把设计方案卖给其他的 芯片生产厂商。生产厂商每生产出一片基于ARM架构的处理器,就要向ARM公司支付一定的专利使用费(当然最后都加到了消费者头上)。芯片生产厂商使用ARM公司的设计方案做出来的芯片就是“基于ARM架构的处理器”(以下简称ARM处理器)。这个故事听上去没什么了不起,但后来ARM公司火了,正是因为它们赶上了便携式智能设备快速发展的大好时机。正是因为ARM处理器比其他处理器在同等性能的情况下功耗更低,更适合使用电池的电子产品,所以很多PDA掌上电脑、高级 功能手机都使用ARM处理器。后来苹果开启了智能手机的新时代,ARM处理器毫无对手地成为了智能手机CPU的唯一选择。目前ARM处理器芯片的生产总数已经突破600亿片,而且还在快速增长,真是一本万利的好生意。智能手机几乎普及到了全球每个人,也就是说全世界每个人身边都有至少1片ARM处理器。ARM处理器的兴旺带动了整个产业链的富强。拿ARM 处理器做手机的公司越来越多,在智能手机出现10周年之际,其市场将近饱和。ARM处理器的火爆似乎走到了顶点。

再说说为什么现在是学习ARM的最好时机。不是说学得越早越好吗?ARM处理器刚出现时并不普及,其主要客户是智能产品开发商,能买到和用到ARM处理器的是少数大公司的技术人员。当ARM处理器在市场上普及之时,也正是智能手机、平板电脑如火如荼之际。ARM处理器的主要用途还是做手机或者类似的便携式智能产品。手机不是谁都能做的,虽然你能很方便地买到ARM处理器芯片,但主要用它们搞研发的还是大公司的技术人员。随着手机商场的饱和,市场开始向可穿戴设备和物联网上发力。2016年日本软银集团以310亿美元的价格收购了ARM公司。这一信息告诉我们,ARM公司还有更大的市场价值,那就是刚刚起步的物联网市场。物联网将除了计算机和手机之外的更多传感器、控制器连接到互联网中,比如智能电视、智能监控摄像头、智能台灯,都是物联网的设备。用户可以通过计算机、手机远程控制设备,还可以通过大数据、云计算全智能控制。物联网的应用小到每家每户的电器,大到城市交通、智能物流、精准到秒的天气预报。最近很火的共享单车,就是给普通单车加上了卫星定位、远程开锁的智能车锁,把单车变成了物联网设备,创造了互联网+的商业模式。物联网的潜力非常巨大,可能和智能手机一样再次变化我们的生活,我们将迎来物联网时代。

如果说在智能手机时代,掌握研发资格的是少数手机厂商,那在物联网时代,研发的门槛将降到最低。智能手机是单一的产品,目标用户也只有普通消费者。而在物联网时代需要被智能化的电子产品种类非常多,而且目标用户有消费者,也有工厂、商场、学校、医院等专业领域。每个领域都希望把设备智能化,这是一片巨大的市场,其产值不只百亿。电子行业的同行们将迎来一次机遇和挑战。学习ARM处理器、智能硬件、云计算会是加入物联网狂欢派对的入场券。行业可能重新洗牌,不知道谁能参与下一局。

二,谁要学?

ARM处理器会引领物联网前行,想参与物联网发展的朋友都应该学习相关的技术,但我特别推荐以下几类朋友学习ARM。他们是电子类专业的大学生、从事单片机行业的技术人员、想以物联网创业的人,以及有进取心的单片机爱好者。

当年我大学毕业时,只身一人去深圳找工作,当时我学过一点51单片机,在人才市场里显得格外有优势。大多数公司都要求会些51单片机,一点不会的人很多公司都不考虑。多少年过去了,如今的电子技术专业的大学生找工作会是什么样的要求呢? 我随便在某著名求职网站搜索“嵌入式开 发”,找出两个比较热门的职位能力要求。A公司的招聘信息(见图1)都是官话,职位是嵌入式硬件研发工程师,工作地在深圳,月薪 8000~10000 元。其中第 2 条要求熟悉ARM和DSP(数字信号处理),你看,搞硬件的都得玩过ARM哦。B公司的招聘信息(见图2)也是官话,但括号里面说出了老板的心声,职位是嵌入式工程师(或单片机工程师),工作地在深圳,月薪6000~8000,其中第2条要求熟悉单片机或Cortex-M的ARM处理器,还要做过3个项目以上。这样的职位要求对于刚毕业的大学生来说是不是有点太苛刻呢?没办法,市场决定技能,技能决定你的价值。

对于刚毕业的大学生和正在从事单片机开发的技术人员来说,如今熟悉使用51单片机依然能找到工作,但如果你熟悉ARM,那你的工作机会与发展潜力更大。会51单片机的人太多,如果你不能保证自己足够优秀,那就多掌握在未来有潜力的技能,Cortex-M 系列ARM处理器是最好的选择之一。如果你是创业者,涉足物联网行业是不错的选择,智能硬件的潜在价值不可估量,市场份额的巨大使创业者有平等的竞争和无限的机会,以Cortex-M系列ARM处理器为核心的智能硬件会是更多人的选择。

这里写图片描述
【图1】A公司招聘信息
这里写图片描述
【图2】B公司招聘信息

三,学什么?

我们说学ARM,学的到底是什么?ARM不是一个东西,它只是内核架构,熟悉了ARM内核架构没有用,我们要学的是基于ARM架构的具体某一款芯片的使用。我经过认真的考虑,推荐大家从Cortex-M系列ARM处理器入手,在Cortex-M系列当中又属STM32F1系列最适合入门者。我为什么会有如此选择,难道我拿了人家厂商的好处费?Cortex-M系列、STM32F1系列又是什么?要想彻底弄明白,就得讲讲ARM的进化史。

之前我们说过ARM公司设计了ARM内核架构,但这个架构并非固定的,随着技术的发展和市场的需求,ARM的版本也在不断升级。表1是ARM内核分类表。和iPhone手机的命名原则一样,ARM的更新换代也是用数字表示的。第一代叫ARM1,第2代叫ARM2,但没有4和5(或者出现过却很快消失),直接到了ARM7。说到ARM7,我最有体会,我在大学时ARM7刚刚出现,各种教程都言辞肯定地说ARM7将是未来的主流,如今却没有人再提起ARM7,因为它几乎被淘汰了。没多久,ARM9又火了起来,因为它具有MMU(内存管理单元)功能,可以运行操作系统,一时间各大教程又推崇 ARM9,认为能上操作系统才是王道。后来又出现ARM10、ARM11,这一时期很多初级的智能手机都是选用ARM处理器的。

【表1】ARM内核分类及应用
系列 架构 内核 特色 速度 应用
ARM1 ARMv1 ARM1
ARM2 ARMv2 ARM2 Architecture 2 加入了MUL乘法指令 4 MIPS
@ 8MHz 游戏机
ARMv2a ARM250 Integrated MEMC (MMU),图像与IO处理器。Architecture 2a 加入了SWP和SWPB指令 7 MIPS
@ 12MHz 游戏机,
学习机
ARM3 ARMv2a ARM2a 首次在ARM架构上使用处理器高速缓存 12 MIPS
@ 25MHz 游戏机,
学习机
ARM6 ARMv3 ARM610 v3 架构首创支援寻址32位的内存 28 MIPS
@ 33MHz Apple Newton
手提电脑
ARM7 ARMv3
ARM7TDMI ARMv4T ARM7TDMI(-S) 三级流水线 15 MIPS
@ 16.8 MHz 游戏机,
iPod音乐播放器
ARM710T 36 MIPS
@ 40 MHz 精简型手提电脑
ARM720T 60 MIPS
@ 59.8 MHz
ARM740T
ARMv5TEJ ARM7EJ-S Jazelle DBX
StrongARM ARMv4
ARM8 ARMv4
ARM9TDMI ARMv4T ARM9TDMI 五级流水线
ARM920T 200 MIPS
@ 180 MHz Armadillo,GP32,GP2X,
Tapwave Zodiac游戏机
ARM922T
ARM940T GP2X游戏机
ARM9E ARMv5TE ARM946E-S Nintendo DS掌上游戏机,Nokia N-Gage手机
ARM966E-S
ARM968E-S
ARMv5TEJ ARM926EJ-S Jazelle DBX 220 MIPS
@ 200 MHz 索尼爱立信K、W系列手机,明基西门子x65系列手机
ARMv5TE ARM996HS 无振荡器处理器
ARM10E ARMv5TE ARM1020E (VFP),六级流水线
ARM1022E (VFP)
ARMv5TEJ ARM1026EJ-S Jazelle DBX
XScale ARMv5TE 80200/IOP310/IOP315 I/O处理器
80219 400/600MHz Thecus N2100网络存储适配器
IOP321 600 BogoMips
@ 600 MHz
IOP33x
IOP34x 1-2核,RAID加速器
PXA210/PXA250 应用处理器,
七级流水线 Zaurus SL-5600
掌上电脑
PXA255 400 BogoMips
@ 400 MHz Palm Tungsten E2
掌上电脑
PXA26x 可达 400 MHz Palm Tungsten T3
掌上电脑
PXA27x 800 MIPS
@ 624 MHz HTC Universal智能手机, Zaurus SL-C3100、3200掌上电脑, Dell Axim x30、x50系列掌上电脑
PXA800(E)F
Monahans 1000 MIPS
@ 1.25 GHz 掌上电脑
PXA900 Blackberry 8700
系列蓝莓手机
IXC1100
IXP2400/IXP2800
IXP2850
IXP2325/IXP2350
IXP42x NSLU2网络存储适配器
IXP460/IXP465
ARM11 ARMv6 ARM1136J(F)-S SIMD, Jazelle DBX, (VFP),八级流水线 Nokia N93手机,
Nokia N800手机
ARMv6T2 ARM1156T2(F)-S SIMD, Thumb-2, (VFP),九级流水线
ARMv6KZ ARM1176JZ(F)-S SIMD, Jazelle DBX, (VFP)
ARMv6K ARM11 MPCore 1-4核对称多处理器,SIMD, Jazelle DBX, (VFP)
Cortex ARMv7-A Cortex-A8 Application profile, VFP, NEON, Jazelle RCT, Thumb-2, 13-stage pipeline Texas
Instruments OMAP3
手提电脑
Cortex-A9 智能通信设备
Cortex-A9 MPCore 智能通信设备
ARMv7-R Cortex-R4(F) Embedded profile, (FPU) 600 DMIPS 带实时操作系统的嵌入式微控制器
ARMv6-M Cortex-M0 低成本,低功耗 0.9 DMIPS/MHz 低功耗设备
Cortex-M1 低功耗,高效率 0.9 DMIPS/MHz 低功耗智能设备
ARMv7-M Cortex-M3 高效率控制 1.25 DMIPS/MHz 嵌入式微控制器
Cortex-M4 高性能控制 1.25 DMIPS/MHz 高级嵌入式微处理器
Cortex-M4F 带浮点运算 高级嵌入式微处理器

到了2010年,ARM公司又发布了新的版本,这次命名不叫ARM12,而是专门起了一个名字叫Cortex。这里还需要说明一点,每次发布的ARM版本中都会有不同的内核架构,这样做是为了满足不同领域的应用需求。比如Cortex系列是ARM的版本名,就像iPhone7手机,是大的升级版本,但是针对不同的用户需求,比如有人喜欢小屏,有人喜欢大屏,又分成iPhone7和iPhone7 Plus,这就是Cortex版本中的ARMv7-A、ARMv7-R、ARMv7-M三种内核架构的子版本,内核架构的差异决定了其所应用的领域。ARMv7-A系列针对最高性能的操作系统和用户应用,适合作为智能手机的CPU。ARMv7-R系列针对实时系统,适用于高性能航空航天设备。ARMv7-M系列则定位于微控制器,适用于智能终端设备、物联网产品。而在ARMv7-M系列中又会分为Cortex-M3、Cortex-M4、Cortex-M4F系列,这是针对一个大领域中的具体应用差异所划分的。这类似于iPhone7 Plus当中又分32GB、128GB、256GB 内存版本,在想买 iPhone7 Plus的用户当中,根据自己使用量的需要选择不同的内存大小。当你向服务员说“我想买苹果公司的 iPhone7手机、Plus版、32GB版,谢谢”,相当于你对我说“我要学ARM处理器、ARMv7-M架构、Cortex-M3系列,谢谢”。但这里你不需要说ARMv7-M架构,因为当你说出Cortex-M3系列时,就只能是这一架构了。就像你不用说iPhone7手机的 Plus版,而直接说iPhone7 Plus就可以了。

我们最终是要做物联网、智能硬件产品的,所以要特别关注一下在最新的Cortex系列之中,有哪些是针对这一应用而推出的子系列。首先大分类是Cortex-M系列,专门用于微控制器的系列。在这个分类之中有Cortex-M0、Cortex-M1、Cortex-M3、Cortex-M4、Cortex-M4F,其中M0和M1是针对低性能、低功耗的产品(比如电池供电的计时器),所以二者可以只用M0系列指代。M4F是指在M4的基础上加入了浮点运算功能,这是为少数特殊应用设计的,通常只说M4系列即可。表2是M0、M3、M4的性能对照表。从中可以看出M0系列的架构版本低、频率低,很多功能都没有,于是它的价格也低,适合做简单应用且对成本敏感的产品。M4系列架构版本最高,所有功能都有,价格必然最贵,适合做高性能且不在乎价格的产品。M3系列比M4系列差一些,性能、价格居中,适合要求性价比的产品。图3所示是Cortex系列性能对照,是所有子系列的性能排行榜。

【表2】三个系列内核的性能对照
Cortex-M0 Cortex-M3 Cortex-M4
架构版本 V6M v7M v7ME
指令集 Thumb,Thumb-2系统指令 Thumb + Thumb-2 Thumb + Thumb-2,DSP,SIMD,FP
DMIPS/MHz 0.9 1.25 1.25
总线接口 1 3 3
集成NVIC 是 是 是
中断数 1-32 + NMI 1-240 NMI 1-240 + NMI
中断优先级 4 8-256 8-256
断点,观察点 4/2/0,2/1/0 8/4/0,2/1/0 8/4/0,2/1/0
存储器保护单元(MPU) 否 是(可选) 是(可选)
集成跟踪选项(ETM) 否 是(可选) 是(可选)
单周期乘法 是(可选) 是 是
硬件除法 否 是 是
WIC支持 是 是 是
Bit Banding 否 是 是
单周期 DSP/SIMD 否 否 是
硬件浮点 否 否 是
总线协议 AHB Lite AHB Lite,APB AHB Lite,APB
CMSIS支持 是 是 是
应用 “8/16 位”应用 “16/32 位”应用 “32 位/DSC”应用
特性 低成本和简单性能 性能效率 有效的数字信号控制

这里写图片描述
【图3】Cortex系列性能对照表

关于ARM内核的部分我们都清楚了,接下来把我们要学习的ARM系列投射到具体的实物上,毕竟我们要用一款具体的芯片来学习与实验。之前说过,ARM公司不生产芯片,它们把方案卖给各大芯片生产商,要学习具体的ARM芯片,先要知道有哪些生产ARM内核的芯片生产商。要知道ARM芯片已经生产出超过600亿片,生产这么多芯片的厂商有成百上千家一点也不夸张吧?这么多厂商我没必要一一列举,苹果公司也自己生产ARM芯片,但你买不到。我要介绍的是最有代表性、市场上最常见的厂商,它们的芯片要在行业内有一定影响力。表3所列是目前最流行的ARM处理器生产商。第一家是我们最熟悉的Atmel公司,很多朋友的51单片机都是从AT89C51这款芯片开始的,而这家公司也推出过基于ARM9内核的处理器,只不过普及度不高。为了发挥它们家的优势,它们还把曾经在单片机圈非常火爆的AVR单片机做成了32位版本的AVR32,它不是ARM内核,但希望以此与ARM竞争,结果是现在很少有人听说过AVR32。ARM的地位不可动摇,大部分厂商还是乖乖地生产ARM处理器。专业做音频处理的凌云逻辑公司也推出了5款基于ARM9的芯片。飞利浦麾下的恩智浦公司在10年前做过两款ARM7芯片流行一时,我最早了解ARM也是通过这两款芯片。三星生产的S3C2440一度是高性能ARM9的王者。但这些老牌大公司因为产品线太多,在ARM 处理器上都没有太快的更新。当Cortex-M系列发布时,大厂们都没看好这款新内核,认为现有的ARM9还要流行很长时间。只有意法半导体(ST)推出了基于Cortex-M 的STM32F系列芯片,没想到一炮而红,彻底打败老牌大厂,STM32成了最新一代ARM处理器的代名词。随后英飞凌、飞思卡尔、德州仪器、新唐科技等大小厂商都跟进推出Cortex的芯片,但已经抢占不了太多的市场份额。意法半导体成了Cortex产品最大的赢家,当然ARM公司赢得更多。

聊完几大商业巨头的竞争史,最后回到主题:学什么?ARM处理器是目前最有潜力的,Cortex内核是最新、最好的系列,Cortex-M系列最适合物联网设备的开发,意法半导体公司的STM32系列是最流行、资料最多、应用最广的ARM芯片。所以用STM32系列学习ARM是目前的最优选择。STM32有3个系列,F0系列功能太少,F4系列过于复杂,取中间的F1系列进行入门最为适合。最终我选定的ARM入门学习用的芯片型号是 STM32F103C8T6,芯片的样子如图4所示。型号代表什么含义,这款芯片又有什么功能,我们下期再说。

【表3】常见的ARM处理器生产商
厂商 产品系列 内核版本
ATMEL AT91系列 ARM926EJ-S
凌云逻辑 EP93系列 ARM920T
恩智浦(NXP) LPC2100系列 ARM7TDMI
LPC2210系列
三星电子 S3C2410系列 ARM920T
S3C2440系列
意法半导体(ST) STM32F0系列 ARM® Cortex™- M0
STM32F1系列 ARM® Cortex™- M3
STM32F4系列 ARM® Cortex™- M4
英飞凌 XMC1000系列 ARM® Cortex™- M0
XMC1000系列 ARM® Cortex™- M4F
飞思卡尔 K50系列 ARM® Cortex™- M4
德州仪器(TI) LM4Fx Stellaris ARM® Cortex™- M4F
新唐科技 NUC505系列 ARM® Cortex™- M4F

这里写图片描述
【图4】STM32F103C8T6芯片照片

四,好学吗?

好不好学因人而异,学过51单片机的朋友再学ARM就会容易一些,因为一些基础的C语言知识和电路原理都是相通的。如果没有模拟/数字电路基础,也不会C语言,学ARM会困难些,但也没到完全学不会的程度。至于每位读者是否适合学ARM,我想不妨试试看,如果遇见的困难太多再退而学简单的51单片机也不迟。而且在这个过程中你不仅大概了解了ARM的知识,也会发现自己学习的极限和局限在哪里。

五,怎么学?

目前行业内教授ARM处理器的教程和图书已经非常多,比较著名的也有两三家。它们都是从ARM处理器的内核架构的原理分析出发,以理论教学为先。这种方式沿袭了大学专业教学模式,适合理论逻辑性很强的优秀大学生。而对于找工作、做项目、有爱好的大众入门者来说,传统教学方式不仅太抽象、太艰深,而且与实践脱节,提不起兴趣,所以我计划在《无线电》杂志上连载一系列从实践、兴趣、乐趣出发的新教学模式文章,配以相关的教学视频。文章侧重理论,视频关注操作过程,如此便会有事半功倍的学习效果。敬请期待下一期的文章。

六,学多久?

学多久这个问题,除了因人的学习能力而异之外,还要看你想学到什么程度。以我的个人见解,学习一项技术是没有止境的。所谓的“学会了”是指掌握了这种技术的基本原理和思维方式,并能够在使 用技术时沿用这一原理和思维,自主独立地展开扩展性学习,而不再需要有老师指点,遇见问题能够自己解决。以我个人学习 STM32的经历来看,我学STM32完全是自学,没有看过某个系统的教程,只是在网上找资料,看数据手册,遇见问题也能独立解决。那是因为我有13年的51单片机开发经验,对51单片机的原理和思维都非常熟悉。把51单片机的原理和思维套在ARM学习上同样适合,所以对我来说,初学ARM就好像把之前学过的东西变个样子复习一遍。正因为我学习ARM如此之快,对于这套原理和思维非常熟悉,才有胆量在此连载教学文章。虽然深知天外有天,我做的教学不会是最好的,但我会是最细致、最认真的,把知识与经验分享出来,让更多朋友受益,本身也是一件幸事。回到正题,ARM到底要学多久?如果你对51单片机或者任何一款其他单片机很熟悉,有丰富的应用经验,那1到3个月就能学会。如果你是零基础入门的,对电路基础和C语言都只是听说过,那么想学会至少需要半年到一年。而我的连载文章会以零基础的初始者为起点来教学,用最低的门槛接纳更多想学习的朋友。


到洋桃电子全部文章:http://www.doyoung.net/YT/index.html
这篇文章PDF百度云下载:https://pan.baidu.com/s/1hsqyVZI

猜你喜欢

转载自blog.csdn.net/qq_39681921/article/details/81546377