ARM(STM32)
C++を使ったSTM32のプログラミング・デバッグ環境を整える - STM32 †
最終更新日:2016-11-07 (月) 16:26:57
Linuxユーザのあなたはこちらへ→Linux上でSTM32のプログラミング・デバッグ環境を整える - STM32
動かない場合はすぐに不具合報告をおねがいします!
コメント欄 もしくは Twitter(@tokoro10g)まで
重要なお知らせ †
- 20140119版より前のバージョンでは,STBeeMiniTemplate,STM32F1Templateの2つのサンプルプロジェクトが正常に動作しないバグがあります.
対処方法:
- STBeeMiniTemplateプロジェクトの場合
- STM32F1Templateプロジェクトの場合
- Libraries/CMSIS/Device/ST/STM32F10x/system_stm32f10x.cをプロジェクトのディレクトリにコピー
ご迷惑をおかけいたしました.
※注意!※
- 現在64bit版のみの配布です.実行にはJREの64bit版が必要です.
- 既存の開発環境(miqn.net環境等)のプロジェクトとは互換性がありません
- コードアシストのショートカットをCtrl+;に設定しています
概要 †
STM32の開発には,一般的に市販の高価な統合開発環境を使用するか,EclipseとARM向けツールチェイン(Code Sourcery,YAGARTOなど)を組み合わせて開発環境を各自で構築することが前提となっており,マイコンプログラミングの入門者に対する参入障壁となっていた.
「マイコン徹底入門」のサイトにはSTM32向けの開発環境が整備されており,日本語によるサポートも非常に充実しているが,C++を使用する環境の構築例や,オンチップデバッグについてはあまり詳しく記載されていない.
一般的な日本人にとって,英語などの外国語で書かれた解説記事やオンライン掲示板の内容を正確に読み解くことは非常に労力のかかる作業であり,そのことからSTM32への入門を諦めてしまう例も散見される.
本記事はSTM32シリーズ全般に対して利用できるC/C++の開発環境と,そのサンプル(テンプレート)プロジェクトを用意し,日本語による解説記事を提供することによって,これらの障壁を取り除こうと試みたものである.
(論文のAbstract風に)
ブツ †
(´⊙ɛ ⊙`)つ [ ブツ ]
最終更新:2014/01/19 19:20
使い方 - ビルド編 †
- 解凍します
- ねむいさんのぶろぐのおきばからOpenOCDバイナリをダウンロードして,ocdフォルダに解凍します
フォルダはだいたいこんな感じになります
- Eclipseを起動します.デフォルトでワークスペースが開かれていない場合は,File->
Switch Workspace->Other...から,自分が解凍したフォルダの中のworkspaceフォルダを選択して開きます.
- とりあえずどれかビルドしてみましょう
こんな感じでビルドに成功したら勝ちです.あとは好きに書いて好きにビルドしてください.
(13.06.26 11:00追記)
コンソール上でなくエディタ上でエラーや警告が出ている場合は,インデックスを再作成することで解決します.
プロジェクトを右クリックしてIndex->Rebuildを実行すると,エラーが消えます.
使い方 - デバッグ編 †
- ST-LinkやDiscovery基板をUSB接続した状態でOpenOCDを起動します
F1,F2,F3,F4シリーズに対応しています.それぞれ当てはまるものを起動してください.
成功すると,画面下のコンソールにインフォメーションが表示されます.
ここで怒られたあなたは,接続を確認するか,ねむいさんのぶろぐからOpenOCDをきちんとダウンロードしてきたかどうか確認してください.
ST-Linkを自作基板とつないで使う場合は,自作基板側の電源もONにしておいてください.
これらをチェックしてもうまくいかない場合は,ドライバが悪さをしていることがありますので,次の手順に従ってください.
- デバッグやOpenOCDを終了しておきます(赤い■ボタン)
- 同梱のzadig.exeを起動します
- Options->List all Devicesをクリックします
- STM32 STLinkが選択されていることを必ず確認してからUpgrade Driverをクリックします.
- ドライバがインストールされ,準備が整いました.手順1に戻って再度試してみてください.
- 次に,画面上の虫マークからテンプレートに対応するデバッグ構成を選択して起動します
次のようなエラーメッセージで怒られた場合は,プロジェクトエクスプローラ上でプロジェクトを選択してから再度デバッグを実行してみてください.
デバッグの設定はプロジェクトを複製しても複製されないので,テンプレートプロジェクトをコピーする場合は,デバッグの構成ウィンドウで構成を複製して使ってください.
- デバッグが始まります
デフォルトではmain関数にブレークポイントを設定してからReset_Handlerを呼んでいます.
プログラムをスタートするには,画面上部のリジュームボタンをクリックします.
- レジスタの中身を見たり変えたりしたいときは,画面下部からEmbSys Registersタブを開いてください.
- ブレークポイントを設定したり,ステップインなどの機能を使って思う存分遊んじゃってください.
内容物 †
- Eclipse
- Eclipse IDE for C/C++ Developers (Juno) 1.5.2.20130211-1820
- C/C++ GDB Hardware Debugging 7.0.0.201302132326
- Embedded Systems Register View (SFR) 0.2.3
- YAGARTO
- yagarto 20111119
- yagarto-tools 20100703
- Libraries
- STM32F0xx Standard Peripherals Library
- STM32F10x Standard Peripherals Library
- STM32F2xx Standard Peripherals Library
- STM32F30x Standard Peripherals Library
- STM32F4xx Standard Peripherals Library
- STM32 USB OTG Driver
- STM32 USB Host Library
- STM32 USB Device Library
- STM32 CPAL Driveer
- Baselibc( https://github.com/PetteriAimonen/Baselibc )
- STM32 EEPROM Emulation Library
- DFUW( http://strawberry-linux.com/stbee/dfuw ) (for STBee series)
- Example Projects
- STM32F1Template
- STM32F2Template
- STM32F3Template
- STM32F4Template
- STBeeMiniTemplate
- External Tools
- Zadig(OpenOCD用にドライバを更新するのに必要)
著作権に関して †
Eclipse,YAGARTO,Zadig,DFUW,各種ライブラリは二次配布物であり,その著作権はそれぞれの作者に帰属します.
一応下調べはしてありますが,ライセンス等の関係で問題があるようでしたらお知らせください.
サンプルプロジェクトのコードは著作権フリーとして扱います.
ご自由に改変・再配布いただいて構いません.
コメント欄 †
- YAGARTOがもう開発しないらしくてサポートもしないらしいので,別のツールチェインに変えたほうが良いかもしれないです. -- tanitanin?
- @tanitanin Code Sourceryも実質有償化の流れですし,自分でツールチェインをビルドできればいいんですがねぇ・・・ -- Tokoro?
- example prjをコピー、リネームするとbuildエラーになります。 -- s-shige?
- example prjをコピー、リネームするとbuildエラーになります。 -- s-shige?
- mainにとぶまえにHadFaultが発生します。 -- s-shige?
- RCC->CIR = 0x00000000;にアクセスすると、暴走し、結果HardFaultになります -- s-shige?