查看: 1700|回复: 0

【赚周年币】 开始第一个MBED实例 三

[复制链接]
  • TA的每日心情
    开心
    2019-11-19 11:07
  • 签到天数: 226 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 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 +15 收起 理由
    loveeeboard + 15

    查看全部评分

    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-11-23 12:47 , Processed in 0.121847 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.