趣味のマイコンいじり

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

STM32F103C8 ボード上での Arduino IDE の利用

<STM32F103C8ボードの概要>

   購入したSTM32F103C8のチップを搭載したものは次のもので、前にも
    Arduinoでの対応状況を調べたのですが、状況が変わっている様なので  
   再度調べて見ました。なお、今回のArduinoIDEでは書き込みツール
   として数種類が用意されていましたので、その中で手持ちのUNOの流用
   が可能はシリアル形式と、メモリの消費が2KB以下の「HID bootloader」
   を取り上げました。その時の状況は次の様なものでした。

f:id:I_Satoh:20200131102233p:plain

 [STM32F103C8ボード]

    1.CPU : STM32F103C8T6, 32bits, ARM Cortex-M3
            (この青い基板のものは Blue pill と呼ばれている様です。)
    2.ROM 64Kバイト/RAM 20Kバイト
    3.最大動作周波数 : 72MHz
 4.CPU電源電圧 : 2.0-3.3V

 [Arduino IDEインターフェイス対応状況]

    1.STM32CubeProgrammer(SWD) --- ST-Link (動作は確認)
    2.STM32CubeProgrammer(Serial) --- 今回の調査対象
    3.HID Bootloader --- 今回の調査対象
    4.Maple Bootloader (動作は確認)

 [調査内容のビデオ]

   


 
<関連資料>

    1.回路図
            URL : https://github.com/dhylands/stm32-test/blob/master/board-STM32F103-Mini/STM32F103C8T6-Schematic.pdf

<調査内容>

   今回の導入状況の検討目標は次のものとしました。

       1.コードの作成から書き込みへの操作が連続して行えるかを確認
       2.コード書き込みに関しては、特別な追加デバイス不要な手段が
              有るかどうかを確認
       3.作成したコードがボード上で問題無く動作する事を確認

      結果としては、以前のものよりかなり使い易くなっていると思い
      ました。なお、作成したコードの書き込みに関しては、最も便利
      なのがST-Linkによるものでしたが、シリアル(USB to TTL-UART)
      による方法でも、新しいコードをコンパイルする前にボートの
      リセットを行うだけで良く、配線が多少複雑になるだけで、
      ST-Linkと同様に便利な方法だと思いました。ブートローダによる
      方法に関しては、HIDではターゲットのプログラムを書き込んで
      実行すると、USBの接続が切れ、BOOTピンの操作とリセット
      スイッチの操作のみで再度ブートプログラムを起動しても、
      USBの接続が切れたままでPC側のドライバーが再インストール
      されませんでした。その為、BOOTピンの操作の後、一旦ボードの
      電源をオフ/オンして再起動する必要が有り、操作が多少不便でした。
    (USB端子も壊れそう)そこで、CPUをリセットするとUSB端子で
      プルアップされている部分をGNDに落とす回路を付けて、ボードの
      リセットのみでもUSBが再接続される様にしました。ブートローダ
      方式として他にMapleが有りましたが、こちらでは同じ問題は
      有りませんでしたが、その代わりにIDEが書き込みを始める直前に
      ボートのリセットを行う必要が有りました。またフラッシュメモリ
      消費がMapleでは7%程度大きくなっていた為、そこで検討は
       止めました。いずれにしても、以前に比べて、ArduinoIDEが利用
       しやすくなっている事が良く判りました。UNOの代わりにこの
       ボードを利用する時には重宝するかと 思いました。

 [Arduino IDE の拡張]

       ArduinoIDEに対しては次の拡張を行います。  

        1.環境設定に「stm32duino」のボードマネージャーのURLの追加

               f:id:I_Satoh:20200126105159p:plain

               URL : https://raw.githubusercontent.com/stm32duino/BoardManagerFiles/master/STM32/package_stm_index.json

         2.ボードマネージャーに「STM32 Cores」のライブラリをインストール
                f:id:I_Satoh:20200126105344p:plain

         3.ボードパラメータの設定
               <Serial>
                   f:id:I_Satoh:20200131104156p:plain

              <Bootloader>

                   f:id:I_Satoh:20200131104431p:plain

 [書き込みツールのインストール]

      Serialの書き込みツールとしては、IDE指定の「STM32CubeProg」を
      インストールして利用します。

         f:id:I_Satoh:20200126105625p:plain

 

 [モードピンの設定]   

       コード開発中はピンの接続を次の様にします。

            Serial flash : BOOT0=1, BOOT1=0
            HID boot :
                 1.ブートローダ起動
                      BOOT0=0, BOOT1=1 then CPU Reset
                  2.ブート起動後元に戻す
                         BOOT0=0, BOOT1=0

                     f:id:I_Satoh:20200131105301p:plain

 [書き込みツールの接続]

       Serialの書き込みの時はUNOの「USB to TTL-UART」の部分を利用して
       次の接続を行います。

           f:id:I_Satoh:20200131105509p:plain

 [ブートローダのダウンロード]

       HIDのブートローダとSerialでの書き込みツール(stm32flash)の入手は
       以下から行います。
         f:id:I_Satoh:20200131105702p:plain

        f:id:I_Satoh:20200131105801p:plain

 [ブートローダの書き込み]

       ブートローダの書き込みはSerialの書き込みで、「stm32flash」を
       利用して行います。

         f:id:I_Satoh:20200131105933p:plain

 [ボードの改造]

      ブートローダを利用する場合、ボードのリセットのみでUSBの
      再接続を行うには次の改造がボードに必要です。

       f:id:I_Satoh:20200131110124p:plain