VB6用定时器查询的方式实现与USB设备通讯慢,如何解决?

2019-12-20 21:45发布

借鉴了别人的VB程序,调用了API来实现与下位机USB通讯(STM32F103)。
我现在是用VB中tmr定时器,以1ms的速度(VB6定时间最小1ms)去查询USB设备,但是调试到一条指令下发至返回有64ms!!!!!!一直找不到哪里花去了这么多时间。


注:USB设备是STM32F103,以PLL/1.5的速度来描述USB速度,可以说肯定可以保证VB6中1ms的速度。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
24条回答
worksnfkpynn99
1楼-- · 2019-12-21 03:15
 精彩回答 2  元偷偷看……
worksnfkpynn99
2楼-- · 2019-12-21 03:40

接收:
  1. void EP1_OUT_Callback(void)
  2. {
  3.   if(USB_Status==0)
  4.   {
  5.     USB_SIL_Read(EP1_OUT, Receive_Buffer);
  6.     GetUSBComm_Flag = 1;
  7.     USB_Status=1;
  8.   }
  9. }
复制代码发送:
  1.     if(ReplyPC_Flag)
  2.     {
  3.         USB_SIL_Write(EP1_IN, (uint8_t*) Send_Buffer, 64);
  4.         SetEPTxValid(ENDP1);
  5.         ReplyPC_Flag = 0;
  6.     }
复制代码
  1.     RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);        //USB时钟 1Div5
  2.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE);
  3.     USB_Init();
复制代码我可以直接向PC发送64Byte的数据吗?PC端如何获取?
lcgforward
3楼-- · 2019-12-21 06:43
你定的是1MS,但操作系统最给出的最小是10MS。
lcgforward
4楼-- · 2019-12-21 08:08
VB的定时器不能精确定时,一般是在65MS左右。系统是这样的,你可能要另寻办法了。
zxq6
5楼-- · 2019-12-21 08:26
VB搞usb,确实速度不行,有一个办法,可以用while(1)循环。只是界面不响应操作,除非增加doevents,不过那样效率也会下降。
最好的办法是用多线程。
只是VB对多线程的支持也很有限
所以现在都很少用VB,改C#了。
worksnfkpynn99
6楼-- · 2019-12-21 13:37
 精彩回答 2  元偷偷看……

一周热门 更多>