久芯网

我用1K采样率采集的模拟电压在通过USB发送给电脑时丢失了部分数据。

avatar Boone301 提问时间: 2023-07-16 18:11:14 / 未解决
大家好:
我的芯片STM32F103C8T6
我用定时器产生1K的中断,中断里进行模拟采集并打开USB发生允许。
主程序里USB发送数据并关闭USB发生允许。
电脑上接收数据时有部分数据丢失了。
请高手指点一下。
谢谢
陆迅海
9个回答
  • avatar xmshao
    回答时间: 2023-07-16 18:29:00

    也就是说你现在1ms产生1批数据通过USB上传。你的USB传输估计是中断传输吧。我记得全速中断传输的查询间隔最短就是1ms。 如果这样就很难保证不丢数据。如果你将ADC生产数据的时间变长,比方变长3ms或5ms会怎么样呢?先锁定原因,再找解决办法。

  • avatar 废鱼
    回答时间: 2023-07-16 18:54:05

    建议读取数据SPI在外部做处理。定时器只提供计数基准,通过基准判断是否需要读取SPI数据。

  • avatar butterflyspring
    回答时间: 2023-07-16 19:23:34

    测试一下,中断里面执行的时间有多长。是否还有其他中断,这些时间如果过长有可能会少一次

  • avatar Boone301
    回答时间: 2023-07-16 19:54:53
    废鱼 发表于 2022-10-8 09:59
    建议读取数据SPI在外部做处理。定时器只提供计数基准,通过基准判断是否需要读取SPI数据。 ...

    是的,我也是怎么做的,貌似是usb发送给电脑出现了问题。

  • avatar 废鱼
    回答时间: 2023-07-16 20:12:27
    Boone301 发表于 2022-10-8 19:35
    是的,我也是怎么做的,貌似是usb发送给电脑出现了问题。

    如果用的是虚拟串口,在异常的时候,看一下设备管理器里面的串口设备是否正常,如果不正常,可能是因为USB驱动或者USB使用的问题。同时也可以增加串口打印,确认程序是正常的。可以正常的采集数据。另外看一下传输1K的空间,USB的底层驱动缓冲区是否比较小。建议开大一些。

  • avatar Boone301
    回答时间: 2023-07-16 20:38:49
    xmshao 发表于 2022-10-8 10:58
    也就是说你现在1ms产生1批数据通过USB上传。你的USB传输估计是中断传输吧。我记得全速中断传输的查询间隔最 ...

    非常同意你的观点,先要找到问题再解决问题,或者尝试一个新的思路,USB的传输不是有有缓冲的吗?没必要进行实时传输,有了缓冲为什么还会有数据丢失? 这是我觉得奇怪的地方。 下面是正常情况和数据丢失(数据丢失前通信异常)。

  • avatar Boone301
    回答时间: 2023-07-16 20:57:08
    Boone301 发表于 2022-10-9 20:36
    非常同意你的观点,先要找到问题再解决问题,或者尝试一个新的思路,USB的传输不是有有缓冲的吗?没必要进 ...

    正常情况有许多等待响应的帧,没有数据就是不响应,有数据在同步后就有数据跟上了,异常时没有等待发送的帧,如下图:

  • avatar Boone301
    回答时间: 2023-07-16 21:25:31
    废鱼 发表于 2022-10-9 16:12
    如果用的是虚拟串口,在异常的时候,看一下设备管理器里面的串口设备是否正常,如果不正常,可能是因为US ...

    这个不行的,受USB协议的约束。

  • avatar Boone301
    回答时间: 2023-07-16 21:57:34
    废鱼 发表于 2022-10-8 09:59
    建议读取数据SPI在外部做处理。定时器只提供计数基准,通过基准判断是否需要读取SPI数据。 ...

    你好! 我不是用的中断,我用的是批量,不过我也试过中断的了,并比较了中断和批量的区别。 1:中断确实如你说的1mS一次,在1mS之间没有许多的发送了,不过丢包的更多。 2:批量的在1mS间有许多发生。

会员中心 微信客服
客服
回到顶部