完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 3guoyangyang7 于 2016-11-3 18:42 编辑
一、前提 哎,入了ESP32的坑,可能是刚出的芯片都是这个样子吧,资料少到令人发指,下载方式也是独特到让我不知道说什么方式好,人家可能就是这个风格吧,哈哈。说实话,这个螃蟹吃的真是咯牙,反正总体来说进坑出坑。整个周末都搭上去了,对于整个开发流程,以及开发思路也有了一些想法,小狂就在这里一点点分享给大家,希望对大家有些许帮助吧。到目前为止搞定了GPIO和STA以及TCP 客户端,能发送数据到上位机。都是基于FreeOS来的,裸机的并没有尝试,现在没有出裸机SDK,到时候看有时间就搞一搞。 在正式开始之前,我要提醒一下,小白的,在目前这个阶段还是离ESP32远一点,水太深,一会就知道为啥啦,要求比较高,所以,刚开始接触乐鑫的片,我还是建议先使用esp8266去熟悉一下,等熟悉差不多了,ESP32也能稍微成熟一点,到时候再回来用也不着急是不是这个道理,哈哈。 先说两个坑,刚入手的时候,有点懵逼,肯定是去官网各种下载资料啊,说实话,我用5分钟基本上就把资料能找到的都找到了,也由此看来,资料确实不多。玩过esp8266的都知道,开发esp8266是有SDK的,所以我们就编译了idf,这个在上一节也提到了,如何编译,忘了的小伙伴可以回去看看。但是既然是SDK类型的你是不是要告诉我如何使用啊,至少要有个API手册吧,如果你想要,不好意思,想的太多了。乐鑫的工作人员会温馨的告诉你没有,你可以看头文件,哈哈,哈哈。 那既然idf没有API,有些小伙伴可能要说了,那不是还有一个ESP32_RTOS_SDK_V2.0.0_16_02_28,的SDK吗,不提这个还好,哎,说多了都是泪啊,上边打着ESP32的名头,干的却不是ESP32的活,哎,小狂把工程建完,应用编译好所有的bin文件都生成了,然而下载到板子里不好使,提示 rst:0x10 (RTCWDT_RTC_RESET),boot:0x13(SPI_FAST_FLASH_BOOT) flash read err, 1000 Falling back to built-in commandinterpreter. 哎,后来实在没有招了,去官网上问了一下,结果就没有然后了 既然不支持,干嘛要打着ESP32的名头放啊,不理解,可能还在完善当中吧,哎。 二、GPIO分析 看了半天的esp32的手册,说实话,写的都是干货,废话比较少,里边IO的配置总结为三种,①使用交换矩阵的概念,控制GPIO的输入输出,通过把输入信号或者输出信号配置到信号的索引号中,然后再映射到IO_MUX当中来实现IO的输入输出控制。②IO直接映射不同的功能,就是我们常说的IO复用。③RTC的低功耗和模拟IO功能,这个是神马呢,,一个是RTC一个是ADC,还有一个DAC,这个比较奇怪,第一次见把ADC和DAC放在IO讲的。算了不纠结了。这一节我们就直接测试IO的输入输出功能。其他就不讲了 1、输出 ①配置输出信号在交换矩阵的索引号,主要设置GPIO_FUNCx_OUT_SEL_CFG和GPIO_ENABLE_DATA[x]寄存器 ②可以使用GPIO_PINn_REG中的GPIO_PINn_PAD_DRIVER字段来配置IO为开漏输出方式 ③配置IO_MUX_x_RE寄存器来配置GPIO的具体功能,如下图所示 2、输入 配置输入就是把外部信号通过IO/MUX指定输入IO,然后通过交换矩阵来指定输入信号的索引号,具体配置过程如下 1、通过GPIO_FUNCm_IN_SEL_CFG_REG中的GPIO_FUNCm_IN_SEL把输入引脚绑定到指定的信号索引上。 2、如果为单纯的输入,可以关闭输出,使用GPIO_FUNCn_OUT_SEL_CFG_REG和GPIO_ENABLE_DATA[x]来执行。 3、配置IO_MUX_x_RE寄存器来配置GPIO的具体功能。主要配置IO_x_MCU_SEL为GPIO,IO_x_FUNC_IE使能输入,IO_x_FUNC_WPD和IO_x_FUNC_WPU配置上下拉。 三、代码分析 这里说明一下,小狂在这里没有自己配置寄存器,直接拿着历程上了,有些函数拿不到源代码,就直接猜了,但是小狂自信猜的应该没有错,要自己写也行,就是太麻烦,定义寄存器的地址都要浪费不少时间。有需要的朋友,小狂可以单开一贴,讲寄存器怎么配置,这节就这样,把思路捋顺好办事。 1、输出 gpio_pad_select_gpio(BLINK_GPIO); 这一句话主要是把输出信号绑定到指定的索引上,就是输出的第一步,把输入引脚和相应的索引号绑定。 gpio_set_direction(BLINK_GPIO,GPIO_MODE_OUTPUT);在这个里边应该对寄存器进行了赋值和定义,并且把gpio_dev_t GPIO;这个结构体也给映射到相应的地址中去了,不要问我怎么知道的,我是猜的。 这一句话的主要作用就是设置GPIO的模式,从上边的叙述中我们也知道,输入和输出需要设置不同的寄存器。这个能看到具体函数,我们截图说明一下 ①:判断是否为输入,如果为输入就设置IO_MUX_x_REG的第9位IO_x_FUNC_IE为输入,否则就把这意味清零 ②如果为输出,就配置输出使能寄存器 如果是32-39就使用这个寄存器 ③如果是开漏的话就设置下面的寄存器 让电平翻转 中间的延时调用的是操作系统的任务休眠时间。 ①②③④主要设置的就是输出寄存器,以及输出清空寄存器,不详细说了,有兴趣的查手册去。 在这要讲一个结构体,就是寄存器配置的结构体 贴一半,不贴了,太长了,这个主要是所有连续寄存器的定义,当然有些格路的寄存器就没有定义,直接就用其他方式使用了,比如上边介绍的输入输出配置。这个我找了半天没有具体的映射到地址上么有我们就猜猜猜,应该就是在gpio_pad_select_gpio(BLINK_GPIO);这个函数中做了地址映射,可是这个东西又看不到原函数。没有事实证据啊。Gpio的定义都不知道在哪。这个你可以对照着寄存器列表来看,基本上是按照地址顺序来的。 这里说个bug,看看大家能不能看出来 手册中定义的寄存器 IO_MUX_GPIO2_REG Configuration register forpad GPIO2 0x3FF53040 来我们看一下idf中的地址 #define PERIPHS_IO_MUX_GPIO2_U(DR_REG_IO_MUX_BASE +0x40) #define DR_REG_IO_MUX_BASE 0x3ff49000 PERIPHS_IO_MUX_GPIO2_U =0x3ff49040 我们再来看一下寄存器描述的地址 IO_MUX_x_REG (x: GPIO0-GPIO39) (0x10+4*x),有了偏移量,你要告诉我基地址吧,从前边的寄存器我默认基地址为0x3ff44000,按照这种算法 IO_MUX_GPIO2_REG =0x3ff44024,也许不是4*2,应该是4*GPIO2,好吧,好吧。这。。。。。三种答案让我如何是好,已经在风中不知所措。哎。。。。。。 程序分析完,我们来看一下运行结果 2、输入 代码如上所示,具体的分析就不分析了,其实跟输出是一样的,实现的功能是,当io5为低电平的时候后,打印”Xiaokuang produce” 实现后的效果如下图所示 三、总结 小狂的这篇帖子写了三天,写写停停,思路也是断断续续,新的东西,参考资料少,只能靠自己摸索,GPIO是一个单片机最基础的东西,所以寄存器讲的多了点,下边如果再说到APP核的事情,就不会那么详细的分析了,真心累啊。下一篇,Wif STA连接。 ESP32其他篇请移步 评分
|
||
相关推荐
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
大神,能否把GPIO和STA以及TCP 客户端这些源码发一份给我哈,正在用ESP32做开发,毫无头绪,一个做应用的入底层好头疼,不知所云。。。 1009660908@qq.com 这是我邮箱, 楼主, 好人一生平安哈
|
|
|
|
|
|
***kx 发表于 2016-10-31 19:24 加我qq*** 发邮箱太费劲了 |
|
|
|
|
|
优势暂时没有看出来,一般应用都足够,速度肯定够快,现在还没着手测试,SPI肯定能与单片机通信,QSPI一遍用作外部flash的,建议 不要用 |
|
|
|
|
|
3guoyangyang7 发表于 2016-11-3 10:35 谢谢楼主指导,也是奔着它的速度快想使用,只是也没有看到官方测试数据说明。使用串口与单片机通信,速度会比较慢,所以想采用SPI或者SDIO通信。 |
|
|
|
|
|
SPI和SDIO速度肯定可以 |
|
|
|
|
|
...........................
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
学习了,请教下有esp的uart的例程吗?
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
物联网工程师必备:怎么选择不同的无线连接技术,本指南帮你忙!
3285 浏览 1 评论
【DFRobot TinkerNode NB-IoT 物联网开发板试用连载】WIFI功能测试
3938 浏览 0 评论
【DFRobot TinkerNode NB-IoT 物联网开发板试用连载】Arduino的替代SublimeText3+STino
3444 浏览 0 评论
使用端口扩展器轻松高效地向IIoT端点添加具有成本效益的子节点
4008 浏览 1 评论
20685 浏览 11 评论
模组有时候复位重启后输出日志为“REBOOT_CAUSE_SECURITY_PMU_POWER_ON_RESET”的原因?
805浏览 2评论
1026浏览 2评论
1029浏览 1评论
1147浏览 1评论
382浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 12:23 , Processed in 1.323576 second(s), Total 115, Slave 96 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号