Arduino开发实战指南:STM32篇
上QQ阅读APP看书,第一时间看更新

第1章 Maple简介

1.1 Maple与Arduino的关系

Maple是由麻省理工学院的学生所组成的Leaflab实验室开发的,其目的是让科技不再局限于高投入的实验室,将低成本、易开发的嵌入式设备推广开来。

在设计上,Maple对Arduino有很高的兼容性,例如,部分引脚的排列和功能、提供的操作函数(除了Arduino中的tone()与pluseIn()函数不支持)。Maple与Arduino最大的不同在于它所使用的处理器是32位的ARM处理器,而Arduino采用的是8位的AVR处理器。与AVR处理器相比,ARM处理器在处理速度、RAM容量、Flash容量、引脚数量、成本上都有很大的优势。

尽管性能上不如Maple,但是与Maple相比,Arduino出现得更早,更加成熟,有更多的扩展和库。

1.2 Maple的衍生版本

和Arduino一样,在发展的过程中,Maple也出现了为不同目标应用设计的不同版本,这里简单介绍下Maple Rev5以外的版本。

1.2.1 Maple RET6

Maple RET6是Maple Rev5的改进版本。硬件上,它与Maple Rev5的区别是它使用的是STM32F103RET6处理器。与Maple Rev5所使用的STM32F103RBT6(只有一个字符的差别)相比,RET6多了两路DAC输出,片上Flash与SRAM储存器容量分别由128KB和20KB提升为512KB与64KB,其他方面差别不大。

1.2.2 Maple Mini

Maple Mini具有兼容面包板的双列直插外形,如图1-1所示,可以直接用于面包板。外形只有51.3cm×1.82cm,也非常适合于对于尺寸和重量有较高限制的场合。例如,微型4轴飞行器、微型机器人等。Maple Mini采用的处理器为STM32F103CBT6,与Maple相比,GPIO(General Purpose Input Output,通用输入输出)数有所减少。如果需要作为便携设备使用,Maple Mini是首选。

图1-1 Maple Mini(图片来自leaflabs.com)

1.2.3 Maple Native

Maple Native是为了充分发挥处理器性能而设计的高性能开发板,使用了高端STM32F103处理器。与Maple相比,Maple Native具有两倍于Maple的GPIO数并提供外部扩展SRAM,能够应对高要求的应用。Maple Native具有DAC,能够真正实现高精度的模拟输出(Maple和Arduino只能通过PWM来输出模拟量)。同时,与其他的高性能开发板相比,在顾及高性能的设计之外,Maple Native仍然提供与Arduino类似的库。

1.3 Maple的硬件资源

Maple采用的是意法半导体集团生产的STM32F103RBT处理器,这款处理器是以ARM Cortex-M3为核心,工作在72MHz的频率下。与Arduino所使用的8位处理器相比,Maple的处理器性能和硬件资源有了很大的提升,但是却有相近的成本,为电子积木拓宽了应用的空间。Maple及其衍生版本与Arduino的性能对比如表1-1所示。Maple的布局如图1-2所示。

表1-1 Maple及其衍生版本与Arduino性能对比

图1-2 Maple的布局

1.4 libmaple简介

libmaple是由Leaflab开发的,用于STM32库,对STM32底层操作进行了重新封装,大幅提高了操作的简便性。

libmaple分为两部分:第一部分,以C程序编写的底层库,将其称为libmaple,提供对硬件高度灵活的操作,是严格意义上的libmaple,也是本章将要介绍的libmaple,在源码中的/libmaple目录下;第二部分,以C++编写的Wiring风格的API,该部分提供对第2章中介绍的Arduino兼容库部分的支持,位于源码中的/wirish目录下。

libmaple的源码位于GitHub上,可以在https://github.com/leaflabs/libmaple中找到。

libmaple附随于Maple IDE中,可以直接在Maple IDE的代码中加入对libmaple头文件的引用,同时libmaple也可以用于其他开发平台包,给习惯使用专业嵌入式开发IDE的用户使用。

1.5 Maple IDE的安装和使用

1.5.1 下载Maple IDE

目前Maple IDE支持Mac、Windows和Linux,可以在其官方网站http://leaflabs.com/docs/maple-ide-install.html下载到最新版本的Maple IDE。将下载的ZIP文件解压到合适的位置。

1.5.2 安装Maple IDE

1.Windows环境下安装Maple IDE

在Windows环境下,Maple IDE无需安装,但是需要为其安装DFU和虚拟串口两个驱动程序。首先按照如下步骤安装DFU驱动(用于上传程序到Maple)程序:

1)将Maple连接到计算机的USB接口。

2)按下左下角的复位键(印有"REST"),这时蓝色指示灯会快速闪烁6次,然后慢闪烁几次。

3)再次按下复位键,这次在蓝色指示灯快速闪烁6次期间按下另一个键(右上角,印有"BUT")并保持不放,直到指示灯开始慢闪烁时放开。

4)这时Maple会处于永久Bootloader状态(Perpetual Bootloader Mode),蓝色指示灯会一直闪烁,使你有机会安装DFU驱动程序。

