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

esp32外部中断学习笔记

Watrt6年前 (2019-08-29)Python30330

思路:我使用的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


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

相关文章

python编写的简单http请求和应答

python编写的简单http请求和应答

响应(服务端)import machine import socket pins = [machine.Pin(i, machine.Pin.IN) for i in (0, 2, 4, 5, 12, 13, 14, 15)] adc = machine.ADC(0) html = &quo...

micropython中使用rtc设置时间

micropython中使用rtc设置时间

micropython中使用rtc设置时间from machine import RTC rtc = RTC() rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time print(rtc.datetime(...

python利用pyinstaller打包简明教程

python利用pyinstaller打包简明教程

在创建了独立应用(自包含该应用的依赖包)之后,还可以使用 PyInstaller 将 Python 程序生成可直接运行的程序,这个程序就可以被分发到对应的 Windows 或 Mac OS X 平台上运行。安装 PyInstallePython 默认并不包含 PyInstaller 模块,因此需要自行安装 PyInstaller 模块。安装 PyInstaller 模块与安装其他 Python 模块一样,使用 pip 命令安装即可。在命令行输入如下命令:pip install ...

用mpy-cross保护py文件

用mpy-cross保护py文件

在python中,可以将py文件编译为pyc文件。编译后的pyc文件是二进制格式,一是可以加快加载速度,更重要的是可以保护原始代码。在micropython中同样提供了这个功能,只是它将pyc改名为mpy,编译出的文件扩展名是.mpy。要使用这个功能,首先,我们需要产生mpy-cross工具。在micropython目录下,进入mpy-cross子目录,然后在命令行下输入make编译产生mpy-cross执行文件(需要先安装gcc编译器)。在windows会产生mpy-cross.exe,在li...

micropython 1.17编译出现FAILED: esp-idf/mbedtls/x509_crt_bundle

micropython 1.17编译出现FAILED: esp-idf/mbedtls/x509_crt_bundle

micropython 1.17编译出现FAILED: esp-idf/mbedtls/x509_crt_bundle 错误解决方法。出现错误的原因是ssl中的证书过期了。解决办法:1:(Top) > Component config > mbedTLS > Certificate Bundle->Enable trusted root certificate bundle   禁用2:修改配置文件 :sdkconfig.base  中添加入...

使用 tqdm 库在控制台中实现进度条

使用 tqdm 库在控制台中实现进度条

简单用法:from tqdm import tqdm  for i in tqdm(range(2)):   pass100%|███████████████████| 2/2 [00:00<00:00, 1998.72it/s]  从上面可以看到生成一个长度为2的列表传入tqdm中,在for中迭代,此时输出了进度条,这里tqdm全部使用了默认参数,默认进度条样式就是如上所示;通常默认进度条所输出...

搬运lvgl9在线模拟器

搬运lvgl9在线模拟器

基于micropython模拟器地址:lvgl9...

发表评论

访客

看不清,换一张

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