[嵌入式linux]

【ARMmbed开发实战】之DigitalOut&DigitalIn

[复制链接]
2238|0
手机看帖
扫描二维码
随时随地手机跟帖
michael_llh|  楼主 | 2016-8-28 16:12 | 显示全部楼层 |阅读模式
本帖最后由 michael_llh 于 2016-8-28 16:14 编辑

       关于在线IDE还有一个小技巧补充一下。
       先明白一个东西,就是说Mbed已经高度集成化了,所以我们说一个简单的LED工程,它是可以适应很多平台的,但是我们总不能要点亮一个LED就去创建一个工程吧。大家如果使用Keil来开发32的话,比如说103的话,后面对应不同的后缀表示32F103的不同型号,这个时候对于同一个工程我们只要修改下平台以及一些其他的配置就可以了。类比到ARMmbed也是一样的,只不过它更加强大就是了。
       在Compiler的界面当中我们选择右上角的方框。
图片1.png
       这个时候会出现你的工作空间支持的几种平台,当然你可以直接在这里进行添加,也可以像我们之前说的那样去添加,在这里会比较方便。此时如果我们更改平台,相应的工程对应的平台也就发生了改变,很方便。这个时候编译出来的结果就是对应我们现在选择的平台了。
图片2.png
       接下来进入正题,我们今天的话题就是关于ARMmbed的输入输出端口。首先我们先查看一下官网的参考手册,我们可以看到相应的介绍。这里的端口有这么多的配置模式我们在这里就慢慢的一个个看过去。
图片3.png
       第一个我们先看最简单的输入输出端口,也就是这里的DigitalIn和DigitalOut,我们来看看他们的具体使用方式。
       首先我们看DigitalOut,因为这个是我们等下实验中要测试的内容,所以我们这里看下具体的使用方法,单击我们左侧的DigitalOut选项可以得到详细信息。
       有一个实例程序,可以看到非常的简单。
图片4.png
       主要的是我们看下API。这里提供了简单的关于DigitalOut这个类的介绍,以及类当中的方法,因为这些ARMmbed最后封装成的都是以我们的C++类的这种形式,所以在使用的时候需要有一定的C++基础,所以如果没有这方面的知识,需要自己去扩充。
图片5.png
       同样我们单击相应的方法或者类名可以得到更加详细的介绍。
       网址:
图片6.png
       其实大家可以通过这些内容自己就可以明白这些内容的使用方法,这里我们详细说明一次,后面用到的话我们就直接写了,就不再说明了。
       第一个,DigitalOut这个类当中是定义在mbed下面,我猜测这里是一个命名空间,统一定义在mbed的这个命名空间下面,具体等待考证。然后我们这个DigitalOut开始自己定义自己的方法。首先就是类的构造函数,这个函数是和我们的类名相同,所以这里我们看到,定义的方式为DigitalOut::DigitalOut(PinName Pin)。当我们需要使用一个引脚的时候,都需要调用这个构造函数,也就是说我们需要调用它来构造一个实例,一个对象。
       使用方法如下:
       DigitalOut led(B0)
图片7.png
       上面我们看到还有一个参数,PinName对吧,那当我第一次使用的时候我怎么它应该填什么呢?在官网找了半天没有找到具体的说明,但是在我们的下载到本地的工程当中有一个文件中进行了定义。
       路径就和我们下图的一样,下面有个PinNames.h
图片8.png
       这个文件当中就记录了对应的引脚定义。后续如果我们要进行开发板的自定义的话我们也需要在这个地方修改相应的引脚定义。
图片9.png
       到这里我们已经知道了使用一个引脚输出该如何定义了,下面我们继续往下看。
       第二个构造函数,这个函数有点不大一样,它多了更多的参数选择,第一个参数是引脚,第二个参数是方向选择,第三个参数是端口模式,第四个是初始值。
图片10.png
       OK.那么现在又有一个问题了,这些参数我怎么知道填什么!!
       端口模式有四种选择:
1.上拉
2.下拉
3.没有上下拉
4.开漏
图片11.png
       方向无非就两种,要么输入要么输出了,但是我们本身这个类就是DigitalOut,为什么还有这个参数暂时还不是很懂。在官网翻了下还是没找到相依的定义,这个文档真的写的不好。
这个定义还是我们刚刚看的PinName.h这个文件的当中,可选择的内容如下:
图片12.png
       构造函数说完了,我们看下方法。
       write就没有什么好说的了,写0就是输出低,写1就是输出高了。
       read就是读取这个引脚的值,返回值是个int
       output就是将这个引脚设置为输出
       input就是将这个引脚设置为输入
       mode就是修改这个引脚的模式,模式有我们上面说到的四种
图片13.png
       我们重点看下最后两个,这两个就是我们的操作符重载,我们先不管他们怎么实现的,我们这里只关心他的应用,这里我们看到第一个。
       DigitalOut& operator= (int value)
       也就是说对“=”号进行了重载,那么我就可以这样直接使用比如说我们上面定义的:
       DigitalOut led(PB_0);
       led = 0;
       也及时说对led这个对象我们可以直接使用等号进行赋值,这个和write的方法是一样的。
       下面我们看下另外一个:
       DigitalOut& operator int ()
       也就是时候说对int进行了重载来读取管教的值,和我们上面的read是一样的功能。
       使用方法如下,定义一个int value。
       value = int(led);   //这里的led就是我们上面定义的Digital对象。
       好了大概到这里我们对DigitalOut的介绍就到这里了。接下来我们通过具体的代码来看下如何进行使用。
       官方的点灯代码,我们看到非常的简单,和传统的开发32开发就是完全不一样的。几行代码就可以实现闪烁灯,还是非常令人振奋的。
       其他的使用方式的话和我们上面说到的使用方法也是类似的,在这里我们就不在过多的描述了,等我们用到的时候我们再详细说明。
图片14.png
       DigitalIn的话也是类似的,大家懂得如何使用DigitalOut自然就懂得如何使用DigitalIn了。
       手上刚好有一块我们F401RE的nucleo板子,所以后面的话一些例程将使用这个板子和大家一起探讨。

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

381

帖子

8

粉丝