#usb速度远低于正常速度
以下是一些运行截图和代码:
我采用的是stm32F103C8T6芯片,并且在USBlyser中可以查看为USB2.0
以下是部分代码贴图:
上位机关键代码如下:
m_xfer = libusb_alloc_transfer(0);
libusb_fill_bulk_transfer(m_xfer,
dev_handle,
EP1ADDR, // Endpoint ID
recv_buf,
RECV_LEN,
WinUSBDriver::completeCallback,
this,
0
);
void LIBUSB_CALL WinUSBDriver::completeCallback(libusb_transfer *xfer) {
WinUSBDriver *driver = (WinUSBDriver *)xfer->user_data;
switch (xfer->status) {
case LIBUSB_TRANSFER_COMPLETED:
if (xfer->actual_length > 0) {
// 并行处理数据接收和处理
#pragma omp parallel sections
{
#pragma omp section
{
// 更新总字节数和传输速率
driver->totalBytesReceived += xfer->actual_length;
auto current_time = std::chrono::high_resolution_clock::now();
auto time_elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(current_time - driver->last_transfer_time).count();
if (time_elapsed > 0) {
driver->speed = static_cast<double>(xfer->actual_length/1024) / (time_elapsed / 1000.0); // 计算速度
}
driver->last_transfer_time = current_time;
}
qDebug()<<"speed:"<<driver->speed;
#pragma omp section
{
// 处理接收到的数据
memcpy(driver->recv_buf_tmp, xfer->buffer, xfer->actual_length);
emit driver->recvSignals(driver->recv_buf_tmp, driver->recv_len);
}
}
}
break;
以下是下位机关键代码:
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
/*origin
char str[] = "hello stm32f3c8t6\r\n";
CDC_Transmit_FS(str,strlen(str));
HAL_Delay(1);
origin*/
//update
char str[1024]; // ?????1024??
int index = 0;
for (int i = 0; i <= 1024; i++)
{
index += sprintf(str + index, "%d", i); //
}
str[1023] = '\0'; //
CDC_Transmit_FS((uint8_t *)str, 1024); //
HAL_Delay(1); //
//update
}