首页->【玩CortexM0】

50 0

第三讲 开始第一个MBED实例

本实验完成下载的LED点亮和进一步实验理解GPIO的定义。

在LPC824工程中,文件夹非常简洁,除了1个mbed文件夹就是1个main.cpp文件,我们以它开始。

1. 做mbed实例首先需要理解和查看这几个mbed文件夹中的.h文档:

PinName.h顾名思义,就是管脚名称定义文档:

typedef enum {

 PIN_INPUT,

 PIN_OUTPUT

} PinDirection;

管脚输出方向,只有输出和输入,代码PIN_INPUT 或 PIN_OUTPUT,实际上在C++语言中,这个属于类定义,针对对象的类描述或方法声明。一下这种解释就省了。

接着是管脚定义

typedef enum{较长,省略了,前边的

  P0_0  = ( 0 << PIN_SHIFT) | 0x44,

  P0_xx直接定义LPC824 的管脚名称,=后边的我们可以不管他,写寄存器位置的代码

以下同,一共有0~28 ——29个GPIO口;

再下边的定义实际上是Arduino的定义,很有趣,ARMmbed非常支持Arduino。为此我也玩了一通Arduino板子。定义直接了当:

D0~D15是数据IO口,右边的是LPC824定义的GPIO

A0~A5是ADC输入口,右边也是LPC824的定义,以下同,见名思意,应该可以理解的。

最后是定义口类型,上拉,下拉,等。接着看DigitalOut.h文档,在文档的前部名字空间——C++或C#的基本,有一实例:

/** A digital output, used for setting the state of a pin

 *

 * @Note Synchronization level: Interrupt safe

 *

 * Example:

 * @code

 * // Toggle a LED

 * #include "mbed.h"

 *

 * DigitalOut led(LED1);

 *

 * int main() {

 *     while(1) {

 *         led = !led;

 *         wait(0.2);

 *     }

 * }

 * @endcode

 */

2. 下边按照实例来编写我们的首个main。

实例说明:新创建的项目文档必须有:

#include "mbed.h"

接着要闪烁一个LED首先需要定义一个LED对象实例——C++,C#,我们定义如下:

DigitalOut led(LED1);

实力名称为led,对应PinNames可以知道LED1是Arduino的定义,LED1=LED_RED,又为LED_RED =P0_15;因此括号了面可以填写LED1,或LED_RED,或P0_15,是一样的!

接着在主函数中编写执行语句:

int main(){

 while(true){

  led =!led;//运行led的反值

  wait(0.2);//延时0.2秒

 }

}

表示红色的LED 0.2秒亮,0.2秒灭;

项目设置1 右击左边mbedplc824、General Optoins中右边Target/Device/下拉找到NXP/LPC800/NXP LPC824M201。见图30

项目设置2 Debuger右边的Setup下的Driver下拉选择J-Link/J-trace.见图31

项目设置3 在Debuger下边的J-Link/J-trace中的Connection中看是否选择了swd,如果是,不用改动就可以了。见图32 

完成以上3步,就可以编译下载了。参考图33:

点击编译,完成后点击下载就可以看到红色的LED闪烁了。

为了好理解,下边将这个工程文件拷贝上:

#include "mbed.h"

DigitalOut led(LED1);

int main(){

 while(true){

  led =!led;//运行led的反值

  wait(0.2);//延时0.2秒

 }

}

只有8行语句,里面没有一个是牵涉到硬件的——这就是ARMmbed的优势!——开发人软不需要知道底层如何如何,只需要关心你操作的对象实例就可以了。上例中对象实例:led——输出实例,因为简单属性方法都没有了,执行语句就是翻转值和延时。照片省了,自己运行看结果最好。

3. 下边改动一下,为了更好的理解GPIO,直接用P0_xx来定义:

#include "mbed.h"

DigitalOut myled0(P0_15);

DigitalOut myled1(P0_16);

DigitalOut myled2(P0_17);

int main(){

 while(true){

  myled0= 1;myled1= 0;myled2= 1;

  wait(0.2);

  myled0= 0;myled1= 1;myled2= 0;

  wait(0.2);

 }

}

结果见图34。

以上工程非常简单,但比常规编程会发现更简单!如果心痒痒,可以直接继续你的MBED之旅。

楼主可见