Uart2 Rx中断问题

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.xmece.com/support.我们将在未来几天修复bug /优化搜索和标记。
3个帖子/ 0个新
最后发表
kavi
离线
最后看到:4年1个月前
加入:2017-03-14 07:51
Uart2 Rx中断问题

你好,
两个不同的设备连接到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有相同的问题....问题是什么.....请帮助解决这个问题。

设备:
MT_dialog
离线
最后看到:3个月1周前
工作人员
加入:2015-06-08 34
嗨kavi,

嗨kavi,

我不明白会引发这种行为发生后30秒(你可以检查它是否与任何祝福活动有关,也许一个额外的定时器或安全,如果你实现安全),这个问题也需要调试代码的因为我不能理解那些额外的字节是确保来自,他们可能是数据密集的响应发送,也许设备睡觉和别针切换,那为什么你越来越垃圾,也许你不是针对指针正常和你发送数据从其他内存位置除了缓冲区分配。您将不得不调试您的设置和代码,以找到那些附加的数据是什么。

由于MT_dialog

chris0409
离线
最后看到:3年11个月前
加入:2017-01-11 05:59
也许你可以重新设置

也许你可以重置设备,看看是否能在启动时得到这些垃圾数据。如果您还可以在通电时获得垃圾数据,那么您的代码可能已经被重置了一段时间