UART2 RX中断问题

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
3个帖子/ 0新
最后一篇
卡维
离线
最后一次露面:4年1个月前
加入:2017-03-14 07:51
UART2 RX中断问题

你好,
两个不同的区别设备连接到两个UART的BLE模块。每当从外部设备通过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的PIN
针为UART1 RX -3

静态void UART2_REC_DATA_AVAIL_ISR(void)
{
void(* rx_callback)(uint8_t,uint32_t)= null;
uint32_t rcv_bytes = 0;
而(UART2_DATA_RDY_GETF())
{
* uart2_env.rx.bufptr = uart2_rxdata_getf();
uart2_env.rx.size--;
rcv_bytes ++;
uart2_env.rx.bufptr ++;
}
if(rcv_bytes)
{
uart2_env.rx.bufptr = null;
rx_callback = uart2_env.rx.callback;
if(rx_callback!= null)
{
uart2_env.rx.callback = null;
rx_callback(uart_status_ok,rcv_bytes);
}
}
别的
{
UART2_REC_DATA_AVAIL_SETF(1);
}

}

静态void UART2_RX_CALLBALL(UINT8_T RES,UINT32_T READ_SIZE)
{
uint8_t * periph2_rx_ptr = null;
开关(RES)
{
案例UART_STATUS_OK:
user_periph2_push(&periph2_rx_ptr,read_size);
休息;
案例UART_STATUS_INIT:
if(user_buffer_write_check(&periph2_to_ble_buffer,&periph2_rx_ptr,rx_callback_size)!= rx_callback_size)
{
assert_error(0);//缓冲区太小了
}
休息;
默认:
assert_error(0);//错误:从未知来源调用回调
}
UART2_READ(PERIPH2_RX_PTR,READ_SIZE,UART2_RX_CALLBALL);
}

静态void user_periph2_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(&periph2_to_ble_buffer,wrdata,rx_callback_size)!= rx_callback_size)
{
assert_warning(0);
}
if((length = user_buffer_item_count(&periph2_to_ble_buffer)> 0)
{
uint8_t * p_data = null;
length = user_buffer_read_address(&periph2_to_ble_buffer,&p_data,tx_size);
if(*(p_data + 2)== 0x21)
UART2_WRITE((uint8_t *)数据,sizeof(数据),null);
}
user_buffer_release_items(&periph2_to_ble_buffer,长度);//清除缓冲区
}

在上面的代码中,收到请求,比较和响应被发送回外部设备但是我的问题是,如果它是空闲的一段时间(30秒)一些垃圾数据(00 00 ff 00)被添加到启动中下一个响应,并每30秒继续一次添加垃圾数据。我与UART1一起检查了同样的问题....问题是什么.....请帮助解决问题..

设备:
mt_dialog.
离线
最后一次露面:3个月2周前
职员
加入:2015-06-08 11:34
嗨Kavi,

嗨Kavi,

我没有看到30秒后触发此行为的内容(可以检查它是否与任何BLE活动相关,如果您实施安全性,也许是增加的计时器或安全性),并且由于我以来,还需要调试此问题无法从代码中了解这些附加字节的代码,它们可能是由您发送的响应填充的数据,也许设备睡眠状态,引脚正在切换,这就是为什么要换下垃圾,也许是为什么您没有正确定位指针,并且除了从您分配的缓冲区中,您将从其他内存位置发送数据。您必须调试您的设置和代码,以便找到附加数据的内容。

谢谢mt_dialog.

Chris0409.
离线
最后一次露面:3年11个月前
加入:2017-01-11 05:59
也许你可以重置

也许您可以重置设备,看看您是否会在启动时获取这些垃圾数据。如果您还可以在上电时获取JunkData,那么您的代码可能已重置某个时间