GPIO是英文General Purpose Input Output(通用输入/输出)的输出.
mbed数字输入输出API在mbed中,一共有三个类和数字输入输出相关,分别是DigitalIn(数字管脚输入类)、DigitalOut(数字管脚输出类)、DigitalInOut(数字管脚输入输出类),各个类的公用方法描述如下:
类名 | 方法 | 用途 |
DigitalIn | DigitalIn(PinName pin) | 构造函数,设定pin为数字输入管脚 |
int read() | 读取管脚值 | |
void mode(PinMode pull) | 设定管脚的工作模式,可以是PullUp(上拉), PullDown(下拉), PullNone(无), OpenDrain(开漏输出)等状态 | |
operator int() | 读取管脚值的简写方式 | |
DigitalOut | DigitalOut(PinName pin) | 构造函数,设定pin为数字输出管脚 |
void write(int value) | 设定管脚值 | |
int read() | 读取管脚值 | |
DigitalOut& operator= (int value) | 操作符重载,相当于设定管脚值 | |
DigitalOut& operator= (DigitalOut& rhs) | 操作符重载,相当于设定管脚值为另一管脚的值 | |
operator int() | 读取管脚值的简写方式 | |
DigitalInOut | DigitalInOut(PinName pin) | 构造函数,设定pin为数字输入输出管脚 |
void write(int value) | 设定管脚值 | |
int read() | 读取管脚值 | |
output() | 把管脚设成输出状态 | |
void input() | 把管脚设成输入状态 | |
void mode(PinMode pull) | 设定管脚的工作模式,可以是PullUp(上拉), PullDown(下拉), PullNone(无), OpenDrain(开漏输出)等状态 | |
DigitalOut& operator= (int value) | 操作符重载,相当于设定管脚值 | |
DigitalOut& operator= (DigitalOut& rhs) | 操作符重载,相当于设定管脚值为另一管脚的值 |
在上面的方法中,比较难以理解的就是操作符重载,如下面的代码片断,其中的led1=1就相当于led1.write(1),而led2=led1就相当于led2.write(led1.read())。
DigitalOut led1(LED1);
DigitalOut led2(LED2);
led1=1;
led2=led1;
那么具体的管脚名称,如这里的LED1,LED2是在哪里定义的呢?一般来说,mbed的管脚定义会出现在hal目录对应MCU下的PinNames.h中,所有的管脚名称都被定义成枚举常量,其中的有些是管脚的实际名称,有些是别名。
typedefenum {
// LPC Pin Names
P0_0 = LPC_GPIO0_BASE,
P0_1, P0_2, P0_3, P0_4, P0_5, P0_6, P0_7, P0_8, P0_9, P0_10,
P0_11, P0_12, P0_13, P0_14, P0_15, P0_16, P0_17, P0_18, P0_19,
P0_20, P0_21, P0_22, P0_23, P0_24, P0_25, P0_26, P0_27, P0_28,
P0_29, P0_30, P0_31,
……
// mbed DIP Pin Names
p5 = P0_9,
p6 = P0_8,
p7 = P0_7,
p8 = P0_6,
p9 = P0_0,
……
// Not connected
NC = (int)0xFFFFFFFF
} PinName;
mbed数字输入输出初步应用DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalIn btn(P2_8);
int main()
{
led1=0;
led2=0;
while (1)
{
led1=!btn;
}
}
while (1)
{
if (btn==0 )
{
wait_ms(1000);
if (btn==0 )
{
led1=!led1;
while (btn==0);
}
}
}
mbed的模拟输入输出
类名 | 方法 | 用途 |
AnalogIn | AnalogIn(PinName pin) | 构造函数,把pin设定成模拟输入 |
float read() | 读取ADC采样值,返回的是0-1之间的小数,即0代表0V,1代表3.3V | |
unsigned short read_u16() | 读取ADC采样值,返回的是整数,,范围在0到65535之间 | |
operator float() | 操作符重载,相当于float read() | |
AnalogOut | AnalogOut(PinName pin) | 构造函数,把pin设定成模拟输出 |
void write(float value) | 设定DAC的输出值,范围为0-1之间的小数,即0代表0V,1代表3.3V | |
void write_u16(unsigned short value) | 设定DAC的输出值,范围为0到65535之间 | |
float read() | 返回刚才DAC的0到1的输出值 | |
AnalogOut& operator= (float percent) | 操作符重载,相当于float read() | |
AnalogOut& operator= (AnalogOut& rhs) | 操作符重载,相当于float read() |