趣味のマイコンいじり

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

STM32F103C8T6ボードを調べて見ました

前にTM32のボードを購入してArduinoのプラットフォームで動かした見たのですが
Arduino UNO の様にシールドモジュールが無く、ピン割り付けも異なっていて
なんだか使いにくそうなので暫く放置していました。ところが、今回、安価な
STM8S103F3のボードを調べて、その上にアプリを組み込んで見るとかなり使える
事が判りましたので、改めてこのボードに付いても、もう少し詳しく調べて見る事に
しました。調べた結果、STM8S103F3のボートとは勝手が全く異なる事が判り
ましたが、具体的にアプリを組み込んで検討して見る価値が有るのではないかと
判断できました。その状況は次の様になります。

<STM32F103C8 ボードの概要>
  購入した開発用の「STM32F103C8ボード」は次の様なものでした。
   イメージ 1

   1.CPU : STM32F103C8T6, 32bits, ARM Cortex-M3
        (この青い基板のものは Blue pill と呼ばれている様です。)
   2.ROM 64Kバイト/RAM 20Kバイト
   3.最大動作周波数 : 72MHz
   4.CPU電源電圧 : 2.0-3.3V
   5.フリーの開発環境
       STマイクロの資料によると、利用可能な開発環境は次のものとなります。
       イメージ 2

         1.SW4STM32 : デバッガの起動スクリプトの修正が必要
         2.ATS Lite : 修正等は不要で使えるが、起動毎の有料版への勧誘が煩わしい
         3.CoIDE : CPUのI/O等を設定するSTM32CubeMXを利用するのは少し
               手間がかかる
         4.iSYS-WinIDEAOpenとMDK5-Cortex-Mは調べていない
         5.Arduino IDEは簡単で安定に動作するが、Arduinoのプラットホームの
               導入に12Kバイト程度のメモリを消費する
         6.ARM Mbed は類似のMbed対応ボートを代わりに導入する事で利用可能
              (類似ボードはCPUがSTM32F103RBT6のNUCLEO-F103RB)

<関連資料>
   1.STM32F1シリーズデータ
        URL : http://www.st.com/en/microcontrollers/stm32f1-series.html?querycriteria=productId=SS1031
        URL : http://www.st.com/content/ccc/resource/technical/document/reference_manual/59/b9/ba/7f/11/af/43/d5/CD00171190.pdf/files/CD00171190.pdf/jcr:content/translations/ja.CD00171190.pdf
                 (日本語リファレンスマニュアル)

   2.回路図
        URL : http://www.stm32duino.com/download/file.php?id=524

   3.STM32CubeMX
        <downloading>
              URL : http://www.st.com/en/development-tools/stm32cubemx.html
        <使用例紹介>
              URL : https://denshikousakusenka.jimdo.com/%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89/stm32/%E6%97%A7%E8%A8%98%E4%BA%8B-cubemx/

   4.STM32 ライブラリリファレンスマニュアル
        <日本語>
              URL : http://www.minokasago.org/STM32wiki/index.php?STM32
        <English>
              URL : http://stm32.kosyak.info/doc/index.html

         <HAL>
              URL : http://ds.arm.com/media/resources/db/chip/st/stm32f4series/DM00105879.pdf

   5.SW4STM32
         <downloading>
              URL : http://www.openstm32.org/HomePage
         <使用例紹介>
              URL : http://gsmcustomeffects.hatenablog.com/entry/2016/10/24/015907

   6.ATS lite
         <downloading>
              URL : https://atollic.com/truestudio/
         <インストール例紹介>
              URL : http://miqn.net/introduction/72.html
                  (STM32CubeMXの出力セッティングはTrueStudioを選択)

   7.CoIDE
          <downloading>
               URL : http://www.coocox.org/software/coide.php
          <STM32CubeMX の使用例紹介>
               URL : http://nucleo87.webnode.jp/nucleoプログラミング/coideのプロジェクトを作ろう%EF%BC%812/coideのプロジェ/
                    (この変換を利用して、更にstartup のフォルダを登録すれば
                      CoIDEで利用できる。)

   8.Arduino IDE
          <downloading for Arduino system boot code>
               URL : https://github.com/rogerclarkmelbourne/STM32duino-bootloader
          <使用例紹介>
               URL : http://ht-deko.com/arduino/stm32f103c8t6.html

   9.ARM Mbed
          <sample>
               URL : https://os.mbed.com/users/hudakz/code/STM32F103C8T6_Hello/

