一、硬件部分

如下图,这是我ESP-12F的电路原理图关于LED灯的部分:

esp8266开发板引脚图及其功能 esp8266 开发板_宏定义


对应ESP-12F的管脚:

esp8266开发板引脚图及其功能 esp8266 开发板_esp8266开发板引脚图及其功能_02

二、SDK版本

SDK版本(之前移植的NONOS_SDK-2.2.0版本)

三、软件编程与下载

一上来就要操作,不会怎么办,安信可官方已经提供了完善的文档,写得非常详细,这点完全不担心。

https://wiki.ai-thinker.com/esp8266/docs 我们在上门这个网站找到这个文档,下载中文版本的。

esp8266开发板引脚图及其功能 esp8266 开发板_esp8266开发板引脚图及其功能_03


打开这个手册的外设驱动接口的GPIO接口部分:

esp8266开发板引脚图及其功能 esp8266 开发板_esp8266开发板引脚图及其功能_04


通过文档说明,我们了解到要利用ESP-12F驱动一个LED灯,需要完成如下步骤:

1、管脚功能选择

2、将管脚设置为输出模式

3、输出对应的电平

关于第一个,eagle_soc.h文件的这个宏可以用来实现管脚功能的选择

#define PIN_FUNC_SELECT(PIN_NAME, FUNC)  do { \
    WRITE_PERI_REG(PIN_NAME,   \
                                (READ_PERI_REG(PIN_NAME) \
                                     &  (~(PERIPHS_IO_MUX_FUNC<<PERIPHS_IO_MUX_FUNC_S)))  \
                                     |( (((FUNC&BIT2)<<2)|(FUNC&0x3))<<PERIPHS_IO_MUX_FUNC_S) );  \
    } while (0)

其中参数一PIN_NAME表示管脚名称、参数二FUNC表示管脚功能。

esp8266开发板引脚图及其功能 esp8266 开发板_输出模式_05


参考esp8266_pin_list.xls文档描述,PIN_NAME中关于GPIO4的管脚名称和管脚功能为如下

#define PERIPHS_IO_MUX_GPIO4_U          (PERIPHS_IO_MUX + 0x3C)
#define FUNC_GPIO4                      0

根据ESP8266 SDK编程手册关于GPIO管脚状态的设置:

esp8266开发板引脚图及其功能 esp8266 开发板_esp8266开发板引脚图及其功能_06


根据示例提供,下面这句话的意思是将GPIO4设置为IO口。

PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U, FUNC_GPIO4);

接下来要点灯了,我们看到GPIO输入输出相关的宏定义:

esp8266开发板引脚图及其功能 esp8266 开发板_#define_07

根据前面的原理图,我们只需要把GPIO4管脚拉低就可以点亮该管脚的LED灯啦,就是输出一个低电平,所以我们选用的是GPIO_OUTPUT_SET这个宏定义,这个宏的意识是将相应的管脚设置为输出模式并输出对应的电平。

注意区别上图几个参数:

1、PIN_NAME:指的是管脚名称

2、FUNC:指的是管脚功能 功能序号-1

3、gpio_no:指的是 IO端口序号 GPIO_ID_PIN(IO端口序号)

例如GPIO14,那么就是GPIO_ID_PIN(14)

所以设置IO为低电平也很简单,这里是GPIO4。

GPIO_OUTPUT_SET(GPIO_ID_PIN(4),0);

接下来修改user_main,实现闪灯:

void ICACHE_FLASH_ATTR
delay_ms(int ms)
{
	os_delay_us(ms*1000);
}

/******************************************************************************
 * FunctionName : user_init
 * Description  : entry of user application, init user function here
 * Parameters   : none
 * Returns      : none
*******************************************************************************/
void ICACHE_FLASH_ATTR
user_init(void)
{
	u8 led_status = 1;
    os_printf("SDK version:%s\n", system_get_sdk_version());
    os_printf("Hello Yangyuanxin\n");
    os_printf("Build this SDK from 20190922\n");
    //1、选中GPIO4管脚
    PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U, FUNC_GPIO4);
    //2、设置GPIO4管脚输出高电平,先熄灭
    GPIO_OUTPUT_SET(GPIO_ID_PIN(4),1);

    while(1)
    {
    	//开始进来要喂狗,防止ESP8266复位
    	system_soft_wdt_feed();
    	//设置GPIO输出
    	GPIO_OUTPUT_SET(GPIO_ID_PIN(4),led_status);
    	//状态取反
    	led_status = ! led_status ;
    	//延时200ms
    	delay_ms(200);
    }

}

编译完成后将生成的文件下载到ESP-12F开发板中。

esp8266开发板引脚图及其功能 esp8266 开发板_宏定义_08


可以看到,开发板上的LED灯每200ms会翻转一次:

esp8266开发板引脚图及其功能 esp8266 开发板_输出模式_09


串口输出,默认波特率为74800。

esp8266开发板引脚图及其功能 esp8266 开发板_宏定义_10


工程源码下载:

链接:https://pan.baidu.com/s/1TbrLJ7R_3g0CBshsU6Aa_A

提取码:jfj7