使用 T5 外设接口

更新时间:2025-04-15 06:09:06下载pdf

本文为您介绍如何使用 T5 外设接口。

GPIO 使用方法

硬件接线图如下所示:

使用 T5 外设接口

引脚 P20 作为 IO 使用,可以输出电平,也可以读取外部电平。

输出电平

代码初始化

OPERATE_RET tuya_ai_toy_GPIO20_init(void)
{
    OPERATE_RET rt = OPRT_OK;
    
    TUYA_GPIO_BASE_CFG_T cfg;
    cfg.mode = TUYA_GPIO_PULLDOWN;
    cfg.direct = TUYA_GPIO_OUTPUT;
    cfg.level = TUYA_GPIO_LEVEL_LOW;
    TAL_PR_DEBUG("GPIO %d initialized", TUYA_GPIO_NUM_20);
    tkl_gpio_init(TUYA_GPIO_NUM_20, &cfg);

    return rt;
}

TUYA_GPIO_NUM_20 输出电平

GPIO 做输出,代码示例如下:

tkl_gpio_write(TUYA_GPIO_NUM_20, 1);//P20输出高电平
tkl_gpio_write(TUYA_GPIO_NUM_20, 0);//P20输出低电平

输入电平

GPIO 读取外部电平,参考代码:

app_key_init(para.reset_key_pin);

串口使用方法

开发板上的引脚位置图如下。其中,uart0 对应 P10、P11。

使用 T5 外设接口
引脚 功能
GPIO10 DL_UART_RX
GPIO11 DL_UART_RX

代码示例

您可以参考以下示例代码实现 串口收发数据 功能:

// 串口收发
void my_uart_rx_callback_task(VOID_T *args) {
    char buff[256] = {0};
    int read_uart_len ;
    while(1)
    {
        read_uart_len = tal_uart_get_rx_data_size(TUYA_UART_NUM_0);
        if (read_uart_len > 0 && read_uart_len <= 256) 
        {
            //串口收
            tal_uart_read(TUYA_UART_NUM_0, buff,read_uart_len);

            //打印
            TAL_PR_HEXDUMP_DEBUG("read uart:",buff,read_uart_len);

            char str[read_uart_len + 1];
            for (int i = 0; i < read_uart_len; i++) {
                str[i] = ((char*)buff)[i];
            }
           
            str[read_uart_len] = '\0';
            tkl_log_output("UART received data: %s\n", str);

            // 串口发
            char data[] = {0x01,0x02,0x03,0x05,0x08};
            int len = sizeof(data) / sizeof(data[0]); //
            tal_uart_write(TUYA_UART_NUM_0, (const unsigned char *)data, len);


        }
    }

}
void user_uart_demo(void)
{
    TAL_UART_CFG_T cfg;
    memset(&cfg, 0, sizeof(TAL_UART_CFG_T));
    cfg.base_cfg.baudrate = 115200;
    cfg.base_cfg.databits = TUYA_UART_DATA_LEN_8BIT;
    cfg.base_cfg.parity = TUYA_UART_PARITY_TYPE_NONE;
    cfg.base_cfg.stopbits = TUYA_UART_STOP_LEN_1BIT;
    cfg.rx_buffer_size = 256;

    tal_uart_init(TUYA_UART_NUM_0, &cfg);

    OPERATE_RET rt = OPRT_OK;
    THREAD_HANDLE uart_task_handle;
    THREAD_CFG_T thread_cfg = {
        .thrdname = "uart_task",
        .priority = THREAD_PRIO_5,
        .stackDepth = 4096
    };
    TUYA_CALL_ERR_LOG(tal_thread_create_and_start(&uart_task_handle, NULL, NULL, my_uart_rx_callback_task, NULL, &thread_cfg));
    
}