【TuyaOS开发之旅】BK7231N GPIO的简单使用

news2025/1/12 16:01:07

接口讲解

GPIO初始化

/**
 * @brief gpio 初始化
 * 
 * @param[in] pin_id: 需要初始化的GPIO编号, 对应TUYA_GPIO_NUM_E枚举
 * @param[in] cfg:  gpio 配置
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */
OPERATE_RET tkl_gpio_init(TUYA_GPIO_NUM_E pin_id, CONST TUYA_GPIO_BASE_CFG_T *cfg);

TUYA_GPIO_BASE_CFG_T 中进行GPIO模式、方向和电平高低的配置。

mode参数支持如下:

  • TUYA_GPIO_PULLUP 输入上拉
  • TUYA_GPIO_PULLDOWN 输入下拉
  • TUYA_GPIO_HIGH_IMPEDANCE 高阻输入
  • TUYA_GPIO_FLOATING 浮空输入
  • TUYA_GPIO_PUSH_PULL 推完输出
  • TUYA_GPIO_OPENDRAIN 开漏输出
  • TUYA_GPIO_OPENDRAIN_PULLUP 开漏内部上拉输出

direct参数支持如下:

  • TUYA_GPIO_INPUT 输入方向
  • TUYA_GPIO_OUTPUT 输出方向

level参数支持如下:

  • TUYA_GPIO_LEVEL_LOW 低电平
  • TUYA_GPIO_LEVEL_HIGH 高电平

GPIO反初始化

/**
 * @brief gpio 反初始化
 * 
 * @param[in] pin_id: 需要初始化的GPIO编号, 对应TUYA_GPIO_NUM_E枚举
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */
OPERATE_RET tkl_gpio_deinit(TUYA_GPIO_NUM_E pin_id);

外部中断操作

外部中断初始化

/**
 * @brief gpio 中断操作初始化
 * NOTE: 单独调用此API不会使能GPIO 中断操作,需要调用tkl_gpio_irq_enable来使能中断
 * 
 * @param[in] pin_id: 需要初始化的GPIO编号, 对应TUYA_GPIO_NUM_E枚举
 * @param[in] cfg:  gpio 中断配置
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */
OPERATE_RET tkl_gpio_irq_init(TUYA_GPIO_NUM_E pin_id, CONST TUYA_GPIO_IRQ_T *cfg);

TUYA_GPIO_IRQ_T 配置中可以进行中断模式、回调函数以及自定义参数的配置

mode参数如下所示:

  • TUYA_GPIO_IRQ_RISE 上升沿中断
  • TUYA_GPIO_IRQ_FALL 下降沿中断
  • TUYA_GPIO_IRQ_RISE_FALL 双边沿中断
  • TUYA_GPIO_IRQ_LOW 低电平中断
  • TUYA_GPIO_IRQ_HIGH 高电平中断

GPIO状态写入

/**
 * @brief gpio write
 * 
 * @param[in] pin_id: 需要操作的GPIO编号, 对应TUYA_GPIO_NUM_E枚举
 * @param[in] level: GPIO需要写入的电平值
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */
OPERATE_RET tkl_gpio_write(TUYA_GPIO_NUM_E pin_id, TUYA_GPIO_LEVEL_E level);

level参数支持如下:

  • TUYA_GPIO_LEVEL_LOW 低电平
  • TUYA_GPIO_LEVEL_HIGH 高电平

GPIO状态读取

/**
 * @brief gpio read
 * 
 * @param[in] pin_id: 需要操作的GPIO编号, 对应TUYA_GPIO_NUM_E枚举
 * @param[out] level: GPIO需要读取的电平值
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */
OPERATE_RET tkl_gpio_read(TUYA_GPIO_NUM_E pin_id, TUYA_GPIO_LEVEL_E *level);

level参数支持如下:

  • TUYA_GPIO_LEVEL_LOW 低电平
  • TUYA_GPIO_LEVEL_HIGH 高电平

GPIO 简单应用Demo

VOID_T app_led_init(VOID_T)					//GPIO write相关操作
{
    TUYA_GPIO_BASE_CFG_T led_cfg = {
        .mode = TUYA_GPIO_PUSH_PULL,
        .direct = TUYA_GPIO_OUTPUT,
        .level = TUYA_GPIO_LEVEL_HIGH};
    tkl_gpio_init(LED_PIN, &led_cfg);

    set_led_status(cur_led_status);
    return;
}

VOID_T set_led_status(LED_STATUS_E led_status)
{
    if (LED_ON == led_status) {
        tkl_gpio_write(LED_PIN, TUYA_GPIO_LEVEL_HIGH);
    }
    else {
        tkl_gpio_write(LED_PIN, TUYA_GPIO_LEVEL_LOW);
    }

    cur_led_status = led_status;
    return;
}


