查看: 196|回复: 0

[技术] 【赚周年币】 开始第一个MBED实例 三

[复制链接]

19

主题

0

好友

755

积分

举人

Rank: 4

  • TA的每日心情
    开心
    前天 07:12
  • 签到天数: 92 天

    连续签到: 9 天

    [LV.6]常住居民II

    发表于 2017-1-9 08:51:24 |显示全部楼层
    本制作完成首个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的定义,很有趣,mbed非常支持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);//定义对象类,名称为led,方法为LED1
    *
    * int main() {//整形主函数
    *     while(1) {//死循环
    *         led = !led;//每运行一次led的值取反
    *         wait(0.2);//内置延时函数,等待0.2秒
    *     }
    * }
    * @endcode
    */
    下边按照项目来进行实验
    2. 首先需要设置项目设置
    项目设置1 右击左边mbedplc824/General Optoins中右边Target/Device/下拉找到NXP/LPC800/NXP LPC824M201。见图1
    项目设置2 Debuger右边的Setup下的Driver下拉选择J-Link/J-trace.见图2
    项目设置3 在Debuger下边的J-Link/J-trace中的Connection中看是否选择了swd,如果是,不用改动就可以了。见图3  
    完成以上3步,就可以编译下载了。参考图4:
    点击编译,完成后点击下载就可以看到红色的LED闪烁了。
    为了好理解,下边将这个工程文件拷贝上:
    #include "mbed.h"
    DigitalOut led(LED1);
    int main(){
    while(true){
      led =!led;//运行led的反值
      wait(0.2);//延时0.2秒
    }
    }
    只有8行语句,里面没有一个是牵涉到硬件的——这就是mbed的优势!——开发人软不需要知道底层如何如何,只需要关心你操作的对象实例就可以了。上例中对象实例: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);
    }
    }
    结果见图5。
    以上工程非常简单,但比常规编程会发现更简单!

    图1

    图1

    图2

    图2

    图3

    图3

    图4

    图4

    图5

    图5
    已有 1 人评分 收起 理由
    loveeeboard + 15

    总评分:  + 15   查看全部评分

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /5 下一条

    手机版|爱板网 |网站地图  

    GMT+8, 2017-9-21 13:12 , Processed in 0.246734 second(s), 15 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部