4 posts / 0 new
Last post
孙梦君
Offline
Last seen:4 days 12 hours ago
加入:2020-03-03 02:40
在广播中进行UART接收

hi 你好

我在使用DA14585的ble_app_peripheral开发串口接收功能,在广播时或者广播结束时,当串口有数据时进行接收,如果没有数据继续进行下一次广播。

我在广播中添加了串口接收uart_receive()函数进行接收,如果时刻保持有数据接收,程序可以正常运行,但是当串口没有数据时程序出现MOVS r0 r0 的错误,我该怎么避免

Device:
CYibin
Offline
Last seen:4 months 2 weeks ago
工作人员
加入:2017-12-14 02:48
你好,

你好,

关于你描述的应用场景,我有几点疑问:

1. 这个项目想实现什么功能,585 在这个项目中的功能是什么?

2. uart_receive() 函数的功能是使能串口接收,有几种方式:阻塞(block),中断(interrupt),DMA。你采用的是什么方式

3. 是否要实现通过广播的方式,将串口接收到的数据发送出去?

孙梦君
Offline
Last seen:4 days 12 hours ago
加入:2020-03-03 02:40
您好,谢谢您的回复

您好,谢谢您的回复

1 项目实现通过接收串口数据然后修改相应的广播数据等信息,585的功能作为从机进行无定向的广播

2目前使用的是分割(块)

3 是的,通过广播将串口接收到的数据加入到广播数据中广播出来,这部分我已实现,就是在调用串口接收时如果我没有立即输入数据程序会停止运行。我怀疑是串口接收的过程中进入了扩展睡眠模式,导致外围电源关闭,之后我关闭了睡眠模式的定义arch_ SLEEP_ OFF,但是仍然有上述问题存在,是否是分割模式无法使用在广播模式中?

CYibin
Offline
Last seen:4 months 2 weeks ago
工作人员
加入:2017-12-14 02:48
你好,

你好,

使用block(阻塞)的方式进行串口数据的接收时,程序会死等在一个地方,等待数据的接收完成。

这个会破坏系统的实时性,导致系统可能因为触发看门狗,无法响应蓝牙事件,消息队列爆掉而死机。

当等待的时间比较长时,建议应该采用中断,或者DMA的方式进行数据的接收,可参考SDK 中的 uart 例程的实现方式。

Br,Yibin