想测试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