CC2541串口接收
时间:10-02
整理:3721RD
点击:
在采样SimpleBLECentral调试CC2541串口的时候,按例子初始化完成后,出现接收PC发来数据异常的情况,如下
1.串口初始化完成后发送数据至PC串口助手正常
2.在串口回调函数处加入Debug信息,发现在PC未向CC2541发送数据时,回调函数也会被反复调用,为什么?
3.在接收PC端串口助手发送来的数据时无法1次接收完全,如附件(pic.jgp)所示(暂时无法插入图片就上传附件)
4.如果在读取串口数据前延时(测试中在读数据前加函数将event值打印至串口助手)则可正常读出发来数据如附件(pic.jpg)所示
5.请问如何才能保证HAL_UART_RX_TIMEOUT事件出现时完整读出发送来的测试数据(见附件pic.jpg)?
谢谢
请问楼主解决了吗?我在使用它的串口回调函数时,也遇到同样的问题,不知道怎么解决、请楼主指点一下
void NpiSerialCallback( uint8 port, uint8 events )
{ (void)port;//加个 (void),是未了避免编译告警,明确告诉缓冲区不用理会这个变量 uint8 temp; if(NPI_RxBufLen() > 0) { //读取读取串口缓冲区数据,释放串口数据 NPI_ReadTransport(&temp,1); //把收到的数据发送到串口-实现回环 NPI_WriteTransport(&temp, 1); } }
强烈建议采用上述单个字节接收的方法,而不是依赖超时之类的处理。自己定义一个缓冲区,把接收的字符存储起来,然后利用状态机进行处理。
还没找出问题的所在。我在测试的时候发现在之前输出几行debug信息,接收就会正常。所以就用了个不专业的方法先对付着。
1. 回调状态显示时间溢出或是接收buf写满后,在读前先延时,然后再去读取
多谢你的指点,接收的时候发现回调是会反复的调用直到读取数据。
现在的做法是超时或是buf写满在读前加个延时就正确了但是不知道为什么