2018年2月23日金曜日

STM32 開発環境構築 Nucleo Lチカまで on Mac memo

[目標]
以下のインストール
・統合開発環境 SW4STM32
・コード生成ツールSTM32CubeMX
その後
・Nucleo L152RE でLチカ

[手順]
== 統合開発環境 SW4STM32 ==
  1. http://www.st.com/ja/development-tools/sw4stm32.html
    からOpenSTM32Community に入って,
    http://www.openstm32.org/Downloading%2Bthe%2BSystem%2BWorkbench%2Bfor%2BSTM32%2Binstaller
    からMAC OS/X 用の最新版をダウンロード。
    今回は,"install_sw4stm32_macos_64bits-v2.4.run"をダウンロード。
    OpenSTM32に入るには,アカウント登録が必要。
    注意 : ひたすら遅い。1時間くらいかかる。
  2. ファイルをダウンロードした場所でターミナルで開く。
    以下のコマンドを入力。
    $ chmod 755 install_sw4stm32_macos_64bits-v2.4.run 
    $ ./install_sw4stm32_macos_64bits-v2.4.run
  3. インストールのWindowが開くので,そのままデフォルトの設定で進めていく。
    ライセンスとかは,全部agreeにする。http://www.openstm32.org/Installing%2BSystem%2BWorkbench%2Bfor%2BSTM32%2Bwith%2Binstaller

    インストール始まったなーと思っても,なんか進まない時は,ターミナルを確認する。実はPasswordを求められてる。
  4. 終わり!
インストール画面
ターミナル パスワード入力


ついでに,AC6を起動して,アップデートを行う。
Help->Check for Updatesで,アップデートを開始。

== コード生成ツールSTM32CubeMX ==

  1. http://www.st.com/en/development-tools/stm32cubemx.html?sc=stm32cubemx
    から,CubeMXをダウンロード。zipファイルでダウンロードできる。
  2. AC6を立ち上げ,Help->Install New Software を選択。
  3. 無理だった。zipを選択しても,インストールできない。
  4. なので,別の方法を。zipファイルを解凍すると,.Appファイルがある。
  5. SetupSTM32CubeMX-4.24.0.app をダブルクリックする。
  6. インストールのWindowが開くので,デフォルトでインストール。
  7. アプリケーション->STMicroElectronicsにSTM32CubeMX.appがあることを確認。
  8. 終了!




== プロジェクトの作成 ==
デフォルトだと,AC6のワークスペースは,
Documents\workspace になるので,ここにプロジェクトを作成する。

まず,STM32CubeMXを起動する。
NewProjectを選択する。
Board Selectorタブをクリックして,Nucleo-L152RE を選択して,「StartProject」をクリック。

全てのペリフェラルをデフォルトで初期化するか聞かれるので,「Yes」を選択。

すると,こんな感じで,マイコンのピンを選択できる画面が出てくる。


Documents\workspace\NucleoL152RE_Blink フォルダを作って,NucleoL152RE_Blink.iocとして保存する。
次に,コードを生成する。
EclipseのプロジェクトをCubeMXから作成したいので,プロジェクト設定を行う。
Project->Setting を選択。


ProjectSettings ダイアログが開く。
Projectタブで,次のように設定する。
ProjectNameとProjectLocationを適当に設定して,「GenerateUnderRoot」のチェックを外す。


CodeGeneratorタブで,次のように設定する。
「Copy all used libraries into the project folder」と,
「Generate peripheral initialization as a pair of ・・・」にチェックを入れる。
(容量は食うかもしれんが,なんとなく,わかりやすくなりそうだから。)

で,OKを押す。
Project->Generate Code をクリックして,コードを生成する。
これで,AC6のプロジェクトファイルも同時に作ってくれる。
コード生成に成功!と言われる。「Open Project」を選択して,プロジェクトを開く。
すると,AC6が立ち上がり,作成されたプロジェクトを編集できる!
インポート成功!って言われたらOK!

workspaceの中を見てみると,以下のような感じになる。
作成されたプロジェクトの中にも,.iocファイルが作成されている。
もしかして,最初の保存はいらなかったかも。まぁいいや。
今後の課題と言うことで。

→ workspace->NucleoL152RE_Blink.ioc は消しても問題ない。
  CubeMXのコード生成で作成した,
  workspace->NucleoL152RE_Blink->NucleoL152RE_Blink.ioc
  を編集していけば良い。


== プログラム実行 ==

プロジェクトも作ったので,プログラムを実行する。
とはいえ,何も起きないけど。
前提として,NUCLEO L152RE をPCと接続しておくこと。

生成したプロジェクトを開いた状態がこんな感じ。
左のサイドバーのNucleoL152RE_Blinkプロジェクトを右クリック
->「Debug As」->「AC6 STM32 C/C+ Application」をクリック

なんかちょっとダイアログが出た末に,次のダイアログが登場。
デバッグ始めるよー的な?
とりあえず,「Yes」をクリック。

すると,AC6の画面が切り替わる。

ここまできたらOK!「Resume」ボタン,もしくは「F8」を押したら,プログラムが実行される!
したところでまだ何も起きないけど。



== Lチカプログラム作成 ==
まず,コード補完機能を使えるようにするため,
コード補完のショートカットを「Ctrl + Space」から変更する。
"https://qiita.com/rotomx/items/784211ea16760eecac83"
→ とりあえず,「Alt+Space」にした。

main.cを開いて,

int main(void) 関数内のwhile(1)の内部にLチカコードを記述する。
以下,コード

--------------------------------------------------------------------

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_SET);
    HAL_Delay(1000);
    HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);
    HAL_Delay(1000);

  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
  }

  /* USER CODE END 3 */

--------------------------------------------------------------------

トンカチ(🔨)みたいなボタンを押して,Buildする。
特にエラーが出なければ,デバッグする。
1回デバッグしているため,
左のサイドバーのNucleoL152RE_Blinkプロジェクトを右クリック
->「Debug As」->「AC6 STM32 C/C+ Application」をクリック
をしなくてもいい。
虫っぽいボタンを押して,デバッグを開始する。
画面が切り替わるので,Breakpointを貼ってみる。

HAL_GPIO_WritePin(・・・) と書いている行の左部分にカーソルを合わせて,
「Add Breakpoint」を選択する。



「Resume」ボタン,もしくは「F8」を押したら,プログラムが実行される。
Breakpointを貼ったところでプログラムが毎回止まる。
もう一度「Resume」ボタン,もしくは「F8」を押したら,プログラムが再開される。
1個目のBrekapointで止まった時は,LEDは消えている。
2個目のBreakpointで止まった時は,LEDはついている。
これは,Breakpointを貼った行のプログラムが実行される手前のところでプログラムが停止されるから。

Breakpointをなくしたら,ずっとLEDが点滅し続ける。
周期は1秒間隔!
Lチカ終了!
できた!

[参考]
http://happytech.jp/wordpress/2017/05/28/ide-for-stm32-mcu-sw4stm32/

[おまけ]
今回諦めたけど,EclipseにCubeMXのプラグイン入れる方法を昔載せてた。
http://chuchulabo.blogspot.jp/2017/05/stm32macos.html

0 件のコメント:

コメントを投稿