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

北航刘禹导师做网站如何搜索关键词热度

北航刘禹导师做网站,如何搜索关键词热度,河南开元建设有限公司网站,jsp网站开发实例标题栏文章目录 前言一、按键的使用1.1 按键的简介1.2 读取按键的高低电平1.3 读取按键具体代码 二、中断二、EXIT外部中断2.1 EXIT外部中断简介2.2 外部中断基础知识2.3 设置外部中断注册外部中断服务函数设置触发方式添加中断函数 2.4 示例代码 总结 前言 在嵌入式系统开发中&…

文章目录

  • 前言
  • 一、按键的使用
    • 1.1 按键的简介
    • 1.2 读取按键的高低电平
    • 1.3 读取按键具体代码
  • 二、中断
  • 二、EXIT外部中断
    • 2.1 EXIT外部中断简介
    • 2.2 外部中断基础知识
    • 2.3 设置外部中断
      • 注册外部中断服务函数
      • 设置触发方式
      • 添加中断函数
    • 2.4 示例代码
  • 总结


前言

在嵌入式系统开发中,按键输入是与用户进行交互的重要方式之一。在 ESP32 开发中,我们可以利用外部中断(External Interrupt,简称 EXTI)来实现对按键的响应。外部中断使得我们可以在按键被按下时立即响应,而不需要轮询输入状态,这样可以提高系统的响应速度和效率。本文将介绍如何在 ESP32 IDF(Espressif IoT Development Framework)中实现按键输入与外部中断的结合,以实现对按键的快速响应和处理。


一、按键的使用

1.1 按键的简介

几乎每个开发板都会板载有独立按键,因为按键用处很多。常态下,独立按键是断开的,按下的时候才闭合。每个独立按键会单独占用一个 IO 口,通过 IO 口的高低电平判断按键的状态。但是按键在闭合和断开的时候,都存在抖动现象,即按键在闭合时不会马上就稳定的连接,断开时也不会马上断开。这是机械触点,无法避免。独立按键抖动波形图如下:
在这里插入图片描述
图中的按下抖动和释放抖动的时间一般为 5~10ms,如果在抖动阶段采样,其不稳定状态可能出现一次按键动作被认为是多次按下的情况。为了避免抖动可能带来的误操作,我们要做的措施就是给按键消抖(即采样稳定闭合阶段)。消抖方法分为硬件消抖和软件消抖,我们常用软件的方法消抖。
软件消抖:方法很多,我们例程中使用最简单的延时消抖。检测到按键按下后,一般进行10ms 延时,用于跳过抖动的时间段,如果消抖效果不好可以调整这个 10ms 延时,因为不同类型的按键抖动时间可能有偏差。待延时过后再检测按键状态,如果没有按下,那我们就判断这是抖动或者干扰造成的;如果还是按下,那么我们就认为这是按键真的按下了。对按键释放的判断同理。
硬件消抖:利用 RC 电路的电容充放电特性来对抖动产生的电压毛刺进行平滑出来,从而
实现消抖,但是成本会更高一点,本着能省则省的原则,我们推荐使用软件消抖即可。

1.2 读取按键的高低电平

我们可以使用下面这个函数来读取按键的高低电平:

int gpio_get_level(gpio_num_t gpio_num);

参数为按键的对应引脚标号

1.3 读取按键具体代码

在使用按键的使用,需要设置上拉或者下拉电阻,需要根据实际原理图进行选择,并且如果你需要读取按键的状态,你需要设置引脚方向为输入模式:

gpio_reset_pin(22);gpio_config_t key;
key.mode = GPIO_MODE_INPUT;
key.pull_up_en = GPIO_PULLUP_ENABLE;
key.pull_down_en = GPIO_PULLDOWN_DISABLE;
key.pin_bit_mask = (1ull << 22);
key.intr_type = GPIO_INTR_DISABLE;gpio_config(&key);void key_scan()
{// gpio_pad_select_gpio(22);if(gpio_get_level(22) == 0){vTaskDelay(10);if(gpio_get_level(22) == 0)printf("Key pressed\n");}
}

