更新时间:2025-04-24 07:04:30下载pdf
通用输入/输出端口(General Purpose I/O Ports,GPIO),即引脚,可以通过它们输出高低电平,或读入引脚的状态为高电平/低电平。
模式 | 枚举 |
---|---|
上拉输入 | TUYA_GPIO_PULLUP |
下拉输入 | TUYA_GPIO_PULLDOWN |
高阻输入 | TUYA_GPIO_HIGH_IMPEDANCE |
浮空输入 | TUYA_GPIO_FLOATING |
推挽输出 | TUYA_GPIO_PUSH_PULL |
开漏输出 | TUYA_GPIO_OPENDRAIN |
开漏带上拉输出 | TUYA_GPIO_OPENDRAIN_PULLUP |
以上模式需要关注芯片本身是否支持,这里只是模式的最大集合。
OPERATE_RET tkl_gpio_init(TUYA_GPIO_NUM_E pin_id, CONST TUYA_GPIO_BASE_CFG_T *cfg);
功能描述:
参数:
pin_id
:GPIO 引脚编号,此编号区别于芯片原始引脚号,是由涂鸦根据芯片 PA、PB … PN 上的引脚个数顺序往下编号的:
名称 | 定义 | 备注 |
---|---|---|
TUYA_GPIO_NUM_0 | 引脚 0 | 起始编号 |
TUYA_GPIO_NUM_1 | 引脚 1 | - |
TUYA_GPIO_NUM_3 | 引脚 2 | - |
… | 引脚 n | - |
TUYA_GPIO_NUM_60 | 引脚 60 | 最大编号 |
cfg
:GPIO 基础配置,取值如下:
typedef struct {
TUYA_GPIO_MODE_E mode; // GPIO 模式
TUYA_GPIO_DRCT_E direct; // GPIO 输入输出方向
TUYA_GPIO_LEVEL_E level; // GPIO 初始化电平
} TUYA_GPIO_BASE_CFG_T;
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 | 高电平 |
返回值:
OPRT_OK
:成功tuya_error_code.h
、OPRT_OS_ADAPTER_GPIO_ERRCODE
定义部分OPERATE_RET tkl_gpio_deinit(TUYA_GPIO_NUM_E pin_id)
pin_id
:GPIO 引脚编号OPRT_OK
:成功tuya_error_code.h
、OPRT_OS_ADAPTER_GPIO_ERRCODE
定义部分OPERATE_RET tkl_gpio_write(TUYA_GPIO_NUM_E pin_id, TUYA_GPIO_LEVEL_E level);
pin_id
:GPIO 引脚编号level
:GPIO 输出电平OPRT_OK
:成功tuya_error_code.h
、OPRT_OS_ADAPTER_GPIO_ERRCODE
定义部分OPERATE_RET tkl_gpio_read(TUYA_GPIO_NUM_E pin_id, TUYA_GPIO_LEVEL_E *level);
pin_id
:GPIO 引脚编号*level
:GPIO 读取电平返回值OPRT_OK
:成功tuya_error_code.h
、OPRT_OS_ADAPTER_GPIO_ERRCODE
定义部分OPERATE_RET tkl_gpio_irq_init(TUYA_GPIO_NUM_E pin_id, CONST TUYA_GPIO_IRQ_T *cfg);
功能描述:
参数:
pin_id
:GPIO 引脚编号
*cfg
:GPIO 中断配置
cfg
:GPIO 基础配置,取值如下:
typedef struct {
TUYA_GPIO_IRQ_E mode; // 中断模式
TUYA_GPIO_IRQ_CB cb; // 中断回调函数
VOID_T *arg; // 回调函数参数
} 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 | 高电平模式 |
cb
定义如下:
typedef VOID_T (*TUYA_GPIO_IRQ_CB)(VOID_T *args);
返回值:
OPRT_OK
:成功tuya_error_code.h
、OPRT_OS_ADAPTER_GPIO_ERRCODE
定义部分OPERATE_RET tkl_gpio_irq_enable(TUYA_GPIO_NUM_E pin_id);
pin_id
:GPIO 引脚编号OPRT_OK
:成功tuya_error_code.h
、OPRT_OS_ADAPTER_GPIO_ERRCODE
定义部分OPERATE_RET tkl_gpio_irq_disable(TUYA_GPIO_NUM_E pin_id);
pin_id
:GPIO 引脚编号OPRT_OK
:成功tuya_error_code.h
、OPRT_OS_ADAPTER_GPIO_ERRCODE
定义部分// GPIO 初始化
VOID_T tuya_gpio_test(VOID_T)
{
TUYA_GPIO_BASE_CFG_T cfg = {
.mode = TUYA_GPIO_PUSH_PULL,
.direct = TUYA_GPIO_OUTPUT,
.level = TUYA_GPIO_LEVEL_LOW,
};
tkl_gpio_init(GPIO_NUM_3, &cfg);
tkl_gpio_init(GPIO_NUM_4, &cfg);
// GPIO 输出
tkl_gpio_write(GPIO_NUM_3, TUYA_GPIO_LEVEL_HIGH);
tkl_gpio_write(GPIO_NUM_4, TUYA_GPIO_LEVEL_HIGH);
}
// 中断回调函数
STATIC VOID __gpio_irq_callback7(VOID *args)
{
//to do
}
STATIC VOID __gpio_irq_callback8(VOID *args)
{
//to do
}
// GPIO 中断初始
VOID_T tuya_gpio_irq_test(VOID_T)
{
TUYA_GPIO_IRQ_T irq_cfg_7 = {
.mode = TUYA_GPIO_IRQ_RISE,
.cb = __gpio_irq_callback7,
.arg = NULL,
};
TUYA_GPIO_IRQ_T irq_cfg_8 = {
.mode = TUYA_GPIO_IRQ_RISE,
.cb = __gpio_irq_callback8,
.arg = NULL,
};
tkl_gpio_irq_init(GPIO_NUM_7, &irq_cfg_7);
tkl_gpio_irq_init(GPIO_NUM_8, &irq_cfg_8);
tkl_gpio_irq_enable(GPIO_NUM_7);
tkl_gpio_irq_enable(GPIO_NUM_8);
}
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