PIN

更新时间:2022-11-24 09:20:20下载pdf

API 列表

函数名称 功能描述
tuya_pin_init 初始化引脚模式
tuya_pin_write 设置引脚的电平
tuya_pin_read 读取引脚的电平
tuya_pin_irq_init 初始化引脚中断
tuya_pin_irq_enable 使能引脚中断
tuya_pin_irq_disable 禁能引脚中断
tuya_pin_control 引脚相关控制

API 说明

tuya_pin_init

函数原型

int tuya_pin_init(tuya_pin_name_t pin, tuya_pin_mode_t  mode);

参数说明

参数名称 参数类型 说明
pin tuya_pin_name_t tuya_pin_name_t枚举中的值
mode tuya_pin_mode_t tuya_pin_mode_t枚举中的值

返回值

返回值 说明
OPRT_OK 初始化成功
其他错误码 初始化失败

tuya_pin_write

函数原型

int tuya_pin_write(tuya_pin_name_t pin, tuya_pin_level_t level);

参数说明

参数名称 参数类型 说明
pin tuya_pin_name_t tuya_pin_name_t枚举中的值
level tuya_pin_level_t tuya_pin_level_t枚举中的值

返回值

返回值 说明
OPRT_OK 初始化成功
其他错误码 初始化失败

tuya_pin_read

函数原型

int tuya_pin_read(tuya_pin_name_t pin)

参数说明

参数名称 参数类型 说明
pin tuya_pin_name_t tuya_pin_name_t枚举中的值

返回值

返回值 说明
TUYA_PIN_LOW 低电平
TUYA_PIN_HIGH 高电平

tuya_pin_irq_init

函数原型

int tuya_pin_irq_init(tuya_pin_name_t pin, tuya_pin_mode_t irq_mode, tuya_pin_irq_cb cb, void *arg);

参数说明

参数名称 参数类型 说明
pin tuya_pin_name_t tuya_pin_name_t枚举中的值
irq_mode tuya_pin_mode_t tuya_pin_mode_t枚举中的值
cb tuya_pin_irq_cb 注册的回调函数,参见如下函数原形
arg void 注册的参数

返回值

返回值 说明
OPRT_OK 初始化成功
其他错误码 执行失败

tuya_pin_irq_enable

函数原型

int tuya_pin_irq_enable(tuya_pin_name_t pin);

参数说明

参数名称 参数类型 说明
pin tuya_pin_name_t tuya_pin_name_t枚举中的值

返回值

返回值 说明
OPRT_OK 初始化成功
其他错误码 执行失败

tuya_pin_irq_disable

函数原型

int tuya_pin_irq_disable(tuya_pin_name_t pin);

参数说明

参数名称 参数类型 说明
pin tuya_pin_name_t tuya_pin_name_t枚举中的值

返回值

返回值 说明
OPRT_OK 初始化成功
其他错误码 执行失败

tuya_pin_control

函数原型

int tuya_pin_control(tuya_pin_name_t pin, uint8_t cmd, void *arg); 

参数说明

参数名称 参数类型 说明
pin tuya_pin_name_t tuya_pin_name_t枚举中的值
cmd uint8_t 控制命令
*arg void 控制参数

返回值

返回值 说明
OPRT_OK 初始化成功
其他错误码 执行失败

结构体说明

tuya_pin_name_t

结构体原型

typedef enum {
    TUYA_PINS_NAME(TUYA_PA),	//! TUYA_PA ->  TUYA_PA0 - TUYA_PA31
    TUYA_PINS_NAME(TUYA_PB),	//! TUYA_PB ->  TUYA_PB0 - TUYA_PB31
    TUYA_PINS_NAME(TUYA_PC),	//! TUYA_PC ->  TUYA_PC0 - TUYA_PC31
    TUYA_PINS_NAME(TUYA_PD),	//! TUYA_PD ->  TUYA_PD0 - TUYA_PD31
    TUYA_PINS_NAME(TUYA_PE),	//! TUYA_PE ->  TUYA_PE0 - TUYA_PE31
} tuya_pin_name_t;

tuya_pin_mode_t

结构体原型