二、中断

二、EXIT外部中断

2.1 EXIT外部中断简介

外部中断(External Interrupt)是指来自于处理器外部的信号或事件,可以中断处理器当前的执行流程,跳转到相应的中断服务程序中执行。在嵌入式系统中,外部中断通常用于处理与外部设备或外部事件相关的响应操作,比如传感器的触发、按键的按下等。

当外部中断信号触发时,处理器会立即停止当前的任务,保存当前的执行环境(比如程序计数器、寄存器状态等),然后跳转到预先定义好的中断服务程序中执行相应的处理逻辑。一旦中断服务程序执行完成,处理器会恢复之前的执行状态,继续执行被中断的任务。

EXIT可能是指中断退出的意思,即当中断服务程序执行完成后,处理器退出中断状态,恢复到之前的执行流程中。

2.2 外部中断基础知识

在数字电路和信号处理中,上升沿和下降沿触发是指在信号的电压或电平变化时发生的事件。这些术语通常与时钟信号和触发器(比如触发器、寄存器等)的工作方式相关联。

上升沿触发:当信号的电压或电平从低电平(低电压)变为高电平(高电压)时,触发器或电路开始执行操作。简单来说,上升沿触发意味着在信号的上升沿(从低到高的过渡时刻)上触发动作。

下降沿触发:与上升沿相反,当信号的电压或电平从高电平(高电压)变为低电平(低电压)时,触发器或电路开始执行操作。换句话说,下降沿触发意味着在信号的下降沿(从高到低的过渡时刻)上触发动作。

这些概念在数字电路中非常重要,特别是在时序电路设计中。例如,在时钟边沿触发的触发器中,上升沿触发和下降沿触发可以决定何时执行数据的采样和传输

2.3 设置外部中断

注册外部中断服务函数

在 ESP32 IDF 中,gpio_install_isr_service 函数用于安装 GPIO 中断服务。通过安装 GPIO 中断服务,你可以注册 GPIO 中断处理程序,以便在 GPIO 引脚状态发生变化时得到通知并执行相应的操作。

以下是 gpio_install_isr_service 函数的使用方法:

#include "driver/gpio.h"void app_main() {// 初始化 GPIO 中断服务gpio_install_isr_service(0); // 参数 0 表示默认的 ESP_INTR_FLAG_DEFAULT// 在这里注册 GPIO 中断处理程序并进行其他操作
}

在使用 gpio_install_isr_service 函数时,你需要注意以下几点:

在调用 gpio_install_isr_service 函数之前,确保已经初始化了 GPIO 相关的硬件和驱动。

gpio_install_isr_service 函数接受一个参数,用于指定中断服务的配置选项。一般情况下,你可以传递 0 或者默认的 ESP_INTR_FLAG_DEFAULT 作为参数。

通常情况下,gpio_install_isr_service 函数只需要在应用程序的启动时调用一次,用于初始化 GPIO 中断服务。在后续的代码中,你可以注册具体的 GPIO 中断处理程序,并通过 gpio_isr_handler_add 函数将其与 GPIO 引脚关联起来。

通过使用 gpio_install_isr_service 函数,你可以在 ESP32 应用程序中方便地管理和处理 GPIO 中断,实现按键、传感器等外部事件的实时响应。

设置触发方式

gpio_config_t结构体中,有一个intr_type成员,他用来设置gpio的中断触发方法的,他是一个枚举,他的定义如下:

typedef enum {GPIO_INTR_DISABLE = 0,     /*!< Disable GPIO interrupt                             */GPIO_INTR_POSEDGE = 1,     /*!< GPIO interrupt type : rising edge                  */GPIO_INTR_NEGEDGE = 2,     /*!< GPIO interrupt type : falling edge                 */GPIO_INTR_ANYEDGE = 3,     /*!< GPIO interrupt type : both rising and falling edge */GPIO_INTR_LOW_LEVEL = 4,   /*!< GPIO interrupt type : input low level trigger      */GPIO_INTR_HIGH_LEVEL = 5,  /*!< GPIO interrupt type : input high level trigger     */GPIO_INTR_MAX,
} gpio_int_type_t;

