当前位置:首页 > 技术 > Python > 正文内容

esp32外部中断学习笔记

Watrt6年前 (2019-08-29)Python29570

思路:我使用的esp32开发板为简易的开发板,因为板上没有用户自己定义的键盘所以在使用中想要输入或者控制无法完成。研究发现在开发板上有的下载按钮是不是可以在进入系统后复用为一个按键呢。

实现:参考官方的例程对代码如下

首先宏定义参数:

#define KYE_0   0    //GPIO0检测
#define KEYS_SET   (1ULL<<0)    //GPIO位掩码
#define ESP_INTR_FLAG_DEFAULT   1    //中断标志
static xQueueHandle gpio_evt_queue =NULL;    //消息队列

中断服务函数

static void IRAM_ATTR gpio_isr_handler(void* arg)    //IRAM_ATTR 必须
{
uint32_t gpio_num = (uint32_t) arg;                    //获取传过来的IO号
xQueueSendFromISR(gpio_evt_queue, &gpio_num, NULL);       //发送消息
}

IO配置

gpio_config_t  key_conf;
key_conf.mode=GPIO_MODE_INPUT;               //输入模式
key_conf.intr_type=GPIO_INTR_POSEDGE;       //上向沿
key_conf.pin_bit_mask=KEYS_SET;            //前面宏定义的掩码位
key_conf.pull_down_en=0;                    //不下拉
key_conf.pull_up_en=0;                    //不上拉  同上(硬件已经下拉了)
gpio_config(&key_conf);
gpio_set_intr_type(KYE_0,GPIO_INTR_ANYEDGE);        //中断触发为下升和下降 注意:前面已经定义了。这里只是表明可能通过函数来修改
gpio_evt_queue = xQueueCreate(10, sizeof(uint32_t));    //创建消息

gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT);        //安装中断服务驱动
gpio_isr_handler_add(KYE_0, gpio_isr_handler, (void*) KYE_0);    //把KEY_0添加到中断服务表中。注意 后面的参数KEY_0

消息接收:在main函数中等待消息:

if(xQueueReceive(gpio_evt_queue, &io_num, portMAX_DELAY)) {    //注意后面的:portMAX_DELAY 等待时间超过这个时间就会跳过。但是这里是死等
printf("GPIO[%d] 中断, 状态: %d\n", io_num, gpio_get_level(io_num));
}

实验结果:

深度截图_选择区域_20190829163833.png

完整代码:

SPI_LCD.zip


打赏 支付宝打赏 微信打赏
分享给朋友:

相关文章

micropython 使用ili9163显示IP地址

micropython 使用ili9163显示IP地址

mian.pyexec(open('./wifi.py').read(),globals()) exec(open('./tft.py').read(),globals())wifi.pyimport network import machine import ntptime import time nic = network.WLAN(network.STA_IF) # c...

Python使用struct处理二进制(pack和unpack用法)

Python使用struct处理二进制(pack和unpack用法)

有的时候需要用python处理二进制数据,比如,存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用 struct来处理c语言中的结构体. struct模块中最重要的三个函数是pack(), unpack(), calcsize()pack(fmt, v1, v2, ...)     按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流) un...

pyqt5 开发入门

pyqt5 开发入门

使用:pyqt5-tools designer 进行窗口设计使用命令:pyuic5 -o textedit.py textedit.ui  把设计的UI文件转换成py文件注意:使用对话框的话要继承于class Ui_MainWindow(QtWidgets.QMainWindow):使用信号的方法:self.actionnew.triggered.connect(self.new_btn)    self.new_btn 为当前类下的方法下面示例:#&nb...

asyncio --- 异步 I/O http服务代码

asyncio --- 异步 I/O http服务代码

import asyncioasync def service(reader,writer):    data = await reader.read(1024) #同步读取数据    data =data.decode().replace('\r','<br/>')    print(writer.get_extra_info('peername'))   &nbs...

micropython 清除flash磁盘内容

micropython 清除flash磁盘内容

对于ESP32,一般是在命令行中使用esptool.py清除flash,如果是在程序中想清除flash内容,或者更换文件系统格式,可以用下面方法:import uos uos.VfsFat.mkfs(bdev)如果使用 LFS2 文件系统,命令是import uos uos.VfsLfs2.mkfs(bdev)对于STM32,默认没有bdev设备,需要使用下面方法:import uos flash = pyb.Flash(start=0)u...

word转换服务python版本

word转换服务python版本

网页无法打开word文档。但是可以转换为pdf来在网页上找开。用python实现在线转换服务。from flask import Flask, request, jsonify,redirect,send_from_directory from win32com.client import constants,gencache import requests import os impor...

python使用requests库下载文件

python使用requests库下载文件

import os import requests def downfile(url): try: url=url.split("@")[0].split("?")[0] urlfile=url.split("/")[-1] print(urlfile) except Exception as e: print("地址不正确...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。