VOID_T app_key_init(VOID_T)				//gpio read 相关操作
{
    /* init key gpio */
    TUYA_GPIO_BASE_CFG_T key_cfg = {
        .mode = TUYA_GPIO_PULLUP,
        .direct = TUYA_GPIO_INPUT,
        .level = TUYA_GPIO_LEVEL_HIGH};

    tkl_gpio_init(KEY_PIN, &key_cfg);
}

VOID_T get_key_val()
{
    OPERATE_RET op_ret = OPRT_OK;
    TUYA_GPIO_LEVEL_E read_level = TUYA_GPIO_LEVEL_HIGH;
    UINT32_T time_start = 0, timer_end = 0;

    tkl_gpio_read(KEY_PIN, &read_level);			//读取GPIO电平值
    if (TUYA_GPIO_LEVEL_HIGH == read_level)
    {
        tal_system_sleep(3);
        tkl_gpio_read(KEY_PIN, &read_level);
        time_start = tal_system_get_millisecond();
        while (TUYA_GPIO_LEVEL_HIGH == read_level)
        {
            tkl_gpio_read(KEY_PIN, &read_level);
            tal_system_sleep(50);					//延时等待
        }
        timer_end = tal_system_get_millisecond();	//获取当前时间

        if (timer_end - time_start >= LONE_PRESS_TIME)
        { // 长按操作
        }
        else if (timer_end - time_start > 20)
        { // 短按操作
        }
    }
}


GPIO 外部中断

#define TEST_PIN3 16     //irq
static void pin_irq_cb(void *arg)
{
    tkl_log_output("pin %d irq arg[%d]\r\n",TEST_PIN3, (int)arg);
}

VOID_T gpio_irq_test(void)
{
    int value = 4567;
    TUYA_GPIO_IRQ_T cfg  = {
        .mode = TUYA_GPIO_IRQ_RISE,
        .cb = pin_irq_cb,
        .arg = (void*)value			//callback中传递的arg参数
    };
    tkl_gpio_irq_init(TEST_PIN3,&cfg);
}
  • 效果图:
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/117973.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SpringBoot工程开发Docker化微服务

目录 1. 微服务容器化治理的优缺点 1.1 微服务容器化的优点 1.2 微服务容器化的缺点 2. 微服务的两种模式 2.1 Microservice SDK 2.2 ServiceMesh 3. 微服务容器化治理的推荐模式 4.Windows下开发容器化微服务(非K8S) 4.1 开发环境 4.2 代码框架…

全网最新、最详细的使用burpsuite验证码识别绕过爆破教程(2023最新)

1、前沿 最近一直在研究绕过验证码进行爆破的方法,在这里对自己这段时间以来的收获进行一下分享。在这里要分享的绕过验证码爆破的方法一共有2个,分为免费版本(如果验证码比较奇怪可能会有识别错误的情况)和付费版本(…

【Qt】QtCreator远程部署、调试程序

1、添加远程设备 1)QtCreator 工具–> 选项 --> 设备 --> 添加 2)设备设置向导选择–> Generic Linux Device --> 开启向导 3)填写“标识配置的名称”(随便写)、设备IP、用户名 --> 下一步 4)选择配对秘密文件,第一次配对,可以不填写,点击“下一…

嵌入式:ARM嵌入式系统开发流程概述

文章目录嵌入式开发的具体过程开发流程图嵌入式软件开发环境交叉开发环境远程调试结构图嵌入式应用软件开发的基本流程软件模拟环境目标板与评估板嵌入式软件开发的可移植性和可重用性嵌入式开发的具体过程 系统定义与需求分析阶段方案设计阶段详细设计阶段软硬件集成测试阶段…

Tomcat架构分析—— Engine

文章目录一、Tomcat的核心模块(核心组件)二、Engine 组件1.核心类与依赖图2.核心类源码分析构造函数:初始化方法 init:启动方法 start:3.Engine的启动过程总结一、Tomcat的核心模块(核心组件) …

机器学习之支持向量机(手推公式版)

文章目录前言1. 间隔与支持向量2. 函数方程描述3. 参数求解3.1 拉格朗日乘数3.2 拉格朗日对偶函数前言 支持向量机(Support(Support(Support VectorVectorVector Machine,SVM)Machine,SVM)Machine,SVM)源于统计学习理论,是一种二分类模型,是机器学习中获…

mysql查询当天,近一周,近一个月,近一年的数据

1.mysql查询当天的数据 select * from table where to_days(时间字段) to_days(now()); 2.mysql查询昨天的数据 select * from table where to_days(now( ) ) - to_days( 时间字段名) < 1 3.mysql查询近一周的数据 SELECT * FROM table WHERE date(时间字段) > D…

MySQL表的创建修改删除

目录 1、表的创建 2、查看表结构 3、表的修改 4、表的删除 1、表的创建 CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎&#xff1b;说明&#xff1a; field 表示列名 datatype 表…

计算机系统基础实验 - 定点数加减法的机器级表示

