趣味のマイコンいじり

安価なマイコンを利用して作成したアプリの紹介です。

STM32F407VE/G ボードでの MicroPython

<STM32F407VE/G ボードの概要>

    手持ちのSTM32F407VE/Gのチップを搭載したものは次の2種類で、
    ボード上へのMicroPythonの導入コードも紹介されていましたので
    調べて見ました。その時の状況は次の様なものでした。

 f:id:I_Satoh:20200120092144p:plain

[STM32F407VEボード]

  1.搭載されているCPUはSTM32F407VET6 (512kB Flash,
         192+4kB SRAM)
  2.ボードに付加されているもの
      ミニUSBポート、SDカードスロット、NRF2401ソケット、
         フラッシュメモリ、電池ケース
  3.使用電源電圧1.8V~3.6V
  4.ボードサイズ 73mmx85mm

[STM32F407VGボード]

  1.搭載されているCPUはSTM32F407VGT6 (1MB Flash,
         192+4kB SRAM)
  2.ボードに付加されているもの
       マイクロUSBポート
  3.使用電源電圧1.8V~3.6V
  4.ボードサイズ 46mmx58mm

 [解説ビデオ]

  


<関連資料>

    1.STM32F407VEボード
            URL : https://github.com/mcauser/BLACK_F407VE/blob/master/docs/STM32F407VET6_schematics.pdf

                      https://os.mbed.com/users/hudakz/code/STM32F407VET6_Hello/shortlog/

    2.STM32F407VEボードへのMicroPythonの導入
             URL : https://github.com/mcauser/BLACK_F407VE

    3.STM32F407VGボード
             URL : http://dubstylee.net/v/diy-more-stm32f407vgt6/

     4.STM32F407GVボードへのMicroPythonの導入
              URL : https://github.com/BLavery/STM32F407VG-Micropython

<作業内容>

    STM32F407VE/GボードへMicroPytnonを導入する時の作業は次の
      ものでした。

       1.Linuxでのファームウェアの作成
       2.MicroPythonへ対応するためのボード改造方法の確認
       3.ファームウェアの書き込み方法の確認
       4.コード作成方法の確認
       5.SD交換のみでプログラムの変更ができるのを確認

       結果としては、Linux上のコンパイルおよび書き込み等はWeb上の
       記事を参照しながら問題無く行えました。改造に関しては、
       STM32F407VEボードでは、当初、基板上のリセットのみではSDの
       交換が上手く行かなかったのですが、USB端子処理をPyboardと同じ
       にする事(プルアップ抵抗を外す)と上手く行くようになりました。
       STM32F407VGのボードは、SDカードの対応が無かったのですが、
       公開されていたボード対応のコードの一部を変更する事により対応
       できる様になりました。SDカードをマウントすると、コード用の
       領域が今までのRAM領域の制限から、SDカードの容量に変更される
       ため、コードサイズの問題で悩む事はなくなった様です。(本格的な
       コードを作成では未確認ですが) いずれにしても、速度を気にしな
       ければ、SDカードを利用する事により、ほぼ自由にコードの作成が
       できる様になった様でとても良いかと思っています。

  [ファームウェアコンパイル]

   ファームウェアコンパイルは、手持ちのPCにインストールしている
   VMLinux(Ubuntu)を使って行いました。今のLinuxの操作感はWindowと
   良く似ていて、余りLinuxに詳しく無い私でも問題無く行う事ができました。
   また、コンパイル出力もネットを通じての共有がとても便利で、簡単に
   受け渡しができました。作業の流れとしては、以下の順番で行いました。


     <ソースコードの入手先>
        MicorPython : http://micropython.org/download

        STM32F407VE : https://github.com/mcauser/BLACK_F407VE

        STM32F407VG : https://github.com/BLavery/STM32F407VG-Micropython

     <STM32F407VE/G ボードフォルダのMicroPythonコードへのコピー>
        MicroPythonコードコピー先フォルダ : micropython/ports/stm32/boards/
        各ボード用コードのコピー元フォルダ :
               STM32F407VEは「BLACK_F407VE-master」
               STM32F407VGは「STM32F407」
     <「arm cross compiler」 のインストール>
        Linuxコマンドで
        wget https://launchpad.net/gcc-arm-embedded/5.0/5-2016-q3-update/+download/gcc-arm-none-eabi-5_4-2016q3-20160926-linux.tar.bz2
        tar xvfj gcc-arm-none-eabi-5_4-2016q3-20160926-linux.tar.bz2
        sudo apt-get -y install lib32z1 lib32ncurses5
     <ファームウェアコンパイル
        先に「mpy-cross」をコンパイル(Linuxコマンドで)
        cd micropython/mpy-cross
        make
        次にファームウェア全体をコンパイル
        cd micropython/ports/stm32/
        make BOARD=xxxxxxx CROSS_COMPILE=~/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-
        xxxxxxx :
           STM32F407VE では「BLACK_F407VE-master」
           STM32F407VG では「STM32F407」
     <コンパイル出力の取り出し>
        cd build-xxxxxxx/
             Hex output : firmware.hex
             Dfu output : firmware.dfu
                xxxxxx はファームウェアコンパイルのものと同じ

