GR5515的门锁配件开发,同时使用uart0和uart1出现问题

蓝牙 BLE设备、蓝牙 MESH设备、蓝牙 Beacon设备、Sub-G设备等


Post Reply
zoule@venztech.com
Posts: 96

如题所示,我正在使用GR5515的SDK开发一款门锁配件,但是当我需要同时使用两个串口时,一个用于调试打印,另外一个与外设通信时却 出现了问题。

串口0 用与 外设设备串口通信,波特率115200
串口1 用于本机的调试LOG信息打印 波特率115200 同样也是

问题现象是: a.为啥串口0 接不到外设的串口信息,或者是接到了信息 却是阻塞了本机 现象是死机了一般
b. 当接到外设传的串口信息后(uart0 的RX) 才打印LOG (这个是uart1的TX)

可能造成的原因是代码本身没理解还是,请你们分析分析一下,可以吗?

下面是详细代码:

这个 是调试串口的 初始化代码:

/*********************************************************
FN:
*/
static void ty_uart2_rx_handler(app_uart_evt_t * p_event)
{
switch (p_event->type)
{
case APP_UART_EVT_RX_DATA:
// tuya_ble_gatt_receive_data(g_rx_buffer, p_event->data.size);
//tuya_ble_common_uart_receive_data(g_rx2_buffer, p_event->data.size);
//app_uart_receive_async(TY_UART2_ID, g_rx2_buffer, TY_UART2_RX_BUF_SIZE);
break;

Code: Select all

    case APP_UART_EVT_TX_CPLT:
        break;

    case APP_UART_EVT_ERROR:
        app_uart_flush(TY_UART2_ID);
        app_uart_deinit(TY_UART2_ID);
        ty_uart2_init();

// APP_ERROR_HANDLER(p_event->data.error_communication);
break;

Code: Select all

    default:
        break;
}

}

/*********************************************************
FN:
*/
uint32_t ty_uart2_init(void)
{
app_drv_err_t ret;
app_uart_tx_buf_t uart_buffer = {0};
app_uart_params_t uart_param =
{
.id = TY_UART2_ID,
.pin_cfg.tx = TY_UART2_TX_CONFIG,
.pin_cfg.rx = TY_UART2_RX_CONFIG,
.pin_cfg.cts = TY_UART2_CTS_CONFIG,
.pin_cfg.rts = TY_UART2_RTS_CONFIG,
.use_mode.type = APP_UART_TYPE_INTERRUPT,
.init.baud_rate = 115200,
.init.data_bits = UART_DATABITS_8,
.init.stop_bits = UART_STOPBITS_1,
.init.parity = UART_PARITY_NONE,
.init.hw_flow_ctrl = UART_HWCONTROL_NONE,
.init.rx_timeout_mode = UART_RECEIVER_TIMEOUT_ENABLE,
};

Code: Select all

uart_buffer.tx_buf      = g_tx2_buffer;
uart_buffer.tx_buf_size = sizeof(g_tx2_buffer);

ret = app_uart_init(&uart_param, ty_uart2_rx_handler, &uart_buffer);
if (ret == APP_DRV_SUCCESS)
{
    uart2_is_init = true;
    app_uart_receive_async(TY_UART2_ID, g_rx2_buffer, TY_UART2_RX_BUF_SIZE);
}

return ret;

}

这个是 与外设通信的 uart0 的初始化代码:
/*********************************************************
FN:
*/
static void ty_uart_rx_handler(app_uart_evt_t * p_event)
{
switch (p_event->type)
{
case APP_UART_EVT_RX_DATA:
// tuya_ble_gatt_receive_data(g_rx_buffer, p_event->data.size);
//tuya_ble_common_uart_receive_data(g_rx_buffer, p_event->data.size);
//app_uart_receive_async(TY_UART_ID, g_rx_buffer, TY_UART_RX_BUF_SIZE);
//betterlife_receive_data(g_rx_buffer, p_event->data.size);
gd_mcu_uart_data(g_rx_buffer,p_event->data.size);
break;

Code: Select all

    case APP_UART_EVT_TX_CPLT:
        break;

    case APP_UART_EVT_ERROR:
        app_uart_flush(TY_UART_ID);
        app_uart_deinit(TY_UART_ID);
        ty_uart_init();
        break;

    default:
        break;
}

}

uint32_t ty_uart_init(void)
{
app_drv_err_t ret;
app_uart_tx_buf_t uart_buffer = {0};
app_uart_params_t uart_param =
{
.id = TY_UART_ID,
.pin_cfg.tx = TY_UART_TX_CONFIG,
.pin_cfg.rx = TY_UART_RX_CONFIG,
.pin_cfg.cts = TY_UART_CTS_CONFIG,
.pin_cfg.rts = TY_UART_RTS_CONFIG,
.use_mode.type = APP_UART_TYPE_DMA,//only uart0 support dma mode
.init.baud_rate = 115200,
.init.data_bits = UART_DATABITS_8,
.init.stop_bits = UART_STOPBITS_1,
.init.parity = UART_PARITY_NONE,
.init.hw_flow_ctrl = UART_HWCONTROL_NONE,
.init.rx_timeout_mode = UART_RECEIVER_TIMEOUT_ENABLE,
};

Code: Select all

uart_buffer.tx_buf      = g_tx_buffer;
uart_buffer.tx_buf_size = sizeof(g_tx_buffer);

ret = app_uart_init(&uart_param, ty_uart_rx_handler, &uart_buffer);

if (ret == APP_DRV_SUCCESS)
{
    TUYA_APP_LOG_DEBUG("app uart0 init ok");
    uart_is_init = true;
    uint16_t res = app_uart_receive_async(TY_UART_ID, g_rx_buffer, TY_UART_RX_BUF_SIZE);
    TUYA_APP_LOG_DEBUG("app_uart_receive_async[%d]",res);
}else{
    TUYA_APP_LOG_DEBUG("app uart0 init failed[%d] \r\n",ret);
}

return 0;

}


我想确定一个问题是:
在串口接收函数中,APP_UART_EVT_RX_DATA 这个枚举类型的值,应该怎么处理??

it_xh
Posts: 35

Re: GR5515的门锁配件开发,同时使用uart0和uart1出现问题

  1. 检查下每个串口对应的引脚映射是否正常

    企业微信截图_1740658910776.png
  2. 基于1的结果,先确认日志打印功能,log的发送最终调用是在 void elog_port_output(const char *log, size_t size) 下,检查该接口内对应的发送串口是否正确

  3. APP_UART_EVT_RX_DATA 这个CB,表示的是接收到串口数据,可参考tuya_ble_common_uart_receive_data()的实现。因为是在irq上下文中,占用时间尽可能短。

  4. 另外推荐使用tuyaos开发,详见:
    蓝牙子设备开发框架:https://developer.tuya.com/cn/docs/iot- ... i19iw54d2g
    551x平台资料:https://developer.tuya.com/cn/docs/iot- ... ccgwrfk1m3

zoule@venztech.com
Posts: 96

Re: GR5515的门锁配件开发,同时使用uart0和uart1出现问题

首先感谢你的及时回复,GR5515的tuya os 开发能 开发配件的吗?还是说 锁和配件 使用能一套sdk,只是pid不一样而已?

Post Reply