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标志,其他标志均为收到。