如题所示,我正在使用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 这个枚举类型的值,应该怎么处理??