[ボードの改造]

  STM32F407VのMicroPythonはPyboardが雛形で、STM32F407VEの
  ボードでは、USBの端子処理によりボード上のリセットだけではUSBの
  切り替えに対応できていませんでした。 (ボード電源のオフ/オンが
  必要) その為、USBの端子処理を雛形のPyboardに合わせました。また、
  STM32F407VGにはSDカードの対応がされていない為、SDカードの
  対応ができる様にしたものも用意しました。

   <STM32F407VEボード>
   
      f:id:I_Satoh:20200120124442p:plain

      USB端子処理をPyboardと同じにして、ボード上のリセットのみで
      USBの切り替えを行える様にする為です。

   <STM32F407VGボード>
      f:id:I_Satoh:20200120124650p:plain 

    f:id:I_Satoh:20200120124753p:plain

      f:id:I_Satoh:20200120124950p:plain

      STM32F407VGボードにはSDカードのスロットが無い為、これを
      取り付けてPyboardと同じ様にする為です。

 [ファームウェアの書き込み]

   ファームウェアの書き込みを行う時は、まず、ボードの設定をDFU
   モードにします。
     f:id:I_Satoh:20200114202004p:plain

      f:id:I_Satoh:20200114202124p:plain

    書き込みツールは2種類有り、hex or bin ファイルの時は次のものが
    有効です。
      f:id:I_Satoh:20200120130953p:plain

 

     dfu ファイルの時は次のものが有効です。hex or bin を dfu ファイルに
     変換するツールがこのツールをインストールする時に付いていて、
     それを利用して hex or bin のファイルに対応する事も可能です。

      f:id:I_Satoh:20200120131137p:plain

  [SDカードの初期化]

    SDカードを利用する場合、SDカードに初期ファイルを書き込む必要が
    有ります。作業的には、SDカードなしで読みだ出せる内容をSDカードに
    コピーする事になりますが、一旦SDカード無しの状態で起動し、それを
    PC上に読み出して、次にSDカードを挿入した状態にしてSDカードに
    コピーする事で対応可能です。

    f:id:I_Satoh:20200120131449p:plain

[コードの開発]

   コードの開発はIDE(Thonnyがお勧め)を用いて行う事ができますが、
   SDカードに対応した場合、シリアルポート用のターミナルプログラム
 (Tera Term等)とエディタでSDカードの内容を編集する事によっても
   行えます。

     f:id:I_Satoh:20200120131809p:plain

      SDカードの内容に関しては、次の方法でも有効です。

      f:id:I_Satoh:20200120131957p:plain

       CPUを中断状態にすると、SDカードの内容は他のPC上の
       ファイルと同様に扱えます。 (編集、追加、削除が可能) また、
       REPL用にターミナルソフトを使うのは、デバッグ時のエラー
       状態等を表示させたりCTRL+Cによるプログラムの中断や
       DTRL+Dによるプログラムの起動を行う為です。

[SD交換によるコードの交換]

   SDカード内にはMicroPythonのコードのみで、STM32(Pyboard)系
   では同じコードで有る為、SDを交換すれば、そのプログラムも交換
   できます。

      f:id:I_Satoh:20200120132243p:plain

[ファームウェアと関連資料]

   こちらでコンパイルしたファームウェアと関連資料は次のURLから
   ダウンロード可能です。

      Code download URL : https://drive.google.com/file/d/1FaJeYM9XlG2brANwQMq2FqrOrtKjNFVN/view?usp=sharing