USBSerialの送信

ee9king に投稿

mbed-os5のUSBSerialはボーレート設定も要らず、パソコン側のOS標準ドライバで動作するようでTargetマイコンを変えても常にポート番号が同じで使いやすい。しかしprintfが遅い

mbed-os5のAPIにあるUSBSerialでprintfを使うと1バイトごとパケットに乗せられる。1ms間隔でデータを送信したかったが、間隔が1msではなかったという結果があり、気づいた。下記コードで確認してみた。USBデコードできるオシロで確認すると1byte=1packetで送信されていた。

#include "mbed.h"
#include "USBSerial.h"
USBSerial usbserial;
Ticker tbase;
SPI spi(D11,D12,D13);

volatile int tb_reach=0;

void tbase_t(void){
    tb_reach=0;
}
int main(){
    spi.format(8,3);
    spi.frequency(2000000);

    tbase.attach( &tbase_t , 0.001 );
    int nn=0;
    while (true) {
        spi.write(0x55);
        usbserial.printf("%020d\r\n",nn++);
        while( tb_reach );
        tb_reach=1;
    }
}

mbed-osのAPIでは、USBSerialの下位層にあるUSBCDCクラス関数が継承されているようだ。

https://os.mbed.com/docs/mbed-os/v5.15/apis/usbserial.html

そこで、送信部分を下記のように書き換えたら、データが1パケットで送信できるようになった。

int tmp;
char buff[32];
tmp = sprintf(buff , "%020d\r\n",nn++ );
usbserial.send((uint8_t *)buff,strlen(buff));

 

コメントを追加

Plain text

  • HTMLタグは利用できません。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。
  • 行と段落は自動的に折り返されます。