ESP8266的SDK应用开发之GPIO的控制

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功能

猜你喜欢

转载自blog.csdn.net/LinQiPing233/article/details/82349831