【SoC】ESP8266之SDK开发教程
本帖最后由 iDea 于 2017-7-4 10:25 编辑最近想做一个控制灯开关和感应开门的东西给自己用。由于功能比较简单,如果再用MCU+ESP8266的方法,第一、成本太高,因为STM32的芯片你要么要打板才能把LQFP-48的芯片放下,要么花20块钱买一个最小系统板。第二、体积过大,你放一个STM32的最小系统板在狭小的插座里也不现实。ESP8266本身可以编程,而且现在也提供了SoC版的自动生成代码,这样就变得非常简单了。下面开始说一下ESP8266的SDK是怎么用的,因为官方也没有提供这方面的资料,用的是乐鑫原本的API,而文档本身又有好多地方没有说清楚。怪不得这么多人用NodeMCU。
首先,我们要把编译环境给搭建起来,详细的过程,机智云在文档中心里面写得很清楚:点击查看,我这里就不做过多的讲解。输入下面命令:
./xtensa-lx106-elf-gcc -v
如果没有报错,像我这样就是安装gcc成功了:
下面你还要修改./bashrc这个文件,把这个路径添加到环境变量,这里就不做讲解,可自行百度。
接下来说一些重要的事情,就是怎么操作GPIO的问题,你们可以在ESP8266的板子上看到GPIOx的丝印,但是那可能不是他真正的引脚名称。下面我在官方找到了一个引脚对应图,下面写程序会用到。附件放在后面:
我们查看官方的例程也可以知道,GPIO的初始化都是使用PIN_FUNC_SELECT();函数来进行初始化的,从命令风格来看,我们可以确定他是一个宏定义的函数,因为宏我们一般都会用全大写来表示。我们跳转到他的定义:
#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)我们发现他在eagle_soc.h里面,这是官方SD提供的文件,所以我们去找一下官方的数据手册,看下他怎么说,因为你现在不知道芯片的硬件手册,所以他最后在操作寄存器的地址对你来说也没有任何意义,他根本无法知道是什么意思。
官方也里是简单的说了一下怎么使用,至于这两个参数怎么样确定,文档好像没有说到。后来我看了例程和做实验发现,上面的表是有用的。我们可以发现eagle_soc.h中有一些宏定义是例程初始化的时候用到的。
我举几个例子:
如果你想开GPIO12,那你要这样初始化:
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12);如果你想要用GPIO15,那你要这样初始化:
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, FUNC_GPIO15);那这两个参数怎么确定,有没有规律?有!就是那张表:左边是你的Inst Name,右边是你的Function,你想用哪个功能,就填哪个。官方在宏定义的时候,也把一个引脚下功能都放在了一起。
初始化完成以后,就是要怎么样输出高低电平啦,我们再来看一下官方的文档:
GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 1);下面我们来说一下怎么读取IO电平,一开始,我以为上面那个GPIO_DIS_OUTPUT();就是初始化的API,然后我试了一下,不行!后面我一直在找哪里写了GPIO输入模式的API,都没发现。我在想一个32位的MCU,每种模式应该都有独立的开关,像STM32一样。但是我高看他了,在我实在没有办法的情况下,我试了一下上面初始化的代码,然后用读取GPIO的API试了一下,居然能够成功的读取到!这货居然跟51差不多。
读取代码:
currentDataPoint.valueswitchoff = GPIO_INPUT_GET(12);这就是基本的基于ESP8266的SoC的操作,后面有空再更,我现在还没搞清楚到底哪些引脚可以做GPIO,哪些不可以,功能复用又是怎么回事。NodeMCU果然比乐鑫的SDK好多了。
谢谢,现在也是想用PGIO来驱动LED灯 那楼主的意思就是8266自带的mcu很次,是这意思吗? sugar 发表于 2017-12-16 09:46
那楼主的意思就是8266自带的mcu很次,是这意思吗?
不是,只是觉得文档没写清楚,只给一个API,也不说要怎么用 iDea 发表于 2017-12-17 00:21
不是,只是觉得文档没写清楚,只给一个API,也不说要怎么用
OK,那我在用这个自带的试试 我也还在摸索 好东西,必须收藏
页:
[1]