当前位置: 首页 > news >正文

网站 标题 关键词 描述/网络营销专家

网站 标题 关键词 描述,网络营销专家,网站的注册上一步下一步怎么做,如何建网站前言 最近开发用到了ESP32,乐鑫已经对接口进行比较深度的封装,但是还是看了下外设的参考手册,摘取了一部分结合自己的理解给记录下来。 如有异议,欢迎指正 概述 ESP32芯片具有34个物理GPIO。每个pad都可用作一个通用IO,或连接内…

前言

最近开发用到了ESP32,乐鑫已经对接口进行比较深度的封装,但是还是看了下外设的参考手册,摘取了一部分结合自己的理解给记录下来。
如有异议,欢迎指正

概述

ESP32芯片具有34个物理GPIO。每个pad都可用作一个通用IO,或连接内部的外设信号。IO_MUX、RTC_IO_MUX和GPIO交换矩阵用于将信号从外设传输至GPIO pad,这些模块共同组成了芯片的IO控制。
备注:这34个物理GPIO pad的序列号为:0-19, 21-23, 25-27, 32-39。其中GPIO6-GPIO11已经作为模组上SPIFlash使用【无法复用】,GPIO34-39仅作为输入管脚,其他的可作为输入输出管脚

GPIO交换矩阵结构图

  • 数字IO口通过IO_MUX复用器来选择通用IO口还是复用外设功能,然后进过GPIO matrix交换矩阵来关联到具体的外设中
    图中也可以配置不进过交换矩阵,这样可以提高引脚的高频特性【如高速率 UART SPI SDIO】

在这里插入图片描述
在这里插入图片描述

GPIO配置的流程

  • 配置外设信号寄存器GPIO_FUNC_IN_SEL_CFG,选择需要配置的PIN脚
  • 设置GPIO_ENABLE_DATA使能寄存器
  • 配置IO_MUX寄存器,配置IO功能(上下拉、输入输出)

备注

  • 同一个引脚可以同时绑定多个内部信号
  • 可以通过寄存器GPIO_FUNC_IN_INV_SEL对信号进行取反,在一些应用中很实用
  • 当某个外设不绑定GPIO时,例如SPI中的MOSI不使用,可以配置GPIO_FUNC_IN_SEL为0x38或0x30,保证外设的正常运行

Strapping Pins
设计中需要避免外设管脚直接影响ESP Strapping引脚电平状态,strapping引脚会直接影响上电逻辑
在这里插入图片描述

RTC IO_MUX低功耗IO功能

当管脚被配置成RTC GPIO时,能在系统处于Deep-Sleep睡眠模式下保持电平值,也可以实现在低功耗模式下的唤醒
PS:测试发现,ESP32在低功耗上面表现并不是很优异

Light-Sleep模式管脚功能

当 ESP32 处于 Light-sleep 模式时管脚可以有不同的功能。如果某一 GPIO pad 的 IO_MUX 寄存器中 SLP_SEL位置为 1,芯片处于 Light-sleep 模式下将由另一组不同的寄存器控制 pad。

  • 如果 SLP_SEL 置为 0,则芯片在正常工作和 Light-sleep 模式下,管脚的功能一样。
    在这里插入图片描述

Pad Hold特性

每个 IO pad(包括 RTC pad)都有单独的 hold 功能,由 RTC 寄存器控制。pad 的 hold 功能被置上后,pad 在
置上 hold 那一刻的状态被强制保持,无论内部信号如何变化,修改 IO_MUX 配置或者 GPIO 配置,都不会改变
pad 的状态。应用如果希望在看门狗超时触发内核复位和系统复位时或者 Deep-sleep 时 pad 的状态不被改变,
就需要提前把 hold 置上。

IO_MUX Pad列表

  • 设计硬件前,可以查看IO的复用功能来进行合理的配置
    在这里插入图片描述

RTC_MUX管脚清单

在这里插入图片描述

代码例程

打开idf目录下的gpio_example_main,路径esp-idf\examples\peripherals\gpio\main

代码讲解

开发可移植例程代码,具体可看注释

  • GPIO18 GPIO19配置为输出,通过接口gpio_set_level配置输出电平
  • GPIO4 GPIO5配置成输入中断使能,外部中断入口gpio_isr_handler