实验序号&#xff1a;2 实验名称&#xff1a;定点数加减法的机器级表示 适用专业&#xff1a;软件工程 学 时 数&#xff1a;2学时 一、实验目的 1、掌握定点数加法的机器级表示。 2、掌握定点数减法的机器级表示。 3、掌握EFLAGS中4个牵涉到计算的标志位的计算方法。 4、掌握…

python实现动态柱状图

目录 一.基础柱状图 反转x轴&#xff0c;y轴&#xff0c;设置数值标签在右侧 小结 二.基础时间线柱状图 三.GDP动态柱状图绘制 1.了解列表的sort方法并配合lambda匿名函数完成列表排序 2.完成图表所需数据 3.完成GDP动态图表绘制 添加主题类型 设置动态标题 四.完整代码…

5.6 try语句块和异常处理

文章目录throw表达式(异常检测)try语句块&#xff08;异常处理&#xff09;编写处理代码函数在寻找处理代码的过程中退出标准异常异常是指存在于运行时的反常行为&#xff0c;这些行为超出了函数正常功能的范围。典型的异常包括失去数据库连接以及遇到意外输入等。当程序的某部…

Android Studio实现一个旅游课题手机app

文章目录&#xff1a; 目录 一、课题介绍 二、软件的运行环境 三、软件运行截图 四、软件项目总结 一、课题介绍 本次课题是实现了一个外出旅游的app&#xff0c;通过app可以显示景点的信息&#xff0c;以及根据地区查询&#xff0c;具体功能如下&#xff1a; 客户端 1.用…

【算法】面试题 - 数组(附讲解视频)

目录标题原地修改数组&#xff08;快慢指针&#xff09;26. 删除有序数组中的重复项扩展&#xff1a;83. 删除排序链表中的重复元素27. 移除元素283. 移动零左右指针167. 两数之和15. 三数之和[一个方法团灭 NSUM 问题](https://blog.csdn.net/yzx3105/article/details/1284606…

JavaWeb学生系统+教师系统+管理员系统

目录&#xff1a;一、前言&#xff1a;一、用到的技术&#xff1a;1.前端&#xff1a;HTMLCssJavaScriptAjaxJQueryBootStrap2.后端&#xff1a;ServletJSPSpringMVCJPA二、系统实现的效果&#xff1a;1.登录登出功能&#xff1a;(1)不同用户可以跳转到不同的系统页面。(2)设有…

window 和虚拟机ubuntu通讯的网络设置 本地连接桥接和NAT

工作需要&#xff0c;最近在linux下开发&#xff0c;需要将windows里的文件传至虚拟机里以及下位机树莓派中&#xff0c;三者需要实现互传。 windows连接树莓派时是采用网口建立本地连接的&#xff0c;而当不需要连接树莓派时&#xff0c;windows和虚拟机不能通过有线本地连接…

09、SpringCloud 系列:Nacos - 配置文件中心

SpringCloud 系列列表&#xff1a; 文章名文章地址01、Eureka - 集群、服务发现https://blog.csdn.net/qq_46023503/article/details/12831902302、Ribbon - 负载均衡https://blog.csdn.net/qq_46023503/article/details/12833228803、OpenFeign - 远程调用https://blog.csdn.…

Python接口测试实战1(下)- 接口测试工具的使用

本节内容 抓包工具的使用Postman的使用 抓包工具的使用 抓包工具简介 Chrome/Firefox 开发者工具: 浏览器内置&#xff0c;方便易用Fiddler/Charles: 基于代理的抓包&#xff0c;功能强大&#xff0c;可以手机抓包&#xff0c;模拟弱网&#xff0c;拦截请求&#xff0c;定制…

xpdf在windows下的编译记录

目录 1、下载源码 ​编辑 2、准备工作 3、编译freetype 3.1 打开vs工程 3.2 生成之后查看 4、编译zlib 5、编译libpng 6、编译lcms 7、编译xpdf 8、存在问题 1、下载源码 Xpdf官网下载&#xff1a;Download Xpdf and XpdfReader 2、准备工作 3、编译freetype 3.1 打…

财务数字化转型怎么转?从哪几个方面出发

财务的数字化转型如何进行&#xff1f;许多企业在推动各大业务部门进行数字化转型时&#xff0c;往往会忽略财务部门。然而&#xff0c;作为掌握公司核心资源与数据和推动企业数字化建设的部门&#xff0c;财务也应成为企业数字化转型的重要突破口。 这篇就用几个案例详细拆解…

React 入门:实战案例 Github搜索_静态组件

文章目录开发前的准备实现组件静态代码开发前的准备 目标实现页面效果, 及组件拆分&#xff0c;如下图所示 组件代码结构规划 外部资源准备 引入第三方样式 bootstrap CSS 样式库 bootstrap 官网有 v3、v4、v5 三个版本&#xff0c;本文使用的 v3 版本的样式&#xff0c;可…