添加中断函数

我们可以使用下面这个函数来为某一个引脚添加中断回调函数:

esp_err_t gpio_isr_handler_add(gpio_num_t gpio_num, gpio_isr_t isr_handler, void *args);

参数1为对应的引脚标号
参数2为回调函数,他的定义如下:

typedef void (*gpio_isr_t)(void *);

参数3为调用回调函数时,传入的参数是什么,如果没有,填NULL即可

2.4 示例代码

void LED()
{gpio_reset_pin(1);gpio_pad_select_gpio(1);gpio_set_direction(1,GPIO_MODE_OUTPUT);
}void IRAM_ATTR Key_ISR(void *p)
{static bool count = 0;count = !count;gpio_set_level(1,count);
}gpio_reset_pin(22);gpio_config_t key;
key.mode = GPIO_MODE_INPUT;
key.pull_up_en = GPIO_PULLUP_ENABLE;
key.pull_down_en = GPIO_PULLDOWN_DISABLE;
key.pin_bit_mask = (1ull << 22);
key.intr_type = GPIO_INTR_POSEDGE;gpio_config(&key);gpio_install_isr_service(0);LED();gpio_isr_handler_add(22,Key_ISR,NULL);

IRAM_ATTR: 这里的 IRAM_ATTR 属性用于将中断处理函数存储在内部 RAM 中,目的在于减少延迟


总结

通过本文的介绍,我们了解了在 ESP32 IDF 中如何利用外部中断(EXTI)来实现对按键输入的快速响应。首先,我们学习了如何配置 GPIO 并注册中断服务程序。然后,我们通过编写中断服务程序来处理按键的触发事件,并在其中进行相应的处理。通过这种方式,我们可以实现对按键的即时响应,提高系统的交互性和用户体验。在实际应用中,我们可以根据需求对按键的功能进行扩展和定制,从而实现更丰富和灵活的用户交互界面。

http://www.yidumall.com/news/62555.html

相关文章:

  • 网站开发流程有哪些重庆seo小z博客
  • 长春市网站推广站长工具友链查询
  • 网页建立站点百度指数官网登录
  • app制作网站有哪些企业软文营销发布平台
  • 内网做网站外网访问广东广州疫情最新情况
  • wordpress 被黑搜索引擎优化的英文缩写
  • 网络营销网站规划建设实训作业下载百度语音导航地图
  • 西藏建设厅官方网站一体化搜索引擎营销的主要方式有
  • 网站开发实训全网营销是什么
  • 织梦高端html5网站建设工作室网络公司网站模板seo的全称是什么
  • 男人与女人做视频网站bt磁力猪
  • 做电影网站需要注意什么软件网络推广收费价目表
  • 两学一做纪实评价系统登陆网站搜索引擎广告
  • 潍坊网站建设哪家好内江seo
  • phthon网站开发谷歌关键词排名查询
  • 天津网站建设公友情链接的网站图片
  • 网站开发工程师职位要求seoul是什么品牌
  • 婚纱定制网站哪个好网店运营基础知识
  • 环保网站策划书网店代运营诈骗
  • 小清新网站设计百度搜索网站优化
  • html5网页设计教程重庆百度seo公司
  • 申请制作网站国际新闻稿件
  • WordPress添加图片模块网站优化人员通常会将目标关键词放在网站首页中的
  • 马云将来淘汰的十个行业网站建设网络营销策略有哪五种
  • wordpress修改密码后还是登陆不了百度刷排名seo软件
  • 做平面设计素材的哪个网站好比优化更好的词是
  • 郑州网站制作公司上海网络推广培训机构
  • 想做网站制作运营注册什么公司核实西安关键词快速排名
  • 修改wordpress用户名网站seo优化技巧
  • 如何在社交网站上做视频推广方案在seo优化中