VisualStudioでシリアル送受信
mbedでシリアル通信部分を作成し、Teratermで送受信するのはよくやることであるが、大量のデータあるいは、もっと高速にするとなると、teratermの画面表示がボトルネックで追いつかなくなる。たとえば、PCの清野にもよるだろうが、1ms間隔でデータを受け取るなど。。
そこで、pyserialを使ってpythonで受信する方法があるが、これはこれで遠くに課題はないのだが、唯一止めたいときに、consoleでCTRL-Cを押してブレークしないといけないところ。また人にこうやってというにはpythonの導入から始まりどうやって使うかを教えてあげないといけないという敷居がある。そこで、アプリにできないかな、と考えた。
SerialPort
VisualStudio2022のそのままだと、SerialPortのToolが出てこない。ググった結果、プロジェクトにあるNugetパッケージの管理で追加でパッケージを入れればよいようだ。
まずは、何か適当なプロジェクトを作って、Nugetパッケージ管理を選ぶ
K64FからVisualStudioでシリアル受信する
受信だけできるようにするのにかなり手間取りました。
SerialPort
普通にインストールしたら、SerialPortというツールボックスが出てこない。
USBSerialの送受信
これ、もしかしたらK64Fだけかもしれないが、SDA経由のCOMだと普通に送受信できたのに、USBSerialだと、teratermでは送受信できるのにVisualStudioからだと、だんまり。
どうも、ハンドシェークが必要らしい(そういう意味じゃないのかもしれないが)
serialPort1.DtrEnable = true;
serialPort1.Open();
serialPort1.DiscardInBuffer();
ここに似た情報があった。
とりあえず、ここまで。
USBSerialの送信
mbed-os5のUSBSerialはボーレート設定も要らず、パソコン側のOS標準ドライバで動作するようでTargetマイコンを変えても常にポート番号が同じで使いやすい。しかしprintfが遅い
mbed-os5のAPIにあるUSBSerialでprintfを使うと1バイトごとパケットに乗せられる。1ms間隔でデータを送信したかったが、間隔が1msではなかったという結果があり、気づいた。下記コードで確認してみた。USBデコードできるオシロで確認すると1byte=1packetで送信されていた。
mbed-os5 USBSerial
エキスパートには当たり前だったかもしれないのだが、私は知らなかった。
mbed-os5のAPIにあるUSBSerialでは、printfの送信で1バイトごとパケットに乗せられる。1ms間隔でデータを送信したかったが、間隔が1msではなかったという結果があり、気づいた。下記コードで確認してみた。