当前位置:   article > 正文

【快速上手ESP32(基于ESP-IDF&VSCode)】01-环境配置&GPIO口&延时函数(先点个灯)_esp-idf延时函数

esp-idf延时函数

前言

立创开发板之前出了个ESP32S3R8N8的开发板,当时嫖了个优惠券,九块九拿下了。

现在不仅是35.9一个,而且还没货。

如果真的想要的小伙伴可以自己去打板焊一个,人家开源了(目测难度较大,反正我是焊不上去的)。

立创·ESP32S3R8N8开发板 - 嘉立创EDA开源硬件平台立创·ESP32S3R8N8开发板 - 嘉立创EDA开源硬件平台,开源广场汇集了多种类型的电路设计工程,快速实现资源共享!icon-default.png?t=N7T8https://oshwhub.com/li-chuang-kai-fa-ban/li-chuang-esp32s3r8n8-kai-fa-ban前阵子在忙别的事,然后这块板子一直在吃灰,最近没啥事就拿了起来。跟着人家立创官方的文档学一学。

之前出了Arduino的快速上手ESP8266(其实ESP32也差不多,基本通用,就是提供给ESP32的库函数更丰富一些,比较ESP32比ESP8266强大太多了嘛),前阵子还出了MicroPython的快速上手ESP32,那么今天就来出个基于ESP-IDF的快速上手ESP32。

不过这次就不能是一文速通了,因为这个ESP-IDF有点像STM32的固件库,值得说一说的地方还挺多的。

ESP-IDF

我们先问问文心一言,这个ESP-IDF是个什么东西。

总而言之,ESP-IDF就是帮助我们开发ESP系列芯片的一个框架,我们使用它,即可发挥出ESP32的全部威力(没错,我的意思就是Arduino和MicroPython都不如ESP-IDF,但是Arduino和MicroPython会相对而言简单很多)

我们需要先配置好ESP-IDF的环境。

配置环境

首先先下载安装VSCode,这个下载安装直接一路next即可,记得更换默认安装路径。

接着下载ESP-IDF离线安装包。

https://dl.espressif.cn/dl/esp-idf/icon-default.png?t=N7T8https://dl.espressif.cn/dl/esp-idf/选择第二个下载,或者关注我的公众号“折途想要敲代码”回复关键词“ESP32”即可免费下载关于ESP32的所有我打包好的资料。

下载之后直接执行正常安装即可,在选择组件的界面的时候,取消勾选开发集成(因为我们不需要)。安装的时候记得关闭VSCode。

安装完毕之后打开VSCode,去拓展那边下载好ESP-IDF的插件。

然后进入命令面板。

输入

configure esp-idf extension

等待一会进入到下面的这个界面,选择最下面的选项。

接着安装ESP-IDF,一般是会直接显示出来我们之前安装过的,如果没显示出来,那么手动配置一下路径,接着等待安装完毕即可。

GPIO

关于ESP-IDF中如何使用GPIO,可以查阅文档(有时候可能需要魔法)

GPIO & RTC GPIO - ESP32 - — ESP-IDF 编程指南 v5.2.1 文档icon-default.png?t=N7T8https://docs.espressif.com/projects/esp-idf/zh_CN/stable/esp32/api-reference/peripherals/gpio.html

ESP32中关于GPIO最屌的就是交换矩阵,通过交换矩阵,我们的GPIO可以任意分配到我们想要用的外设上,例如STM32中的UART的引脚是固定的,但是ESP32中UART的引脚却可以通过交换矩阵任意指定,这是非常厉害的地方,我单方面宣布在这个地方ESP32完胜STM32。

上面是官方的技术文档中的特性介绍。

有一个有些矛盾的地方,就是ESP-IDF编程指南和ESP32S3的技术手册中关于GPIO口数量的描述。

技术手册中是说有45个通用GPIO管脚,其中0~21,26~48既可输入也可输出。

而在编程指南中描述又变了,当然也可能是我理解错了。

刚刚把交换矩阵捧上天了,但实际上我们分配GPIO口的时候并不能完全的随心所欲。

 

同上所说,我们有些管脚并不能随意分配。例如34~39引脚只能配置为输入模式,且不具备软件使能上拉或下拉功能。

以及使用WiFi的时候不能使用ADC。

另外需要提一下的是,我用的这款立创开发板出的ESP32S3R8N8把UART0给充公拿去用作烧录程序用了,因此用这款开发板的时候最好就不要使用UART0了。

使用函数

#include "driver/gpio.h"

首先先是包含上面的头文件。

我开头说过,ESP-IDF跟STM32的固件库还是有点像的,使用GPIO口首先我们就需要先配置GPIO口。

同样是传入一个结构体变量的指针,通过传入的结构体的成员参数来配置GPIO。

这个结构体类型的成员参数有以下几个。

我们来看看应该如何填写这些参数。

上表的说明应该已经很详细了,那我就打个样,看看我们点个灯应该如何配置。

  1. #include "driver/gpio.h"
  2. void initGPIO(){
  3. gpio_config_t init;
  4. init.intr_type=GPIO_INTR_DISABLE; //失能中断;
  5. init.mode=GPIO_MODE_OUTPUT; //输出模式
  6. init.pin_bit_mask=(1ULL<<18); //GPIO18
  7. init.pull_down_en=GPIO_PULLDOWN_DISABLE; //失能下拉模式
  8. init.pull_up_en=GPIO_PULLUP_ENABLE; //使能上拉模式
  9. gpio_config(&init);
  10. }

配置完之后我们就可以使其输出高电平或者是低电平了。

以上函数是输出或者是获取输入的函数,都比较简单,编程指南中说的也比较清楚。

那么至此我们就可以点灯了,但是我们想要让它闪烁起来,那么还需要看看延时函数怎么使用。

延时函数

这个我们包含一个头文件。

#include <unistd.h>

然后使用usleep函数,参数写入要延时的微秒即可延时。

知道怎么延时之后,那么我们就直接开始让LED闪烁。

  1. #include "driver/gpio.h"
  2. #include <unistd.h>
  3. void initGPIO(){
  4. gpio_config_t init={
  5. .intr_type=GPIO_INTR_DISABLE, //失能中断;
  6. .mode=GPIO_MODE_OUTPUT, //输出模式
  7. .pin_bit_mask=(1ULL<<18), //GPIO18
  8. .pull_down_en=GPIO_PULLDOWN_DISABLE, //失能下拉模式
  9. .pull_up_en=GPIO_PULLUP_ENABLE, //使能上拉模式
  10. };
  11. gpio_config(&init);
  12. }
  13. void app_main(void){
  14. initGPIO();
  15. while(1){
  16. gpio_set_level(18,0);
  17. usleep(500*1000); //1000us是一个ms,延时500个ms,可以另外封装成毫秒延时函数
  18. gpio_set_level(18,1);
  19. usleep(500*1000);
  20. }
  21. }

那么我们通过上面的代码就成功地让LED闪烁了起来。

参考

Docsicon-default.png?t=N7T8https://lceda001.feishu.cn/wiki/GOIlwwfbIi1SC3k8594cDeFVn8gGPIO & RTC GPIO - ESP32 - — ESP-IDF 编程指南 v5.2.1 文档icon-default.png?t=N7T8https://docs.espressif.com/projects/esp-idf/zh_CN/stable/esp32/api-reference/peripherals/gpio.html《esp32-s3_datasheet_cn.pdf》

《esp32-s3_technical_reference_manual_cn.pdf》

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/640332
推荐阅读
相关标签
  

闽ICP备14008679号