精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

[esp32教程]2、按鍵中斷

板凳說 ? 來源:板凳說 ? 作者:板凳說 ? 2023-05-05 09:04 ? 次閱讀

esp32的按鍵中斷

0、前期準備

1、參考上一篇文章搭建好esp32環境

2、準備好一塊esp32開發開發板(本作者使用了esp32c3作為開發平臺)

1、知識儲備

消息隊列:在RTOS中,常用于任務之間或者是中斷與任務之間的數據交換。具有特點是:先入入先出,類似我們平時排隊進園區旅游,排在前面總是首先進入里面。
FreeRTOS中,消息隊列用的函數有以下幾個:
  • 用于創建消息隊列

? xQueueHandle xQueueCreate( unsigned portBASE_TYPE uxQueueLength, unsigned portBASE_TYPE uxItemSize )

? 參數如下:

uxQueueLength:隊列最大長度
uxItemSize:數據體的數據大小,注意:隊列中每個數據體的大小必須要保存一致
  • 用于讀取消息隊列

? portBASE_TYPE xQueueReceive( xQueueHandle xQueue, void *pvBuffer, portTickType xTicksToWait )

? 參數如下:

pxQueue:隊列句柄,其值為xQueueCreate放回值,類型為:xQueueHandle
    pvBuffer:數據指針用于指向出隊的數據地址
    xTicksToWait:任務中斷并等待隊列中可用空間的最大時間。若設置為0且隊列為空時,調用立刻返回。如果要設置具體時間可以用(時間/portTICK_RATE_MS)公式來獲取具體時間。又若設置為( portMAX_DELAY) 將導致任務阻塞
  • 用于寫入消息隊列

? portBASE_TYPE xQueueSendFromISR(xQueueHandle pxQueue,const void *pvItemToQueue,portBASE_TYPE *pxHigherPriorityTaskWoken);

? 參數如下:

pxQueue:隊列句柄,其值為xQueueCreate放回值,類型為:xQueueHandle
    pvItemToQueue:要存入隊列的數據的指針,數據類型要和xQueueCreate初始化的數據類型一樣
    pxHigherPriorityTaskWoken:如果數據入隊使任務解鎖,并且解鎖的任務的優先級高于當前運行任務的優先級xQueueSendFromISR將設置*pxHigherPriorityTaskWokenpdTRUE 。如果xQueueSendFromISR()設置這個值到 pdTRUE,那么在中斷退出的時候將會進行任務切換。
ESP32中斷

? ESP32-C3芯片具有硬件濾波器,可去除輸入GPIO中不需要的毛刺脈沖,這有助于減少中斷的錯誤觸發。

中斷函數介紹

  • 中斷服務注冊函數

? esp_err_t gpio_install_isr_service( int intr_alloc_flags )

? 函數說明

? 使用該函數,ISR服務將提供全局GPIO的ISR,并通過gpio_isr_handler_add()函數注冊各個引腳處理程序

? 參數如下:

intr_alloc_flags:中斷的類型
  • GPIO中斷注冊函數

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

? 函數說明

? 用于為相應的GPIO引腳添加中斷處理函數

? 參數如下:

gpio_num:GPIO引腳號
    isr_handler:中斷處理函數名
    args:往中斷函數傳遞的參數

2、新建工程

idf.py create-project project_led # 新建工程
cd project_key
idf.py set-target esp32c3 # 設置工程使用的芯片

3、查看原理圖確定按鍵控制引腳

key.png

經查閱原理圖,確定led的引腳為gpio_19,讀者需根據自身開發板來修改引腳

4、編寫程序

#include 

#include 
#include 
#include 

#include 

#define KEY_PIN GPIO_NUM_9
static QueueHandle_t key_queue = NULL;

static void IRAM_ATTR key_isr_handler(void *arg)
{
    uint32_t gpio_num = (uint32_t)arg;
    xQueueSendFromISR(key_queue, &gpio_num, NULL);
}

void app_main(void)
{
    uint32_t gpio_num;
    //配置模式 輸入 下降沿觸發中斷
    gpio_config_t cfg = {
        .mode = GPIO_MODE_INPUT,
        .pin_bit_mask = 1ULL << KEY_PIN,
        .pull_up_en = GPIO_PULLUP_DISABLE,
        .pull_down_en = GPIO_PULLUP_DISABLE,
        .intr_type = GPIO_INTR_POSEDGE,
    };

    gpio_config(&cfg);
    //創建消息隊列、注冊中斷函數
    key_queue = xQueueCreate(10, sizeof(uint32_t));
    gpio_install_isr_service(0);
    gpio_isr_handler_add(KEY_PIN, key_isr_handler, (void *)KEY_PIN);

    while (pdTRUE)
    {
        //
        if (xQueueReceive(key_queue, &gpio_num, portMAX_DELAY))
        {
            printf("key is down\\\\\\\\n");
        }
    }
    
}

5、編譯下載

#編譯
idf.py build
#燒錄以及查看日志,使用ctrl+] 可以退出監視窗口
idf.py -p /dev/ttyUSB0 flash monitor

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FreeRTOS
    +關注

    關注

    12

    文章

    483

    瀏覽量

    62018
  • 按鍵中斷
    +關注

    關注

    0

    文章

    15

    瀏覽量

    6438
  • ESP32
    +關注

    關注

    18

    文章

    960

    瀏覽量

    17114