#define GPIO_OUTPUT_IO_0    18
#define GPIO_OUTPUT_IO_1    19
#define GPIO_OUTPUT_PIN_SEL  ((1ULL<<GPIO_OUTPUT_IO_0) | (1ULL<<GPIO_OUTPUT_IO_1))
#define GPIO_INPUT_IO_0     4
#define GPIO_INPUT_IO_1     5
#define GPIO_INPUT_PIN_SEL  ((1ULL<<GPIO_INPUT_IO_0) | (1ULL<<GPIO_INPUT_IO_1))
#define ESP_INTR_FLAG_DEFAULT 0static xQueueHandle gpio_evt_queue = NULL;static void IRAM_ATTR gpio_isr_handler(void* arg)
{uint32_t gpio_num = (uint32_t) arg;xQueueSendFromISR(gpio_evt_queue, &gpio_num, NULL);//中断后发送io消息
}static void gpio_task_example(void* arg)
{uint32_t io_num;for(;;) {if(xQueueReceive(gpio_evt_queue, &io_num, portMAX_DELAY)) //收到消息打印对应引脚的电平{printf("GPIO[%d] intr, val: %d\n", io_num, gpio_get_level(io_num));}}
}void app_main(void)
{gpio_config_t io_conf;//disable interruptio_conf.intr_type = GPIO_PIN_INTR_DISABLE;//set as output modeio_conf.mode = GPIO_MODE_OUTPUT;//输出模式//bit mask of the pins that you want to set,e.g.GPIO18/19io_conf.pin_bit_mask = GPIO_OUTPUT_PIN_SEL;//配置输出//disable pull-down modeio_conf.pull_down_en = 0;//禁用下拉//disable pull-up modeio_conf.pull_up_en = 0;//禁用上拉//configure GPIO with the given settingsgpio_config(&io_conf);//进行配置//interrupt of rising edgeio_conf.intr_type = GPIO_PIN_INTR_POSEDGE;//上升沿中断//bit mask of the pins, use GPIO4/5 hereio_conf.pin_bit_mask = GPIO_INPUT_PIN_SEL;//配置输入//set as input mode    io_conf.mode = GPIO_MODE_INPUT;//输入模式//enable pull-up modeio_conf.pull_up_en = 1;//使能上拉gpio_config(&io_conf);//change gpio intrrupt type for one pingpio_set_intr_type(GPIO_INPUT_IO_0, GPIO_INTR_ANYEDGE);//create a queue to handle gpio event from isrgpio_evt_queue = xQueueCreate(10, sizeof(uint32_t));//创建队列//start gpio taskxTaskCreate(gpio_task_example, "gpio_task_example", 2048, NULL, 10, NULL);//创建任务//install gpio isr servicegpio_install_isr_service(ESP_INTR_FLAG_DEFAULT);//安装中断服务//hook isr handler for specific gpio pingpio_isr_handler_add(GPIO_INPUT_IO_0, gpio_isr_handler, (void*) GPIO_INPUT_IO_0);//GPIO4中断回调注册//hook isr handler for specific gpio pingpio_isr_handler_add(GPIO_INPUT_IO_1, gpio_isr_handler, (void*) GPIO_INPUT_IO_1);//GPIO5中断回调注册//remove isr handler for gpio number.gpio_isr_handler_remove(GPIO_INPUT_IO_0);//移除测试//hook isr handler for specific gpio pin againgpio_isr_handler_add(GPIO_INPUT_IO_0, gpio_isr_handler, (void*) GPIO_INPUT_IO_0);//重新添加测试int cnt = 0;//1秒闪烁while(1) {printf("cnt: %d\n", cnt++);vTaskDelay(1000 / portTICK_RATE_MS);gpio_set_level(GPIO_OUTPUT_IO_0, cnt % 2);gpio_set_level(GPIO_OUTPUT_IO_1, cnt % 2);}
}

API文档

http://www.jmfq.cn/news/5066587.html

相关文章:

  • 搜狐快站做淘宝客网站/问答推广
  • 成都网站设计 冠辰/苏州网站关键词优化推广
  • 深圳做网站-信科网络/优化水平
  • 广东省做网站推广公司/企业网站建设需要多少钱
  • 做网站需要用什么软件/软考培训机构哪家好一点
  • 网站运营及推广/南京百度快速排名优化
  • 网站如何做背景音乐/自己建网站详细流程
  • 编程自己做网站/东莞网站关键词优化公司
  • 网站建设行业广告语/seo搜索优化 指数
  • ps做图 游戏下载网站有哪些内容/中国工商业联合会
  • 建站展示/app推广之家
  • 专业做中文网站/百度seo培训班
  • 夜间正能量网站/关键词你们懂的
  • 做网站时为什么导航时两行字/最新推广注册app拿佣金
  • 直销系统网站开发/晋城seo
  • 提供家居企业网站建设/青岛seo结算
  • 内部门户网站建设方案/sem是什么意思
  • it外包公司好不好/站长之家的seo综合查询工具
  • 大良企业网站建设/网络营销的基本方法有哪些
  • 做电影ppt模板下载网站/搜狐综合小时报2022113011
  • 国企怎么做网站/seo关键词排名优化联系方式
  • 网站维护员招聘/空间刷赞网站推广
  • 黄山网站建设有哪些/知乎推广公司
  • 专业柳州网站建设公司/百度免费推广平台
  • 专门做音乐的网站/精准网站seo诊断报告
  • 重庆网站建设外包公司哪家好/外贸网站建设流程
  • wordpress 付款插件/网站seo优化免费
  • 权重的网站/免费建站哪个网站最好
  • 上海市建设和城乡建设委员会网站/seopeix
  • 做外贸的网站如何选择服务器/合肥seo按天收费