STM32F103C8 ボードへのプログラムの移植について調べて見ました
STM32F103C8ボードを利用する時の他のボード用のプログラムからの移植の
難易度に関して調べて見ました。例として先に検討したSTM8S103F3ボード用の
ものから動作の確認のしやすい表示デバイスを利用したものを3つ選んで行いました。
検討の結果、移植元のプログラムにクラスを利用している場合はC++への対応が
必要で、SW4STM32のIDEを利用すればそれらが容易に行える事が判りました。
以下がその検討状況となります。
<STM32F103C8 ボードへの移植例>
STM8S103F3の時にArduinoからライブラリを移植して作成した次の3つの
プログラムをSTM32F103C8のボードへ移植して見ました。
<Nokia 5110 LCD> --- original
<LCD1602/2004> --- original
<0.96"/1.3" OLED> --- original
<移植作業の流れ>
ArduinoのライブラリはC++をベースに作られていて、STM8S103F3ボード用に
移植する時には、IARのIDEの設定をC++にすれば対応できました。
それに対して、STM32F103C8のボードのI/Oのコンフィグレーションに
STM32CubeMXを利用した場合、生成コードはC++に対応していない為にC++
に変換する必要が有ります。操作性の良さからCoIDEの利用を考えていたのですが
簡単なC++への変換ではリンクエラーとなりSTM32CubeMXの生成コードの
CoIDEでの利用には一連の複雑な導入作業が必要な事が判りました。他にこの
C++へのコード変換を簡単に対応できるIDEを検討した結果、SW4STM32の
IDEにC++への変換機能が有り、調べた結果これが使える事が判りました。
その為、STMのチップに関してはIDEとしてSW4STM32を利用する事とし、
その場合の一連の作業は次の様にしました。
1.STM32CubeMXによるI/O割り付けと基本コードの作成
2.SW4STM32でのC++コードへの変換
3.CastのC++への対応(ワーニング対応、そのままでもOK)
4.マイクロ/ミリ秒のディレイ用タイマー関連の追加
5.マイクロ/ミリ秒のディレイ用タイマー関数の追加
6.デバッガ用のスクリプトファイルの修正
7.アプリケーション個別の処理を追加
移植元のプログラムからI/O関連部分の切り離して等価機能の関数に置き換え
<テスト内容と結果>
テストとしは、以上の移植作業で3つのSTM8S103F3ボード用に開発した
アプリケーションをSTM32F103C8のボード上で実行させる事としました。
その結果としては次の様なものでした。
1.3つのアプリケーションとも問題なく移植する事ができました。
2.STM32CubeMXは、ポートレベルの初期値まで設定する事ができ、
とても重宝である事が判りました。
3.コード用メモリ使用量はビット長の違いからか、STM8Sに比べてかなり
多くなりました。(2~3倍程度)
4.速度に関しては、72MHzで動作できる為かなり速くなっている様に
思えました。
5.RAMの容量が十分有るため、STM8Sの時は半分づつ書いていた描画も
フルで書ける様になり、もっと高度な描画処理も可能と思いました。
6.IDEとしては、STM32CubeMXの出力をC++コードに変換する必要が
有り、SW4STM32を利用すればこれらの一連の作業が簡単に行える事が
判りました。
[コード]
コードは次のURLからダウンロード可能です。(開発環境に関してはこちらの
記事を参照して下さい。)
Code download URL : https://www.dropbox.com/s/nrsjnc6ggegpxzn/AC6_Porting_sample.zip?dl=0
[動作状況]
難易度に関して調べて見ました。例として先に検討したSTM8S103F3ボード用の
ものから動作の確認のしやすい表示デバイスを利用したものを3つ選んで行いました。
検討の結果、移植元のプログラムにクラスを利用している場合はC++への対応が
必要で、SW4STM32のIDEを利用すればそれらが容易に行える事が判りました。
以下がその検討状況となります。
<STM32F103C8 ボードへの移植例>
STM8S103F3の時にArduinoからライブラリを移植して作成した次の3つの
プログラムをSTM32F103C8のボードへ移植して見ました。
<Nokia 5110 LCD> --- original
<LCD1602/2004> --- original
<0.96"/1.3" OLED> --- original
<移植作業の流れ>
ArduinoのライブラリはC++をベースに作られていて、STM8S103F3ボード用に
移植する時には、IARのIDEの設定をC++にすれば対応できました。
それに対して、STM32F103C8のボードのI/Oのコンフィグレーションに
STM32CubeMXを利用した場合、生成コードはC++に対応していない為にC++
に変換する必要が有ります。操作性の良さからCoIDEの利用を考えていたのですが
簡単なC++への変換ではリンクエラーとなりSTM32CubeMXの生成コードの
CoIDEでの利用には一連の複雑な導入作業が必要な事が判りました。他にこの
C++へのコード変換を簡単に対応できるIDEを検討した結果、SW4STM32の
IDEにC++への変換機能が有り、調べた結果これが使える事が判りました。
その為、STMのチップに関してはIDEとしてSW4STM32を利用する事とし、
その場合の一連の作業は次の様にしました。
1.STM32CubeMXによるI/O割り付けと基本コードの作成
2.SW4STM32でのC++コードへの変換
3.CastのC++への対応(ワーニング対応、そのままでもOK)
4.マイクロ/ミリ秒のディレイ用タイマー関連の追加
5.マイクロ/ミリ秒のディレイ用タイマー関数の追加
6.デバッガ用のスクリプトファイルの修正
7.アプリケーション個別の処理を追加
移植元のプログラムからI/O関連部分の切り離して等価機能の関数に置き換え
<テスト内容と結果>
テストとしは、以上の移植作業で3つのSTM8S103F3ボード用に開発した
アプリケーションをSTM32F103C8のボード上で実行させる事としました。
その結果としては次の様なものでした。
1.3つのアプリケーションとも問題なく移植する事ができました。
2.STM32CubeMXは、ポートレベルの初期値まで設定する事ができ、
とても重宝である事が判りました。
3.コード用メモリ使用量はビット長の違いからか、STM8Sに比べてかなり
多くなりました。(2~3倍程度)
4.速度に関しては、72MHzで動作できる為かなり速くなっている様に
思えました。
5.RAMの容量が十分有るため、STM8Sの時は半分づつ書いていた描画も
フルで書ける様になり、もっと高度な描画処理も可能と思いました。
6.IDEとしては、STM32CubeMXの出力をC++コードに変換する必要が
有り、SW4STM32を利用すればこれらの一連の作業が簡単に行える事が
判りました。
[コード]
コードは次のURLからダウンロード可能です。(開発環境に関してはこちらの
記事を参照して下さい。)
Code download URL : https://www.dropbox.com/s/nrsjnc6ggegpxzn/AC6_Porting_sample.zip?dl=0
[動作状況]