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

桌面小屏幕实战课程:DesktopScreen 9 GPIO

飞书文档https://x509p6c8to.feishu.cn/docx/doxcnNDtfnJnoQ6Wd17bq19aEZJ

/home/kemp/work/esp/esp-idf/examples/peripherals/gpio

源码下载方式参考:

源码下载方式

GPIO & RTC GPIO - - ‒ ESP-IDF 编程指南 release-v4.1 文档


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "driver/gpio.h"#include "ds_gpio.h"
#include "ds_system_data.h"/*** GPIO status:* GPIO5: output* GPIO4:  input, pulled up, interrupt from rising edge*/#define GPIO_OUTPUT_IO_0    5
#define GPIO_OUTPUT_PIN_SEL  ((1ULL<<GPIO_OUTPUT_IO_0))
#define GPIO_INPUT_IO_0     34
#define GPIO_INPUT_PIN_SEL  ((1ULL<<GPIO_INPUT_IO_0))
#define ESP_INTR_FLAG_DEFAULT 0//屏幕片选 0-有效
#define SCREEN_GPIO_OUTPUT_CS 27
#define SCREEN_GPIO_OUTPUT_CS_SEL ((1ULL<<SCREEN_GPIO_OUTPUT_CS))
//屏幕数据/指令选择 1-data 0-cmd
#define SCREEN_GPIO_OUTPUT_DC 14
#define SCREEN_GPIO_OUTPUT_DC_SEL ((1ULL<<SCREEN_GPIO_OUTPUT_DC))
//屏幕复位 0-reset
#define SCREEN_GPIO_OUTPUT_RES 12
#define SCREEN_GPIO_OUTPUT_RES_SEL ((1ULL<<SCREEN_GPIO_OUTPUT_RES))
//屏幕状态 1-busy
#define SCREEN_GPIO_INTPUT_BUSY 13
#define SCREEN_GPIO_INTPUT_BUSY_SEL ((1ULL<<SCREEN_GPIO_INTPUT_BUSY))static 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);
}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 ds_touch_gpio_init(){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);//GPIO interrupt type : both rising and falling edgeio_conf.intr_type = GPIO_INTR_ANYEDGE;//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 pin// gpio_set_intr_type(GPIO_INPUT_IO_0, GPIO_INTR_NEGEDGE);//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);}void ds_screen_gpio_init(){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 = SCREEN_GPIO_OUTPUT_CS_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);//bit mask of the pins that you want to set,e.g.GPIO18/19io_conf.pin_bit_mask = SCREEN_GPIO_OUTPUT_DC_SEL;//configure GPIO with the given settingsgpio_config(&io_conf);//bit mask of the pins that you want to set,e.g.GPIO18/19io_conf.pin_bit_mask = SCREEN_GPIO_OUTPUT_RES_SEL;//configure GPIO with the given settingsgpio_config(&io_conf);io_conf.intr_type = GPIO_INTR_NEGEDGE;//bit mask of the pins, use GPIO4/5 hereio_conf.pin_bit_mask = SCREEN_GPIO_INTPUT_BUSY_SEL;//set as input mode   io_conf.mode = GPIO_MODE_INPUT;//enable pull-up modeio_conf.pull_up_en = 0;gpio_config(&io_conf);//change gpio intrrupt type for one pin// gpio_set_intr_type(SCREEN_GPIO_INTPUT_BUSY, GPIO_INTR_NEGEDGE);//install gpio isr servicegpio_install_isr_service(ESP_INTR_FLAG_DEFAULT);//hook isr handler for specific gpio pingpio_isr_handler_add(SCREEN_GPIO_INTPUT_BUSY, gpio_isr_handler, (void*) SCREEN_GPIO_INTPUT_BUSY);
}void ds_gpio_init(){ds_touch_gpio_init();
}void ds_gpio_set_screen_cs(uint32_t level){gpio_set_level(SCREEN_GPIO_OUTPUT_CS, level);
}void ds_gpio_set_screen_dc(uint32_t level){gpio_set_level(SCREEN_GPIO_OUTPUT_DC, level);
}void ds_gpio_set_screen_rst(uint32_t level){gpio_set_level(SCREEN_GPIO_OUTPUT_RES, level);
}int ds_gpio_get_screen_busy(){return gpio_get_level(SCREEN_GPIO_INTPUT_BUSY);
}void ds_gpio_set_touch_rst(uint32_t level){gpio_set_level(GPIO_OUTPUT_IO_0, level);
}
http://www.lqws.cn/news/512767.html

相关文章:

  • 轻巧灵动,智启未来 ——Kinova Gen3 Lite 机器人轻松解锁各行业自动化新姿势
  • 集成学习基础:Bagging 原理与应用
  • 多模态大模型(从0到1)
  • CRMEB PHP多门店版v3.2.1系统全开源+Uniapp前端+搭建教程
  • 【stm32】标准库学习——USART串口
  • 2023年全国青少年信息素养大赛Python 复赛真题——玩石头游戏
  • 大模型时代的创业机遇
  • 左神算法之双集合平均值优化操作的最大次数
  • SIAM-2011《Weighted Graph Compression for Parameter-free Clustering With PaCCo》
  • 【基础篇-消息队列】—— 如何实现单个队列的并行消费及如何保证消息的严格顺序
  • 爬取小红书相关数据导入到excel
  • SpringCloud系列(35)--使用HystrixDashboard进行服务监控
  • 《汇编语言:基于X86处理器》第4章 数据传送、寻址和算术运算(2)
  • 行为验证码 AJ-Captcha 使用文档
  • Golang Kratos 系列:领域层model定义是自洽还是直接依赖第三方(三)
  • C++字符串的行输入
  • MySQL之SQL性能优化策略
  • 《仿盒马》app开发技术分享-- 兑换列表展示(68)
  • git操作练习(3)
  • 【Python-Day 29】万物皆对象:详解 Python 类的定义、实例化与 `__init__` 方法
  • SQL Server从入门到项目实践(超值版)读书笔记 18
  • git commit --no-verify -m ““ 命令的作用是什么
  • LangChain网页自动化PlayWrightBrowserToolkit
  • Python训练营-Day40-训练和测试的规范写法
  • maven:迁移到 Maven Central 后 pom.xml的配置步骤
  • 马克思主义基本原理期末复习下
  • HarmonyOS开发基础 --鸿蒙仓颉语言基础语法入门
  • 基于元学习的回归预测模型如何设计?
  • 3D重建任务中的显式学习和隐式学习
  • 脉内频率捷变LFM信号