マイクロコントローラでは、残念ながら絶対ゼロがあり、グーグルを起動してたくさんの記事を読む必要がありました。 しばらくして、フォンノイマンとハーバードのアーキテクチャとその他の基本的な事項の違いが明らかになったとき、私が使用するマイクロコントローラーを選択する必要がありました。
必要な機能がシンプルだったため、 PICに決めましたが、同僚は私に時間をかけて正しい道を歩み、 STMとAVRに向かって掘ることを教えてくれました。
そしてすぐに、STM32F407デバッグボード用のSTM32F4ディスカバリーキットを購入しました
初日、私は彼女と一緒に家を走り回り、LEDが点滅し、ジャイロスコープが機能している様子を喜んだ。 しかし、自分でプログラムを書き始める時が来ました。 30分間のグーグル検索の後、インターネットで説明されているソリューションの95%がWindowsで機能し、LinuxとMac OSの幸運な所有者が森の中を歩いていることに気付きました。 私は夜に3日間、解決策を探して過ごしました。その結果、Mac OSのSTM32でプログラミングを開始する方法についての完全なマニュアルがあります。
IDE
まず、開発環境を配置する必要があります。 私たちの場合、Eclipse(C / C ++ Developers Mac Cocoa 64ビット用のIndigo R Eclipse IDE)です。 Eclipseのダウンロードとインストールのリンクに従ってください。
GNU ARMツールチェーン
公式ウェブサイトhttp://www.gnuarm.com/files.htmlからダウンロードできます 。 しかし、何らかの理由でarm-elf-gccまたはarm-elf-g ++を開始しようとすると 、エラーが発生します- 実行可能ファイルのCPUタイプが正しくありません なんで? 私はまだそれを理解していません。 したがって、フォークリポジトリarmへの参照を提供します。
それを収縮させましょう-
git clone github.com/jsnyder/arm-eabi-toolchain.git
今、あなたはすべての必要なパッケージをインストールする必要があります
brew install mpfr gmp libmpc texinfo
次に、収縮したディレクトリに移動します-cd
cd arm-eabi-toolchain
そしてする:
mkdir -p $ HOME / arm-cs-tools / bin
export PATH = $ HOME / arm-cs-tools / bin:$ PATH
CC = clang make cross-binutils cross-gcc cross-g ++ cross-newlib
クロスgdbを作成する
export PATH = $ HOME / arm-cs-tools / bin:$ PATH
きれいにする
ST-LINK
READMEに書かれているとおり、 ここからダウンロードしてインストールします。 ここでは、 ST-LINKデバッガーを読むことができます 。
カスタマイズ
今、私たちはすべてを結びつけ始めています。
Eclipseを起動します。 [ヘルプ]-> [新しいソフトウェアのインストール]に移動します。 [ 利用可能なソフトウェアサイト]リンクをクリックします 。 CDT Junoを見つけて、チェックボックスをオンにして[OK]をクリックします。 [ Work with]フィールドで、[ CDT Juno]を選択します。 表示されるリストで、 GCC Cross Compilerを探し、チェックマークを付けて、[ 完了 ]ボタンをクリックします。
これで、必要なプロジェクトを作成できます。
[ファイル]-> [新規]-> [C ++プロジェクト]に移動します 。 [ 実行可能クロスコンパイルプロジェクト]を選択し、名前を付けて[ 完了 ]をクリックします。
これで空のプロジェクトが作成され、構成する必要があります。
プロジェクトを選択し、右クリックして[ プロパティ]-> [C / C ++ビルド]-> [設定]に移動します。
Cross GCC Assembler-> General-> Assembler flags we write -mthumb -mcpu = cortex-m4
クロスGCCコンパイラー->その他->その他のフラグ書き込み-c -mthumb -mcpu = cortex-m4
Cross G ++コンパイラ->その他->その他のフラグ書き込み-c -mthumb -mcpu = cortex-m4
クロスGCCリンカー->その他->リンカーフラグに次のように記述します。
-T "$ {ProjDirPath} /stm32_flash.ld" -mthumb -mcpu = cortex-m4 -Wl、-Map =リンカー.map -Wl、-cref -Wl、-gc-sections
コンパイル後、正しい形式のバイナリファイルを取得します。 これを行うには、設定内でビルドステップタブを選択し、コマンドフィールドに書き込みます
arm-none-eabi-objcopy -I ihex "$ {ProjName}" "$ {ProjName} .ihex"
基本プロジェクト
ここで 、基本プロジェクトをダウンロードします。 デバッグボードがLEDを点滅させることができることを説明しています。
Eclipseプロジェクトにすべてのファイルをダウンロードして配置した後。 接続されたヘッダーへのパスを指定する必要があります。 ここでも、 [プロパティ]-> [C / C ++ビルド]-> [設定]に移動します。
ここで、 Cross GCC CompilerおよびCross G ++ Compiler in Includesに追加します
「$ {workspace_loc:/ $ {ProjName} / inc / STM32F4xx_StdPeriph_Driver / inc}」
「$ {workspace_loc:/ $ {ProjName} / inc / STM32F4xx_StdPeriph_Driver / src}」
「$ {workspace_loc:/ $ {ProjName} / inc / CMSIS}」
「$ {workspace_loc:/ $ {ProjName} / inc / STM32F4xx}」
「$ {workspace_loc:/ $ {ProjName} / inc}」
OKをクリックします。
行こう
すべてが好きです。 st-linkとgdbをEclipseにバインドしませんでした。 したがって、コンソールからすべてがどのように行われるかを示します。
Eclipseでは、 [ ビルド ]ボタンを使用してプロジェクトをビルドします。
アセンブリが成功し、バイナリファイルもそこにあることを確認した後、USBを介してボードを接続します。
コンソールを開きます(itermの方が優れています)。 最初のタブで、 st-linkを実行します。 インストール後、グローバルに利用可能になります。
parikmaher言う:st-util
2013-12-05T22:48:22情報src / stlink-common.c:デバイスパラメーターの読み込み...
2013-12-05T22:48:22 INFO src / stlink-common.c:接続されているデバイス:F4デバイス、ID 0x10016413
2013-12-05T22:48:22 INFO src / stlink-common.c:SRAMサイズ:0x30000バイト(192 KiB)、フラッシュ:16384バイトのページで0x100000バイト(1024 KiB)
チップIDは00000413、コアIDは2ba01477です。
ターゲット電圧は2879 mVです。
*で聞く:4242 ...
デバイスがどのように検出され、プロセッサがポート4242でハングするかがわかります。
次のタブで、以前にインストールしたarm-none-eabi-gdbを実行します
parikmaher言う:arm-none-eabi-gdb
GNU gdb(32ビットARM EABIツールチェーンJBS-2013.05-23-v2013.05-1-gd66a29f)7.4.50.20120716-cvs
著作権©2012 Free Software Foundation、Inc.
ライセンスGPLv3 +:GNU GPLバージョン3以降< gnu.org/licenses/gpl.html >
これはフリーソフトウェアです。自由に変更して再配布できます。
法律で許可されている範囲での保証はありません。 「show copy」と入力します
詳細については「保証を表示」。
このGDBは、「-host = x86_64-apple-darwin12.5.0 --target = arm-none-eabi」として設定されました。
バグ報告の手順については、以下をご覧ください。
< github.com/jsnyder/arm-eabi-toolchain >。
(gdb)
すべてが素晴らしいです。 次に、デバイスに接続する必要があります。 ターゲットリモートコマンドを実行する必要があります:4242
(gdb)ターゲットリモート:4242
4242を使用したリモートデバッグ
0x08000b70 in ?? ()
st-linkが実行されている次のタブでは、GDB接続に関する情報が表示されます。
KARL-60 02 00 00ではなく0x03として読み取る必要があります
GDBが接続されました。
さて、最後が残っています。 新しいファームウェアをロールする必要があります。
GDBのタブに移動し、 loadコマンドを実行します
(gdb)bin.ihexへのロードパス
読み込みセクション.sec1、サイズ0xc10 lma 0x8000000
開始アドレス0x8000b70、ロードサイズ3088
転送速度:3 KB /秒、3088バイト/書き込み。
そして、デバッガーの次のタブで、すべてが正常にロールされたことを確認できます
2013-12-05T22:56:04 INFO src / stlink-common.c:16384(0x4000)バイトをstm32アドレスに書き込もうとしています:134217728(0x8000000)
EraseFlash-セクター:0x0サイズ:0x4000
addrのフラッシュページ:0x08000000が消去されました
2013-12-05T22:56:05 INFO src / stlink-common.c:16384(0x4000)バイトの1ページの消去が終了しました
2013-12-05T22:56:05 INFO src / stlink-common.c:F2 / F4のフラッシュ書き込みを開始
2013-12-05T22:56:05 INFO src / stlink-common.c:フラッシュローダーがsramに正常にロードされました
サイズ:16384
2013-12-05T22:56:05情報src / stlink-common.c:書き込み完了の検証を開始
2013-12-05T22:56:05 INFO src / stlink-common.c:Flashが作成され、検証されました! ジョリーグッド!
結果を確認するには、gdbでコマンド 'c'(続行)を実行します。 ボードはクリスマスツリーのように点滅します。
私が書いたすべてのことは、私の側で完全に理解しているわけではありません。 しかし、これは初心者にとって素晴らしい出発点です。
この記事が誰かを助けることを願っています。