为什么串口透传例程里,接收串口中断这么迟钝的

串口接收数据的时候,总是很难进入到中断处理函数,发好几次数据可能只有一次能触发中断响应的,有办法提高响应速度吗?

您好,您是如何判断只有少数情况会触发中断的。默认例程里可能会在两处代码触发接收中断,一处是数据量达到触发点,另一处是接收超时。接收超时要求FIFO中至少留有一个字节以供硬件判断超时。

如果需要每次接收中断都要进超时,可以参考下列博客,在数据量达到触发点时只接收n-1个数据。

CH582m串口透传程序 - JayWell - 博客园 (cnblogs.com)


因为一进入中断函数就会打印,但是发送了很多次数据都没有反应,手机也没有收到信息。程序都是进入超时中断,没有进入触发点中断。

接收超时的条件是什么,要设置超时的时间吗?

我用的是蓝牙串口透传例程,触发点是在这里设置吗?


app_drv_fifo_result_t

app_drv_fifo_init(app_drv_fifo_t *fifo, uint8_t *buffer, uint16_t buffer_size)

{

    if(buffer_size == 0)

    {

        return APP_DRV_FIFO_RESULT_LENGTH_ERROR;

    }

    if(0 != ((buffer_size) & (buffer_size - 1)))

    {

        return APP_DRV_FIFO_RESULT_LENGTH_ERROR;

    }

    fifo->begin = 0;

    fifo->end = 0;

    fifo->data = buffer;

    fifo->size = buffer_size;

    fifo->size_mask = buffer_size - 1;

    return APP_DRV_FIFO_RESULT_SUCCESS;

}




BLE_UART的例程下面有一个Readme,参考一下,使用串口3进行数据收发,同时接串口1打印观察。

连接BLE调试助手进行蓝牙的数据透传,无问题。


重新解压了一个程序也不行,发20次只能收到3次

image.png

ef04560eb0e59ba2b6fb3f66373f8e1.jpg






1、确认是使用的官方EVT,官方开发板进行测试;

2、使用官方的例程不做修改进行测试,官方可以提供出来的程序,是不会出现问题的,这也是经过我们测试的;

3、发送数据的时候先发送一个字节,注意程序中是有一份Readme,请仔细参数,相应的使用方法是提供出来的。


只有登录才能回复,可以选择微信账号登录