Uart2 Rx中断问题

⚠️
你好。。谢谢你来参加论坛。令人兴奋的消息!我们现在正在移动到我们的新论坛平台,将提供更好的功能,并包含在主对话网站的过程。所有帖子和账号都已迁移。我们现在只接受新论坛上的流量-请在//www.wsdof.com/support. 我们将在未来几天内修复bug/优化搜索和标记。
3个职位/0个新职位
最后一篇文章
卡维
离线
最后一次见到:3年11个月前
已加入:2017-03-14 07:51
Uart2 Rx中断问题

你好,
两个不同的设备连接到一个ble模块的两个UART。无论何时通过UART2从外部设备接收到发送到ble模块的请求,都会对接收到的请求进行处理,并将响应发送回外部设备。在DSPS中,主机示例程序uart2\u rec\u data\u avail\u isr()将把来自uart2的数据放入缓冲区。收到所有预期字符后,uart2\u rec\u data\u avail\u isr()将调用回调。所以我在uart2\u rec\u data\u avail\u isr()中做了一些更改来接收数据。

uart1的端口号-0
UART1 TX-4引脚
UART1 RX-5引脚

uart2的端口号-0
UART1 TX-2引脚
UART1 RX-3引脚

静态无效uart2\u rec\u data\u avail\u isr(无效)
{
void(*rx\u callback)(uint8\u t,uint32\u t)=空;
uint32\u t rcv\u bytes=0;
while(uart2\u data\u rdy\u getf())
{
*通用异步收发器2_环境rx.bufptr=uart2_rxdata_getf();
通用异步收发器2_环境接收尺寸--;
rcv_bytes++;
通用异步收发器2_环境rx.bufptr++;
}
if(rcv\u字节)
{
通用异步收发器2_环境rx.bufptr=空;
rx\u回调=uart2_环境接收回调;
如果(rx)返回!=空)
{
通用异步收发器2_环境接收回调=空;
rx\回调(UART\ U STATUS\ U OK,rcv\ U bytes);
}
}
其他的
{
uart2\接收\数据\可用\设置(1);
}

}

静态无效uart2\u rx\u回调(uint8\u t res,uint32\u t read\u size)
{
uint8\u t*periph2\u rx\u ptr=空;
开关(res)
{
案例UART\状态\正常:
用户\u periph2 \u push(&periph2 \u rx \u ptr,read \u size);
中断;
案例UART\状态\初始化:
if(user\u buffer\u write\u check(&periph2\u to\u ble\u buffer,&periph2\u rx\u ptr,rx\u CALLBACK\u SIZE)!=RX(大小)
{
ASSERT_ERROR(0);//缓冲区太小
}
中断;
违约:
ASSERT_ERROR(0);//错误:从未知源调用回调
}
uart2\u read(外设2\u rx\u ptr,读取大小,uart2\u rx\u回调);
}

静态void user\u periph2\u push(uint8\u t**wrdata,uint16\u t write\u amount)
{
静态单位长度;
user\u buffer\u cfm\u write(&periph2\u to\u ble\u buffer,write\u amount);
if(user\u buffer\u write\u check(&periph2\u to\u ble\u buffer,wrdata,RX\u CALLBACK\u SIZE)!=RX(大小)
{
断言警告(0);
}
if((length=user\u buffer\u item\u count(&periph2\u to \u ble\u buffer))>0)
{
uint8\u t*p\u data=NULL;
长度=用户\u缓冲区\u读取\u地址(&periph2\u到\u缓冲区,&p\u数据,TX\u大小);
如果(*(p\U数据+2)==0x21)
uart2_write((uint8_t*)数据,sizeof(data),NULL);
}
user_buffer_release_items(&periph2_to_ble_buffer,length);//清除缓冲区
}

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

设备:
MT\u对话框
离线
最后一次见到:1个月6天前
工作人员
已加入:2015-06-08 11:34
嗨,卡维,

嗨,卡维,

我看不出什么会在30秒后触发这种行为(你可以检查它是否与任何BLE活动有关,如果你实现了安全性,可能是一个额外的计时器或安全性),而且这个问题需要调试,因为我无法从代码中了解这些额外的字节来自何处,它们可能是由您正在发送的响应填充的数据,可能设备进入睡眠状态,管脚正在切换,这就是为什么您会收到垃圾邮件,可能您没有正确地定位指针,并且您从其他内存位置发送数据,除了从您分配的缓冲区。您将不得不调试您的设置和代码,以便找到那些附加的数据是什么。

谢谢你的对话

克里斯0409
离线
最后一次见到:3年9个月前
已加入:2017-01-11 05:59
也许你可以重新设置

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