5)Windows会提示你需要驱动程序,人工指定驱动程序所在目录位置,选择Maple IDE文件夹中的drivers\mapleDrv\dfu。

下一步安装虚拟串口驱动程序(用于通过USB与Maple进行串口通信):

1)复位Maple,等待蓝色指示灯停止闪烁(退出bootloader转而运行用户程序,新的Maple会运行制造时预留的测试程序)。

2)一旦Maple运行了用户程序,Windows会提示安装驱动程序,同样,人工指定驱动程序所在目录为Maple IDE文件夹中的drivers\mapleDrv\serial。

现在可以双击Maple IDE程序运行Maple IDE了。

2.Linux环境下安装Maple IDE

在Linux环境下安装Maple IDE的步骤如下:

1)首先确认是否已经安装了JRE,如果没有,可以通过如下命令安装:

sudo aptitude install openjdk-6-jre

2)解压压缩文件到合适的位置(例如桌面)。

3)打开解压压缩文件得到的文件夹,运行其中的install-udev-rules.sh,出现要求输入用于获得管理员权限的密码的提示。

4)用"sudo restart udev"命令重启udev。

5)双击程序运行Maple IDE。

3.Mac环境下安装Maple IDE

在Mac环境下安装Maple IDE的步骤如下:

1)双击你所下载的DMG文件使该镜像被加载。

2)拖动Maple IDE按钮到应用程序文件夹。

3)运行Maple IDE。

1.5.3 第一个程序

我们从File→Examples→Digital中选择一个简单的例程Blink,如图1-3所示,这个程序会让蓝色指示灯闪烁。

图1-3 打开例程"Blink"

然后进入Tools→Board→LeafLabs Maple...to Flash(根据你所选使用的型号选择),如图1-4所示。每种型号的Maple都有两个选项to Flash和to RAM。to RAM会将程序上传到Maple的RAM存储器,与上传到Flash相比,上传速度更快,并且通过简单的复位或者重新上电就可以清除程序。但是Flash空间更大,并且是可以在掉电后存储程序的唯一选择。如果需要调试程序,那么to RAM模式能够提高你的效率。

现在,可以单击左上角的(Verify)按钮来编译程序,编译的过程与结果会显示在底部的窗口中。该过程主要用于验证程序,检验程序是否有语法或函数引用错误。

现在,将Maple用USB Mini-B接口的USB线连接到计算机上。每次复位、重编程或接上USB,蓝色指示灯都会闪烁一段时间,表示它进入了bootloader状态。等到Maple开始执行用户程序,进入Tools→Serial Port选择Maple在你系统中所使用的串口设备,如图1-5所示。在不同的计算机不同的USB接口上,Maple会占用不同的串口,可以通过查看设备管理器来了解Maple所占用的串口。

图1-4 选择目标所使用的Maple类型

图1-5 选择Maple所使用的串口

单击(Upload)按钮开始上传程序,上传过程会在下方窗口显示。

Maple IDE是利用USB虚拟串口对Maple发送复位信号,复位后Maple会进入DFU模式片刻等待上传,如果没有上传程序,则会在数秒后开始执行原有的用户程序。

USB虚拟串口相关程序嵌入用户程序中,所以如果前一次上传程序出错,或者错误地选择了串口设备,都可能导致正常的下载操作无法进行。你可以在提示等待DFU设备的时候对Maple进行复位,或让Maple进入“永久bootloader状态”之后再进行下载,来规避由于USB虚拟串口通信问题造成的无法正常下载的问题。

最后,为了保证一切正常,我们可以上传一个通过USB虚拟串口发送文本“Hello,world!”的例程。单击File→Examples→Stubs→Helloworld打开该例程,单击(Upload)按钮将其上传到刚才已连接的Maple设备上。待Maple复位并进入用户程序(蓝色指示灯停止闪烁并听到第二声USB设备插入声),单击(Serial Monitor window)按钮打开串口监视器,如果你的串口设置正确,就可以看到Maple通过虚拟USB串口传回的文字。

1.5.4 Maple IDE的使用

与Arduino IDE一样,Maple IDE也是在Processing IDE的基础上开发的,且简单易用,非常容易上手。下面对Maple IDE做一些简单的介绍。Maple IDE的界面主要有代码编辑区、工具栏和状态栏组成,如图1-6所示。

图1-6 Maple IDE界面

Maple IDE的基本功能主要依靠上方的工具栏按钮来实现,如表1-2所示为工具栏按钮及其功能。

表1-2 工具栏按钮及其功能

1.6 Maple的开源协议

作为开源硬件的一员,Maple开发者给予Maple最宽松的协议,设计图以Creative Commons share-a-like方式发布,任何人都可以任意地使用、修改、重新发布Maple的设计和代码。但Maple IDE中来源于Arduino与Processing项目的代码需要遵从它们开发者的协议。对开源协议的尊重和保护在保护开发者的利益的同时,能够提高开发者的积极性,让开源事业有更好的发展。