C++ 测试USB 串口速率

想测试STM32F429 和linux USB 串口速率,网上讲了各种软件好像都不能用,wireshark 的USB cap 也不管用,干脆自己写一个程序来测吧!

 关于测试程序执行时间的方法在测试串口时也不管用(clock,time 等等),需要使用一个线程来测:

#include "serialPort.hpp"
#include <pthread.h>
#include <iostream>
char buff[512];
long counter;
const char *dev  = "/dev/ttyS36";
void * time_task(void * arg) {
  while (true)
  { 
  cout<<"baud rate:"<<counter*8/1024.0<<"Kbps"<<endl;
  counter=0;
  sleep(1);
  }
   return 0;
}
int main()
{ 
   pthread_t threadId;
    pthread_create(&threadId, NULL, &time_task, NULL);
serialPort myserial;
int i,nread,nwrite;
  cout<<"serialPort Test"<<endl;
  myserial.OpenPort(dev);
  myserial.set_speed(115200);
  myserial.set_Parity(8,1,'N');
  counter=0;
  while (true)
  {
//	  nwrite = myserial.writeBuffer( buff, 8);
  nread = myserial.readBuffer( buff, 512);  
  counter=counter+nread;
 
  }
}

serialPort 是自己写的一个类,在我前面的博文中有介绍。需要的可以私信。

stm32 上的 mbed 程序

/*
 * Copyright (c) 2006-2020 Arm Limited and affiliates.
 * SPDX-License-Identifier: Apache-2.0
 */
#include "mbed.h"
#include "USBCDC.h"

USBCDC cdc;

int main(void)
{
        uint8_t buf[512];
        for (int i=0;i<512;i++)
          buf[i]=0x30;
          buf[510]=0x0d;
          buf[511]=0x0a;
    while (1) {
     
        cdc.send(buf, 512);
        ThisThread::sleep_for(1);
    }
}

实际测试的结果为

就这样吧,大约4Mbps.块长大一点,速率高许多.

      如果要进一步提高USB 的速率,要选择USB 2.0 HS 模式。需要外接USB HS phy ,比如USB3300 ,目前STM32F7x3 和 STM32F730.支持内置的USB HS phy。 mbed OS 目前不支持 USB HS

猜你喜欢

转载自blog.csdn.net/yaojiawan/article/details/108790475