新手,求高手不吝赐教啊,用的是keil软件,Alientek-Mini-STM32开发板,STM32F103RC芯片;
本人用usb虚拟串口与PC机进行通讯,在ST官方例程Virtual_Com_Port_Loopback程序上,只让采集到的AD数据发送到PC机上进行显示,但是速度只有150KByte/s,和网上普遍说的可以达到500、600、800差很多,看到很多说改成bulk双缓冲,增加USB缓冲区的大小
[mw_shl_code=c,true]#define ENDP0_RXADDR (0x40)
#define ENDP0_TXADDR (0x80)
/* EP1 */
/* tx buffer base address */
#define ENDP1_TXADDR (0xC0)
#define ENDP2_TXADDR (0x500)
#define ENDP3_RXADDR (0x540)
[/mw_shl_code]
我用的ENDP1端将数据发送到PC机上,将ENDP1与ENDP2 TXADDR之间的缓冲区增加到1024,传输速度还是没有改变;
还有就是网上所说的BULK双缓冲模式,到底要怎么更改啊,将AD采集到的数据怎么放到这两个缓冲区
[mw_shl_code=c,true] SetEPType(ENDP1, EP_BULK);
SetEPDoubleBuff(ENDP1);
SetEPDblBuffAddr(ENDP1, ENDP0_BUF0Addr, ENDP1_BUF1Addr);
SetEPDblBuffCount(ENDP1, EP_DBUF_OUT,
VIRTUAL_COM_PORT_DATA_SIZE);
ClearDTOG_RX(ENDP1);
ClearDTOG_TX(ENDP1);
ToggleDTOG_TX(ENDP1);
SetEPRxStatus(ENDP1, EP_RX_DIS);
SetEPTxStatus(ENDP1, EP_TX_NAK);
[/mw_shl_code]
其中ENDP0_BUF0Addr、EP_DBUF_OUT具体要怎么定义,怎么将AD采集的数据放到这两个缓冲区,怎么判断从哪个缓冲区将数据发送到PC机
还有就是AD数据传输到PC机的程序需要更改吗
[mw_shl_code=c,true]for(i=0;i<32;i++)
ADC_CV=Get_Adc(1);
Sdata[0]=ADC_CV>>8;
Sdata[1]=ADC_CV&0xFF;
Receive_Buffer[2*i]=Sdata[0];
Receive_Buffer[2*i+1]=Sdata[1];
}
CDC_Send_DATA ((unsigned char*)Receive_Buffer,Receive_length);
[/mw_shl_code]
|