2019年10月6日日曜日

stm32(NUCLEO-F767ZI)でUDP通信する!

stm32シリーズ第二弾ということで今回はUDP通信です。

nucleoボードの中にはEthernet端子がついていているものもあり、
お値段もピンきりではありますが、NUCLEO-F767ZIは3000円を切って購入できます。
そのくせメモリ豊富で動作周波数もなかなか高いのでとても夢広がる(?)マイコンボードです。

...ということでRTOSとLWIPもりもりで今回はお送りします!(笑)

まず毎度恒例動作環境です。

  • Windows 10 (ver 1903 build 18362.356)
  • STM32CubeMX (ver 5.3.0)
  • Atollic TrueSTUDIO® for STM32, Built on Eclipse Neon.1a.(ver 9.3.0 build id 20190212-0734)
  • 使用ボード: NUCLEO-F767ZI

まずはcubeMXでクロック周りやRTOSやLWIPなどを設定してください。
STM32でEthernetするっ!様のサイトがとっても参考になりました!
この場を借りて感謝申し上げますm(_ _)m

お次はソースコードです。
私の拙いコード(githubに繋がります)を用いてください。

このソースの肝はudp_easy_io.hとudp_easy_io.cです。
こいつらはLWIPの処理を丸めた関数群です。基本的には

  • 1.UDP_EASY_IO_init()関数でポート設定とアドレス設定をする。(初期化)
  • 2.自分のさせたい処理用(main関数に書きたい処理)に新しくRTOSでタスクを始動させる
  • 3.そのタスクの中でUDP_EASY_IO_write()関数を使って送信するなり、UDP_EASY_IO_read_char_prt()関数を使って受信するなりごにょごにょする。
といった感じで使います。
詳しくは私の拙いコードのなかにあるmain.cをご参照くださいませ。

あとはビルドして書き込んでPCとLANケーブル直挿ししてマイコン側の準備は完了!(ざっくり

今度はIPアドレス設定です。
cubeMXでDHCPに設定してarpコマンドからIPアドレス特定するとかでもいいのですが、
めんどくさい(おい)ので、今回の例では固定IPにしています。

まず、タスクバーのネットワークアイコンを右クリックして、出てきたメニューのなかにある「ネットワークとインターネットの設定を開く」をクリック

つぎに、「アダプターのオプションを変更する」をクリック
つぎに、マイコンと接続しているアダプタ以外(ここ大事)を右クリックで一覧にあるプロパティを選択

あとはネット共有をマイコンと接続してるアダプタに指定してあげるとな。

これでwindows側の設定は完了です。
コマンドプロンプトを開いてcubemxで設定したIPアドレスに向けてpingを送ってみて応答確認してください。
応答が...あるッ!!
こんどはUDPのパケットを送るツールの準備です。
Pythonとかでスクリプト書くなり好きにしてください(なげやり
私はUDP/IPテストツールを使わせていただきました。
こちらもこの場を借りて感謝申し上げますm(_ _)m

んで、メッセージを受信したり送ったりしてみます。
なお、今回の私の拙いコードではUDP通信で受信した文字列をUART経由で出力される仕様になっています。ボーレートは115200です。

んまぁこんな感じでごにょごにょすると↓の動画のようになってくれるはず??

お疲れさまでした!!



イーサネット通信は通信コストはいくらか掛かりますが、無線LAN子機を用いたりすることで容易に無線化できたり、IoTできたりするわけです。個人的に美味しい要素は

  • データをやりとりする上でデータの区切りがはっきりしている
  • 差動線通信であったりアダプタがぬけにくいため、不安要素がいくらか拭える
といったところでしょうかね。
あと今回はLWIPもですが、RTOSもstm32ではお初のテーマでした。
いろいろ調べていくうちにCMSIS2ってFreeRTOSをラッピングしてるだけだと知り、
そのままFreeRTOSのAPIを叩いちゃいました(笑)
だって情報量がFreeRTOSのほうが多いもん...(切実

こんな感じで夢が広がるマイコンボード、皆さんどうでしょう?(〆が雑

2 件のコメント:

  1. 紹介されているNUCLEO-F767ZIを購入して、このページを参考にして遊んでみようと思います!

    返信削除
  2. 嬉しいですねぇ
    ハイスペマイコンなので可能性いっぱい

    話は変わりますが、ラズパイPicoがくっっそ有能と聞いたのでいつかあそんでみたいところです。

    返信削除