<開発環境利用上の注意点>
   1. STM32CubeMX
       Web上の参考記事では特に書かれていない場合も有りますが、プログラムを
       書き込み後もST-LINKの接続を有効にしてデバッグやプログラムの更新を
       行うには、以下の例の様にSWCLKとSWDIOのポートも有効にしておく事が
       必要です。(古いSTM32CubeMXでは不要かも知れません。)
       イメージ 3

       もし、このSWCLKとSWDIOのポートの設定を忘れたプログラムを書き
       込んだ場合にST-LINKを利用してこれらを有効にしたものに書き変る場合は、
       CPUのハードリセット直後からプログラム開始までのデホルトの状態を利用
       して前のプログラムの消去を行う必要が有ります。(ブートモードを利用した
       UARTによる書き込みなら通常の方法で可能かと思います。) 私の場合は、
       次の方法で対応しました。

         ・ まず、ST-LINKのUSBの接続を切入りして、ST-LINKのリセットを
             行います。
         ・ 次に「STM32 ST-LINK Utility」を起動して「Erase Chip」の動作を
             開始します。
         ・ 動作が開始直後、ボードのリセットボタンをチョン押ししてポートを
             リセット直後のデホルト状態にします。
         ・ 消去状態の表示が出たらOKとなります。もしエラーがでたら、再度
             これらの操作を繰り返します。

       私のPCの環境では以上の対応で消去ができ、次に修正したものを書き込めば、
       後は問題無く動作する様になりました。

   2. SW4STM32
       私のPCの環境では最初デバッガが動作しませんでした。(ボードへの直接
       書き込みは問題無し)その為、Web上の記事を参考にしてデバッガ起動用の
       スクリプトの一部を以下の様に変更したら上手く行く様になりました。
       イメージ 4

       その他として、デバッガのスクリプトファイルのパスが長いとデバッガが
       動作しませんでした。デバッガの入力パラメータに長さ制限(256?)が
       有る様です。その為、短い名前や浅い位置にプロジェクトのフォルダを
       置く様にした後には問題は出ていません。

   3. ATS lite
       インストールおよび動作が安定していてとても良好で、しかも多言語対応が
       されている為、日本語の表示となり、さすがにオリジナルが有料版のものだと
       感じました。また、生成されたLED点滅のプログラムサイズも検討したIDE
       中では最小でこのボードの開発用には最良かと思いました。ただし、毎回、
       起動後に次の様な有料版へのお誘いが有り、これがとても煩わしく
       思いました。
       イメージ 5

   4. CoIDE
       これは、上記2のSW4STM32より操作性の配慮がされていおり、一般的な
       IDEの操作からの連想で扱う事ができました。また、STマイクロ以外の
       Armチップも扱えるので、ARM Mbed ボード用のものをExportして利用する
       時等にはとても便利かと思いました。ただし、STM32CubeMXの出力が対応
       していない為、ピン割り付け等のチップの初期処理にこれが利用できない
       難点が有ります。これの解決手段としてWeb上に紹介されていた
       STM32CubeMXの 「SW4STM32」用の出力をこのIDE用に変換する方法
      (上記関連資料7)と、STM32CubeMXの生成コードをコピーして利用する
       方法を検討しました。
      
       [変換ツールによる方法]
         <start up file の登録>
           紹介されている記事では、他に別の処理が付けられており、その時に
           start upの情報も併せて登録されたものかと思いますがSTM32CubeMX
           からの出力を変換したものをそのまま使う場合には、次の start upの
           登録が追加で必要でした。なお、旧バージョンでも下記のデバイス
           変更をすれば同じstart upの登録が使え、ビルドまでは問題無く処理
           されましたが、デバッグの起動時に STM32CubeMX出力のLinker scriptの
           読み込みで文字数が大きくてエラーになる部分が有る様なので別の方法と
           しました。 (同じ方法では、エラーは出ますが動作的には問題無い様に
           思えました。処理に影響の無い部分なのかも知れません。)
           イメージ 6

          イメージ 7

         <旧バージョンIDEの時のデバイス変更>
           旧バージョンのIDEでは、このチップそのものではなく親カテゴリーの
           チップがIDEに登録されている為、次の様にデバイスの変更が必要でした。
             (STM32F103C8T6 -> STM32F103C8)
            イメージ 8

           以上の対応でWebで紹介されているツールを利用してビルドとデバッグ
           動作する様になりました。

       [コピーによる方法]
       この方法は、多少複雑な操作が必要でしたが、多分STM32CubeMXが対応
       しているチップには全て可能な方法かと思いました。全体の流れとしては
       次の様になります。

          ・ STMCubeMXの出力ターゲットはES4STM32(旧バージョンには
              EWARMでもOK)とする。
          ・ CoIDEでターゲットの空のプロジェクトを作る。(旧バージョンでは
              上記の変換ツールによる方法と同じ様にstart upだけを実装する。)
          ・ そのフォルダにSTMCubeMXで作成したものから次のフォルダ
             (ファイル)をコピーして登録する。
               Ver2.0.7 : Drivers, Inc, Src. start up, リンカーストスクリプト
                              ファイル(STM32F103C8Tx_FLASH.ld)
               Ver1.7.8 : Drivers, Inc, Src
          ・ 最後にConfigurationの変更を行う。

         <Ver 2.0.7>
           イメージ 9

         <Ver 1.7.8>
           イメージ 10  

      5. Arduino IDE
       Arduino のプラットフォームの導入に関しては、上記の関連資料8の紹介
       記事に詳しく書かれており、この記事に従えば簡単に対応できました。
       また、このボードが持っている複数の通信ポート等に関する説明も詳しく
       書いて有り、この記事から沢山の有益な情報を頂きました。
     (素晴らしいです。) ただし、Arduinoのプラットフォームの導入の為か、
       LED点滅の簡単なプログラムでも12Kバイト程度メモリを消費している
       様です。

   6.ARM Mbed
       ARM Mbed のシステムは、Arduino と同じ様にPCとのUSB接続ポートで、
       書き込みとUARTの通信を利用してのデバッグを行うもので、Mbedで利用
       できるのはこれを対応したボードのみとなっています。このMbed対応
       ボードの中にこのボードのファミリーチップを利用したものが有り、
       Mbedのシステム上は以下の対応で利用可能でした。

         ・ ボードとしては「NUCLEO-F103FB」(ROM容量は128KB)を利用
         ・ 書き込みはST-LINKを利用
         ・ デバッグ用には、チップ内のUARTポートを利用し、このポートとPCを
             接続して行う。

       以上の内容は関連資料の9の記事にとても詳しく紹介されています。
      (素晴らしい)

       また、記事の中にはCoIDEへのエキスポートについて書かれており、この
       内容も確認できました。Mbedのエキスポートには他にSW4STM32への
       ものも有り、こちらも確認しましたが次の様な変更が必要でした。
        イメージ 11  

   [コード]  
   コードは次のURLからダウンロード可能です。(ArduinoIDEのサンプル
   なので有りません。)

     Code download URL :  https://www.dropbox.com/s/xq8cekzmtprn0ql/STM32F103C8_Blink_Sample.zip?dl=0
      
 [動作状況]
   

他のSTM32F103C8 ボードの記事
    このボードは、値段が安く、ROM/RAM容量もそれなりに大きく、しかも
    沢山のI/Oポート有るのでいろんなアプリケーションに利用可能ですが、
    ポートの設定やIDEの利用が多少複雑で取りつきにくい面も有るのかと
    思っています。その為、作成したサンプルが有れば少し役に立つかと思い
    以後こちらで検討した内容を追加して行こうかと考えています。(追加して
    行く予定です。)

       1.移植性を検討したもの  --- 記事はこちら
            

      2.KMR-1.8 SPI LCD  --- 記事はこちら