收藏 人收藏

    評論

    相關推薦

    ESP32-C2 ESP8684芯片AT固件使用

    ESP32-C2 ESP8684芯片AT固件使用
    的頭像 發表于 07-27 13:48 ?3583次閱讀
    <b class='flag-5'>ESP32-C2</b> <b class='flag-5'>ESP</b>8684芯片AT固件使用

    ESP32模組的主要特性

    ●?ESP32-WROOM-32D ●?ESP32-WROOM-32U ●?ESP32-SOLO-1 模組 ●?ESP32-WROVER ●?ES
    發表于 11-04 14:54 ?3952次閱讀

    ESP32開發套件 ESP32-DevKitC

    ,具備豐富的外設和優化的引腳布局,助力用戶快速實現產品開發,它有4MB Flash,有I/O,USB以及按鍵、LED ? 支持 Wi-Fi 藍牙連接 ESP32-DevKitC 是一款基于 ESP32
    的頭像 發表于 01-06 16:55 ?8326次閱讀

    ESP32 開發之旅② Arduino For ESP32說明

    文章目錄1. Arduino Core For ESP32是什么?2.Arduino core for ESP32庫3.與ESP8266庫類比3.1 WiFi ——
    發表于 11-13 19:51 ?33次下載
    <b class='flag-5'>ESP32</b> 開發之旅② Arduino For <b class='flag-5'>ESP32</b>說明

    ESP32ESP-IDF 教學(三)——通用硬件定時器(Timer)

    ESP32ESP-IDF 學習筆記(三)【通用硬件定時器(Timer)】文章目錄ESP32ESP-IDF 學習筆記(三)【通用硬件定時器(Timer)】通用硬件定時器(Ti
    發表于 11-26 11:36 ?37次下載
    <b class='flag-5'>ESP32</b> 之 <b class='flag-5'>ESP</b>-IDF 教學(三)——通用硬件定時器(Timer)

    ESP32ESP-IDF 教學(九)—— 串口通信(UART)

    使用簡介二、使用 UART 收發數據1、設置 UART 參數① 單步法(結構體法)② 分步法2、分配引腳,安裝驅動二、使用 UART 事件三、自定義 UART 中斷一、ESP32 的 UART 概覽
    發表于 11-26 13:21 ?43次下載
    <b class='flag-5'>ESP32</b> 之 <b class='flag-5'>ESP</b>-IDF 教學(九)—— 串口通信(UART)

    [ESP32]學習筆記02

    [ESP32學習筆記02]使用ViusalStudio2017開發ESP32按鍵輸入檢測前言一、安裝Visual Studio 2017二、配置開發環境1.安裝ViusalGDB2.
    發表于 12-03 17:36 ?23次下載
    [<b class='flag-5'>ESP32</b>]學習筆記02

    esp32學習之按鍵檢測gpio中斷

    esp32學習之gpio中斷前言流程選定gpiogpio配置設置回調函數注冊中斷處理程序前言最近在做一個按鍵檢測,按鍵檢測有兩種方法,一種是
    發表于 12-04 16:21 ?14次下載
    <b class='flag-5'>esp32</b>學習之<b class='flag-5'>按鍵</b>檢測gpio<b class='flag-5'>中斷</b>

    ESP32系列芯片的規格

    ESP32是一款2.4GHz Wi-Fi和藍牙組合芯片,采用TSMC超低功耗40nm設計技術它旨在實現最佳功率和射頻性能,顯示出魯棒性、多功能性和靈活性在各種應用和電源場景中的可靠性。ESP32系列芯片包括ESP32-D0WDQ
    發表于 04-25 16:21 ?7次下載

    ESP32 S2 SOLO/ESP32 S2 SOLO U技術規格書

    電子發燒友網站提供《ESP32 S2 SOLO/ESP32 S2 SOLO U技術規格書.pdf》資料免費下載
    發表于 09-23 14:57 ?0次下載
    <b class='flag-5'>ESP32</b> S<b class='flag-5'>2</b> SOLO/<b class='flag-5'>ESP32</b> S<b class='flag-5'>2</b> SOLO U技術規格書

    ESP32 S2 WROVER/ESP32 S2 WROVER I技術規格書

    電子發燒友網站提供《ESP32 S2 WROVER/ESP32 S2 WROVER I技術規格書.pdf》資料免費下載
    發表于 09-23 11:48 ?2次下載
    <b class='flag-5'>ESP32</b> S<b class='flag-5'>2</b> WROVER/<b class='flag-5'>ESP32</b> S<b class='flag-5'>2</b> WROVER I技術規格書

    ESP32 S2 WROOM/ESP32 S2 WROOM I技術規格書

    電子發燒友網站提供《ESP32 S2 WROOM/ESP32 S2 WROOM I技術規格書.pdf》資料免費下載
    發表于 09-23 11:31 ?4次下載
    <b class='flag-5'>ESP32</b> S<b class='flag-5'>2</b> WROOM/<b class='flag-5'>ESP32</b> S<b class='flag-5'>2</b> WROOM I技術規格書

    ESP32C2如何使用AT固件

    ESP32C2如何使用AT固件
    的頭像 發表于 12-12 13:58 ?3026次閱讀
    <b class='flag-5'>ESP32C2</b>如何使用AT固件

    ESP32-C2 8684 AT固件

    ESP32-C2模組 ESP8684芯片 智能家居設備開發模組
    的頭像 發表于 07-03 13:41 ?819次閱讀
    <b class='flag-5'>ESP32-C2</b>  8684  AT固件

    如何使用MicroPython和ESP32來編寫按鍵程序?

    首先,我們需要將LED燈、電阻和開關、ESP32連接起來。
    的頭像 發表于 11-08 12:35 ?1754次閱讀
    如何使用MicroPython和<b class='flag-5'>ESP32</b>來編寫<b class='flag-5'>按鍵</b>程序?