メインコンテンツに移動

VisualStudioでシリアル送受信

mbedでシリアル通信部分を作成し、Teratermで送受信するのはよくやることであるが、大量のデータあるいは、もっと高速にするとなると、teratermの画面表示がボトルネックで追いつかなくなる。たとえば、PCの清野にもよるだろうが、1ms間隔でデータを受け取るなど。。

そこで、pyserialを使ってpythonで受信する方法があるが、これはこれで遠くに課題はないのだが、唯一止めたいときに、consoleでCTRL-Cを押してブレークしないといけないところ。また人にこうやってというにはpythonの導入から始まりどうやって使うかを教えてあげないといけないという敷居がある。そこで、アプリにできないかな、と考えた。

SerialPort

VisualStudio2022のそのままだと、SerialPortのToolが出てこない。ググった結果、プロジェクトにあるNugetパッケージの管理で追加でパッケージを入れればよいようだ。

まずは、何か適当なプロジェクトを作って、Nugetパッケージ管理を選ぶ

 

参照タブで、Serialportを入れると、System.IOなとかが出てくるのでこれをインストールする。

それで、そのあと別のプロジェクトを作り直す(そのプロジェクトのままではいつまでたってもツールが出てこなかったので)と出てくるようになる。

mbed送信設定

mbedのUSBSerialを使用して、ターゲットMCUのUSB機能を使用するようにすることで、高速に送受信することができる。USBSerialはCDCクラスになるようだが、メンバ関数のsendを使える。send関数だと連続したデータがpayload埋めてくれる(printfの場合は1パケット内に1byteの送信となる。会社のプロ穴で確かめた。ターゲットはK64F)

#include "USBSerial.h"

Ticker tb;
USBSerial usbserial;
volatile int cnt=0,loop_cnt=0;
volatile int tb_flag=0;

void tbi(){
    tb_flag=1;
    cnt++;
}
int main()
{
    int buf,val,tmp;
    char buff[32];

    tb.attach( &tbi , 0.001);
    cnt=0;loop_cnt=0;
    while (true) {
        while( tb_flag==0 );
        tb_flag=0;
        tmp = sprintf(buff , "%5d,%5d,1,2,3,4\n\r",cnt,loop_cnt++);
        usbserial.send((uint8_t *)buff,strlen(buff));
    }
}

受信部

 

コメントを追加

Plain text

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