//! 一站式初始化参数
typedef enum {
    //! PU  ->  pull up
    //! PD  ->  pull dowm
    //! FL  ->  floating
    //! PP  ->  push pull
    //! OD  ->  open drain
    //! hiz ->  high-impedance level
    TUYA_PIN_MODE_IN_PU,  					//! 上拉输入
    TUYA_PIN_MODE_IN_PD,         			//! 下拉输入
    TUYA_PIN_MODE_IN_FL,            	    //! 浮空输入
	
	//! 输入中断触发模式选择,默认带上拉
    TUYA_PIN_MODE_IN_IRQ_RISE,    			//! 上升沿触发
    TUYA_PIN_MODE_IN_IRQ_FALL,        		//! 下降沿触发
    TUYA_PIN_MODE_IN_IRQ_RISE_FALL, 		//! 双边沿触发
    TUYA_PIN_MODE_IN_IRQ_LOW,        		//! 低电平触发
    TUYA_PIN_MODE_IN_IRQ_HIGH,        		//! 高电平触发
    
    TUYA_PIN_MODE_OUT_PP_LOW,         		//! 推挽输出低电平,不带上拉
    TUYA_PIN_MODE_OUT_PP_HIGH,        		//! 推挽输出高电平,不带上拉

    TUYA_PIN_MODE_OUT_PP_PU_LOW,       		//! 推挽输出低电平, 带上拉
    TUYA_PIN_MODE_OUT_PP_PU_HIGH,    		//! 推挽输出高电平, 带上拉

    TUYA_PIN_MODE_OUT_PP_PD_LOW,     		//! 开漏输出低电平,带下拉
    TUYA_PIN_MODE_OUT_PP_PD_HIGH,    		//! 开漏输出高电平,带下拉
                                  
    TUYA_PIN_MODE_OUT_OD_LOW,          		//! 开漏输出低电平,不带上拉
    TUYA_PIN_MODE_OUT_OD_HIZ,       		//! 开漏输出高阻态,不带上拉

    TUYA_PIN_MODE_OUT_OD_PU_LOW,      		//! 开漏输出低,带上拉
    TUYA_PIN_MODE_OUT_OD_PU_HIGH,     		//! 开漏输出高,带上拉
} tuya_pin_mode_t;

tuya_pin_level_t

结构体原型

typedef enum {
    TUYA_PIN_LOW  = 0,						//! 设置引脚低电平
    TUYA_PIN_HIGH							//! 设置引脚高电平
} tuya_pin_level_t;

注册函数原型

tuya_pin_irq_cb

函数原型

typedef void (*tuya_pin_irq_cb)(void *args);

PIN 使用示例

void tuya_pa5_irq_cb(void *arg)
{
    PR_NOTICE("TUYA_PA5 irq trigger");
    tuya_pin_irq_disable(TUYA_PA5);
}

void tuya_pa12_irq_cb(void *arg)
{
    PR_NOTICE("TUYA_PA12 irq trigger");
    //! enable tuya_pa5 irq;
    PR_NOTICE("TUYA_PA5 irq enable");
    tuya_pin_irq_enable(TUYA_PA5);
}

void tuya_pin_test(void)
{
    STATIC UINT8_T tick   = 0;
    STATIC UINT8_T stat   = TUYA_PIN_HIGH;

    //! output init high 
    tuya_pin_init(TUYA_PA22, TUYA_PIN_MODE_OUT_PP_HIGH);
    tuya_pin_init(TUYA_PA19, TUYA_PIN_MODE_OUT_PP_LOW);

    //! input pull up
    tuya_pin_init(TUYA_PA14, TUYA_PIN_MODE_IN_PU);

    //! input irq mode
    tuya_pin_irq_init(TUYA_PA5,  TUYA_PIN_MODE_IN_IRQ_FALL, tuya_pa5_irq_cb, NULL);
    tuya_pin_irq_disable(TUYA_PA5);

    //! TUYA_PA5 irq enable by TUYA_P12 irq
    tuya_pin_irq_init(TUYA_PA12, TUYA_PIN_MODE_IN_IRQ_FALL, tuya_pa12_irq_cb, TUYA_PA5);

    while (1) {
        tuya_hal_system_sleep(200);

        if (++tick >= 3) {
            tick = 0;
            //! led toggle
            stat = stat ? TUYA_PIN_LOW : TUYA_PIN_HIGH;
            tuya_pin_write(TUYA_PA22, stat);
        }

        //! led control by key
        if (tuya_pin_read(TUYA_PA14)) {
            tuya_pin_write(TUYA_PA19, TUYA_PIN_HIGH);
        } else {
            tuya_pin_write(TUYA_PA19, TUYA_PIN_LOW);
        }
    }
}