Page 1 of 1

T5开发板 UART和SPI问题

Posted: 2025年 Mar 21日 10:58
by Gzz_lin

1、在线程中使用UART阻塞读,无法结束线程。使用异步读写,发现无法写出,翻看代码注释也不能理解,也无法正确读取,希望出一个demo。

Code: Select all

/*UART初始化参数 */
CONST TAL_UART_CFG_T GX_UART_CFG = {
    .base_cfg.baudrate = 9600,
    .base_cfg.databits = TUYA_UART_DATA_LEN_8BIT,
    .base_cfg.parity = TUYA_UART_PARITY_TYPE_NONE,
    .base_cfg.stopbits = TUYA_UART_STOP_LEN_1BIT,
    .rx_buffer_size = 64,
    .open_mode = O_BLOCK//阻塞
};

//UART接收数据线程
STATIC VOID_T co2_prv_uart_recv_task(VOID_T *arg) {
    UINT8_T data[16];
    UINT8_T length;
    UINT8_T i=0;

while(gb_co2_flag)
{

    length=tal_uart_read(CO2_UART_PORT_NUM, &data, 16);
    if(length>0)
    {
        for(i=0;i<length;i++)
        {
            tal_queue_post(gx_uart_data_queue, &(data[i]), 0);
        }
    }
    else
    {
        tal_system_sleep(100);
    }
    
}
tal_thread_delete(gx_uart_recv_handle);
gx_uart_recv_handle=NULL;
   
}

2、SPI无法软件控制CS引脚,导致总线上只能挂一个设备

Code: Select all

/*spi init*/
CONST TUYA_SPI_BASE_CFG_T GX_SPI_CFG = {
    .mode = TUYA_SPI_MODE3,
    .freq_hz = SPI_FREQ,
    .databits = TUYA_SPI_DATA_BIT8,
    .bitorder = TUYA_SPI_ORDER_MSB2LSB,
    .role = TUYA_SPI_ROLE_MASTER,
    .type = TUYA_SPI_SOFT_TYPE,//TUYA_SPI_AUTO_TYPE,//
    .spi_dma_flags=0
};

3、SPI速度过慢,使用DMA只能在内存间搬运数据,从Flash搬运到屏幕怎么解决,不知道用DMA搬到缓冲区再从缓冲区搬到屏幕快不快。SPI的中断里面只能接收到02标志,其他标志均为收到。