你好,
两个不同的设备连接到ble模块的两个UART。无论何时通过UART2从外部设备接收到ble模块的请求,都将处理接收到的请求,并将响应发送回外部设备。在DSPS_host示例程序中,uart2_rec_data_avail_isr()将UART2中的数据放到缓冲区中。当接收到所有期望的字符时,uart2_rec_data_avail_isr()将调用回调。因此,我对uart2_rec_data_avail_isr()做了一些更改以接收数据。
uart1 -0的端口号
引脚为UART1 TX - 4
引脚为UART1 RX -5
uart2 -0的端口号
引脚为UART1 TX - 2
引脚为UART1 RX -3
静态孔隙uart2_rec_data_avail_isr(空白)
{
void (*rx_callback) (uint8_t, uint32_t) = NULL;
rcv_bytes = 0;
而(uart2_data_rdy_getf ())
{
* uart2_env.rx。bufptr = uart2_rxdata_getf ();
uart2_env.rx.size——;
rcv_bytes + +;
uart2_env.rx.bufptr + +;
}
如果(rcv_bytes)
{
uart2_env.rx。bufptr =零;
rx_callback = uart2_env.rx.callback;
如果(rx_callback ! = NULL)
{
uart2_env.rx。回调=零;
rx_callback (UART_STATUS_OK rcv_bytes);
}
}
其他的
{
uart2_rec_data_avail_setf (1);
}
}
Static uart2_rx_callback(uint8_t res, uint32_t read_size)
{
uint8_t * peripheral 2_rx_ptr = NULL;
开关(res)
{
案例UART_STATUS_OK:
user_periph2_push (&periph2_rx_ptr read_size);
打破;
案例UART_STATUS_INIT:
if (user_buffer_write_check(&外围2_to_ble_buffer, &外围2_rx_ptr, RX_CALLBACK_SIZE) !
{
ASSERT_ERROR (0);//缓冲区太小
}
打破;
默认值:
ASSERT_ERROR (0);//错误:从未知的来源调用回调
}
uart2_read (periph2_rx_ptr read_size uart2_rx_callback);
}
Static void user_外围2_push(uint8_t** wrdata, uint16_t write_amount)
{
静态uint16_t长度;
user_buffer_cfm_write (&periph2_to_ble_buffer write_amount);
if (user_buffer_write_check(&外围2_to_ble_buffer, wrdata, RX_CALLBACK_SIZE) != RX_CALLBACK_SIZE)
{
ASSERT_WARNING (0);
}
If (length = user_buffer_item_count(&外围2_to_ble_buffer)) > 0)
{
uint8_t *p_data = NULL;
length = user_buffer_read_address(&p_data, TX_SIZE);
如果(* (p_data + 2) = = 0 x21)
uart2_write (uint8_t *)数据,sizeof(数据),NULL);
}
user_buffer_release_items (&periph2_to_ble_buffer、长度);//清除缓冲区
}
相比,在上面的代码中,在收到请求和响应发送回外部设备但我的问题是,如果它是闲置一段时间(30秒)一些垃圾数据(00 00 FF 00)被添加到开始的下一个反应,这除了垃圾数据继续每30秒。我检查了相同的UART1有相同的问题....问题是什么.....请帮助解决这个问题。
嗨kavi,
我不明白会引发这种行为发生后30秒(你可以检查它是否与任何祝福活动有关,也许一个额外的定时器或安全,如果你实现安全),这个问题也需要调试代码的因为我不能理解那些额外的字节是确保来自,他们可能是数据密集的响应发送,也许设备睡觉和别针切换,那为什么你越来越垃圾,也许你不是针对指针正常和你发送数据从其他内存位置除了缓冲区分配。您将不得不调试您的设置和代码,以找到那些附加的数据是什么。
由于MT_dialog
也许你可以重置设备,看看是否能在启动时得到这些垃圾数据。如果您还可以在通电时获得垃圾数据,那么您的代码可能已经被重置了一段时间