【XNUCLEO-F030R8试用体验】之二:mbed平台学习 1.mbed是什么? mbed是 ARM公司官方提供的一套用于快速开发 ARM 架构 单片机应用原型的工具集,包括免费的软件库,硬件设计参考和基于Web的在线编译环境三部分具体内容。mbed 的代码和大部分硬件设计都是以开源的方式提供的,再加上ARM系列单片机具有较高的性价比和广泛的应用基础,所以mbed吸引了大量的 电子产品开发者,在mbed官网可以看到许多开源代码,学习起来非常方便和简单。 笔者是在学习Arduino的过程中了解到mbed开发平台的,Arduino的使用非常简单,开发者仅仅需要简单的代码就能完成较复杂的设计,并且不需要掌握具体的微处理器知识,仅仅需要C或C++语言知识就够了。但是,Arduino大多面向AVR系列单片机,对大多数采用ARM Cortex内核的MCU缺乏支持,而mbed平台的出现完成了这项工作。笔者在开发过程中发现,mbed平台不仅用起来和Arduino平台一样简单,而且由于MCU性能更高,能够完成更复杂的工作。下面是Arduino平台和mbed平台的对比:
2.mbed怎样开发? 笔者目前接触到的的开发方式有2种,下面简单介绍: ①在线开发 在线开发主要使用mbed官方提供的基于Web的在线编译环境mbed compiler,用户只要有联网的计算机就可以开始基于 mbed 的开发。mbed 的上载方式就是复制,是所有操作系统都支持的操作,理论上来说,用户可以在所有的操作系统上进行开发。mbed网址为:。下面演示怎样在线开发:
创建项目:My Programs->New Program,选择硬件平台,由于XNUCLEO兼容NUCLEO,所以选择NUCLEO-F030R8,选择一个示例工程(这里我们选择Nucleo-blink-led),点击OK即可新建工程。若找不到该型号,可以点击右上方的Plaform,添加需要的 开发板型号。
双击main.cpp文件,打开工程,可以看到示例代码,点击compiler按钮可以对工程进行编译,编译完成后会弹出下载选项,用户可以把生成的.bin文件下载到MCU虚拟出的磁盘里,这样就完成了程序下载工作,此时MCU已经在运行了。 如果用户不习惯在线编程,也可以选择将工程导出,选中工程,右键选择Export Program,在弹出框中选择导出工程的类型(这里以MDK为例),可以将工程下载到电脑。
②离线开发 离线开发即使用离线开发工具进行开发,SMeshStudio 是mbed提供的离线 mbed 开发环境,它也可以用来开发任何支持 gcc 编译器的 mbed 开发板,而且它还可以用来开发 Arduino和 Con tiki应用。 SMeshStudio 基于 eclipse 开发,所以用户只要安装了JDK 运行环境,就能使用。另一种方式就是使用多数人都熟悉的keil开发啦,还记得前面我们从mbed compiler导出的keil工程吗?这个工程包含了基本的库函数,稍加修改就可以作为一个通用的模板,以后每次建立工程都可以拿来用。 说说两种开发工具的优缺点:SMeshStudio上手时间不长,基于eclipse开发,使用起来不熟练,偶有崩溃,之前笔者用codewarrior也有这种情况,另外SMeshStudio不支持软件调试,这对需要调试的工程不够方便,其优点在于自带了很多常用的库如GPS、HTTP、单总线、LCD、USB等,开发者可以很方便的把这些库添加到程序中,使用很方便。Keil使用起来比较熟练,并且由于有了从mbed compiler导出的模板,开发起来也相对容易,但由于缺少库的支持,用户在使用如GPS、LCD等外设时,需要自己编写库或者导入库(目前还没有尝试过)。 由于XNUCLEO开发板的原因,笔者最终选择了Keil开发,这是由于MeshStudio仅支持串口ISP下载和虚拟磁盘下载两种方式,并未集成ST-Link,而第一篇提到过,XNUCLEO的ST-LINK没有虚拟磁盘功能,同时由于开发板上并没有留出BOOT选择跳线,故ISP下载方式也不能实现,因此选择了Keil的ST-LINK下载方式。 3.keil开发环境下库函数编程方式与mbed编程方式比较 现在我们打开一个用mbed编写的闪烁灯程序。
可以看到代码非常简洁,包含头文件后,定义数字输出对象myled,在main函数里不断点亮和熄灭LED,时间为1s。左侧是库函数,我们可以查到相应的函数定义,调试也比较方便。 同样闪烁灯的程序,看看用库函数写需要多少行代码:
我们可以看到,用库函数开发,开发者编写了30多行代码,其中延时的部分采用软件延时,精确度差,如果需要获得更精确的延时,需要用到系统的定时器,代码量会增加。 看完上面的对比,我们可能会有疑问,为什么mbed会如此简洁地实现了库函数的功能呢?看一下mbed SDK的体系结构或许就明白了。
(图片取自傅骞《mbed学习指南》) 通俗来讲,CMSIS-CORE和mbed HAL实现是和硬件相关的,每种硬件各不相同,对应的实现也各不相同。这就好比 STM32的库和FREESCALE的库不能通用,而基于mbed HAL实现的上层API则屏蔽了硬件差别,为用户提供统一的调用接口。 下节内容预告:mbed学习之流水灯、按键、串口和中断
|