SDK版本:ESP8266_RTOS_SDK-2.0.0
开发平台:AiThinker_IDE(安信可基于eclipse订制版)
前言不必多说了,
先讲讲输出:
现在要用一个IO口控制一个LED灯,具体操作如下:
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12); //选择IO12作为普通IO
GPIO_AS_OUTPUT(GPIO_Pin_12); //设置IO12为输出模式
GPIO_OUTPUT(GPIO_Pin_12, 0); //GPIO12置低
这个是最基本的IO口控制,由于大部分IO口都有复用功能,所以要先调用PIN_FUNC_SELECT(...);选择IO的具体功能,比如GPIO12:
#define PERIPHS_IO_MUX_MTDI_U (PERIPHS_IO_MUX + 0x04)
#define FUNC_MTDI 0
#define FUNC_I2SI_DATA 1
#define FUNC_HSPIQ_MISO 2
#define FUNC_GPIO12 3
#define FUNC_UART0_DTR 4
默认是作为MTDI功能的,如果不调用这个宏定义,是控制不了IO口的。
GPIO_AS_OUTPUT(gpio_bits) 是用来使能输出的。
再讲讲输入:
先举个栗子:把GPIO5设置为按键检测
先配置好IO口
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U, FUNC_GPIO5);
GPIO_AS_INPUT(GPIO_Pin_5);
再去扫描IO口,注意GPIO_INPUT_GET(gpio_no)里的gpio_no只能用对应的阿拉伯数字
if(GPIO_INPUT_GET(5)){
sta = 0;
// GPIO_OUTPUT(GPIO_Pin_12, 0);
pwm_set_duty(500,0);
pwm_start();
printf("------%d\n", sta);
}else{
sta = 1;
// GPIO_OUTPUT(GPIO_Pin_12, 1);
pwm_set_duty(10,0);
pwm_start();
printf("++++++%d\n", sta);
}
有一个疑问,不知道为什么调用void gpio_config(GPIO_ConfigTypeDef *pGPIOConfig);的时候系统会死机重启,有待解决。
使用过程需要用到app->driver->gpio.c里的函数,如果是在其他demo工程上开发的,需要修改app文件下的Makefile文件,修改如下:
每个app下的文件夹里都会有个Makefile文件,用来指示该文件
ifndef PDIR
GEN_LIBS = libdriver.a
endif
当需要调用gpio.c时,需要在app文件夹下的Makefile里面添加该信息。
第一个地方:
ifndef PDIR # {
GEN_IMAGES= eagle.app.v6.out
GEN_BINS= eagle.app.v6.bin
SPECIAL_MKTARGETS=$(APP_MKTARGETS)
SUBDIRS= \
user \
driver
... //把需要调用的文件夹的名称添加在这里
endif # } PDIR
第二个地方
COMPONENTS_eagle.app.v6 = \
user/libuser.a \
driver/libdriver.a //把需要调用的文件夹里的Makefile添加在这里
修改好这2个地方后就可以使用了。
GPIO口的简单应用就到此结束,下一章来讲讲PWM功能