読者です 読者をやめる 読者になる 読者になる

みんな大好き、ペンギンさん

あんばらの技術資料まとめブログ

中華ST-LINKを使う~ST-LINK utility編~

STM32

f:id:anbalioh:20161229215603p:plain

↑Utilityの"l"が1個多いです.

はじめに

NucleoでしかSTM32を書き込んだことない人向けに,USBマスストレージのないST-LINKでのバイナリ書き込み方法を紹介します.

今回は中華ST-LINK & ST-LINK utilityを使います.

 

ST-LINK utilityの導入

ST-LINK utilityはST様から出ている書き込みソフトという認識でいいと思います.

デバッガ(OpenOCD)を使ったほうが便利なことが多いんですが,簡単なのでST-LINK utilityを使います.

(今度OpenOCD編書きたいです...)

 

ST-LINK utilityをダウンロードする

ここからST-LINK utilityをダウンロードします.

ST様の会員登録が必要になりますが,今後もSTM32を使っていく上で必須なのでためらうことはありません.

インストールする際にST-LINKのドライバも入ります.

 

起動する

こんな画面です.

f:id:anbalioh:20161229214853p:plain

続いて,使い方をご紹介します.

 

ST-LINK utilityの使い方

接続する

※物理的にパソコン⇔ST-LINK⇔STM32をつなぐのを忘れずに(笑)

ST-LINK utilityの接続ボタンを押すと現在のSTM32の中身が見れます.

ST-LINKとSTM32の生存確認に便利です.

f:id:anbalioh:20161229220504p:plain

 

切断する

これが切断ボタンになります.

f:id:anbalioh:20161229220759p:plain

 

接続設定を行う

地球スパナのロゴをクリックすると新規ウインドウが出てきます.

ここでJTAGに変更したり,SWDの速度を変えたりすることができます.

今回設定を変える必要はないです.

(RESETだけSoftwareにしたほうが便利になるかもしれません.)

f:id:anbalioh:20161229221038p:plain

f:id:anbalioh:20161229221052p:plain

 

プログラム書き込み

ノートみたいなアイコンを押すとバイナリ(.bin)の選択画面が出てきます.

選択後,書き込み画面が出てきます.

設定は変える必要はないので,Startを押して早速書き込みます.

f:id:anbalioh:20161229221355p:plain

f:id:anbalioh:20161229221453p:plain

書き込みが終わるとこんな画面になります.

f:id:anbalioh:20161229221548p:plain

この状態だとまだ接続状態なので,切断します.

f:id:anbalioh:20161229221630p:plain

 

その他の機能

http://www.st.com/content/ccc/resource/technical/document/user_manual/e6/10/d8/80/d6/1d/4a/f2/CD00262073.pdf/files/CD00262073.pdf/jcr:content/translations/en.CD00262073.pdf

公式文章です.このPDFにすべての機能が書かれています.

画像多めで読みやすいので,ぜひ読んで下さい.

この記事はほんの少しの機能しか紹介していません!!

Nucleoローカルビルド~実践開発編~

STM32 Nucleoローカルビルド

f:id:anbalioh:20161229181414j:plain

はじめに

前回の続きです.

makeでビルドできる前提で話が進んでいきます.

 

メモ帳な開発の流れ

導入編でエクスポートしたフォルダのメインプログラム(main.cpp)を書き変えて,そのつどコンパイルすればいいです.

つまり,

  1. ソースコードを書く(メモ帳でもOK笑)
  2. コマンドプロンプトで開く
  3. make

をすればいいってわけですね.

オンラインコンパイラでいつも開発して,バックアップとしてオフライン環境をもちたいと言う方はこれで十分です.

f:id:anbalioh:20161229205717p:plain

 ちなみに僕はサクラエディタ派です.

Atomを使った開発

メインでオフラインコンパイルしたいという方は,こちらがオススメです.

最近流行っているAtomを使います.

Atomはいろんな機能がついた便利なエディタです.

 

Atomをインストールする

ダウンロードしてインストールしてください.

注意点などはありません.

 

右クリックメニューに追加する

エクスポートしたフォルダごとAtomで開く必要があるのでAtomの設定を変更します.

「Settings --> System --> Show in folder context menus」にチェックを入れます

Settingsは「Ctrl+,(コンマ)」で開くことができます.

f:id:anbalioh:20161229202752p:plain

 

make-runnerをインストール

Atomにはpakageという拡張機能があるんですけど,それのmake-runnerというpakageを使います.

インストール方法は

  1. Atomを起動
  2. Ctrl+コンマでSettingsを開く
  3. Installを開く
  4. 「make-runner」と検索
  5. make-runnerをインストール

です.

これで作業は終わりです.

f:id:anbalioh:20161229202949p:plain

 

実際にAtomを使ってローカルビルドしてみる

エクスポートしたフォルダを右クリックしてAtomを開く

f:id:anbalioh:20161229203210p:plain

 

プログラムを書く

同じ画面だよな...と確認してみてください.

main.cppにプログラムを書きます.

f:id:anbalioh:20161229203524p:plain

 

make-runnerを使ってビルド

「Ctrl+r」でビルドされます.成功するとこうなります.

f:id:anbalioh:20161229203639p:plain

 

カーソルがmain.cppにあると失敗します(画像).

(Ctrl+rコマンドがかぶっているのでエディタ上だと別のショートカットが起動する)

f:id:anbalioh:20161229203719p:plain

 

対策としては画像の灰色のところにカーソルがある(1度クリックする)状態になればOKです.

f:id:anbalioh:20161229204244p:plain

 

Atomを使ったmakeについて

make-runnerはコマンドプロンプトでmakeする手間を省いてCtrl+rでできるようにしてくれているだけですので,実は目新しいことはしていません.

個人的にAtomIDE化してローカルビルドするより安心感があります.

 

Nucleoローカルビルド~導入編~

Nucleoローカルビルド STM32

f:id:anbalioh:20161229180456j:plain

はじめに

このサイト様を拡大して書いております.ぱくりです.

 

導入の流れ

  1. GCC ARM Toolchainをインストールする
  2. Gnu Makeを追加する
  3.  →これでmakeコマンドが使えるようになる
  4. mbedオンラインコンパイラからGCC用のプロジェクトをエクスポートする
  5. エクスポートしたフォルダをコマンドプロンプトで開く
  6. makeコマンド実行でコンパイル
  7. バイナリ(.bin)をNucleoにコピーして終わり

 

GCC ARM Toolchainをインストールする

ここより最新のインストーラーをダウンロードします.

現行では「gcc-arm-none-eabi-5_4-2016q3-20160926-win32.exe 」でした.(直接ダウンロードできます)

ダウンロードしたらインストールすればいいんですが,インストール終了画面でパスと通すかというチェックがあるので必ずチェックしてください.

f:id:anbalioh:20161229170006p:plain

Gnu Makeを追加する

makeを利用するので必要ファイルをダウンロードして,さきほどのToolchainに追加します.

上記リンクのサイトから

make-3.81-dep.zip

make-3.81-bin.zip

をダウンロードします.(直接ダウンロードできます)

展開したら,「C:\Program Files (x86)\GNU Tools ARM Embedded\(バージョン名)\bin」に3つのファイルをコピーします.

make-3.81-dep.zip --> bin --> libiconv2.dll

make-3.81-dep.zip --> bin --> libintl3.dll

make-3.81-bin.zip --> bin --> make.exe

 

 

Makeが使えるか確認

コマンドプロンプトを起動し,

make -v

と打ってみましょう.

バージョン情報が出てくれば成功です.

f:id:anbalioh:20161229170017p:plain

 

mbedオンラインコンパイラからGCC用のプロジェクトをエクスポートする

 プロジェクトを右クリック --> プログラムのエクスポート を選択してください.

f:id:anbalioh:20161229171809p:plain

するといろいろエクスポートするToolchainが選べる画面が出てくるので「GCC(ARM Embedded)」を選択します.

で,エクスポートします.Export All Filesはチェックつけなくても大丈夫です.今回はなしでいきます.

ExportをしてもらうとZipでダウンロードが開始されます.

f:id:anbalioh:20161229172214p:plain

 

エクスポートしたフォルダをコマンドプロンプトで開く

先程ダウンロードしたZipを展開します.

で,展開したフォルダをコマンドプロンプトで開いてください.

一番ラクなのは,Shift+右クリックして「コマンドウィンドウをここで開く」だと思います.

f:id:anbalioh:20161229172946p:plain

 

makeコマンド実行でコンパイル

make

コマンドプロンプトに入力するだけです.

勝手にビルドしてもらえます.

このすばらしさについてはmakeをお勉強ください.

f:id:anbalioh:20161229173139p:plain

 

バイナリ(.bin)をNucleoにコピーして終わり

Nucleoは書き込み装置いらないのでバイナリ(.bin)コピーしてもらうだけですね.

バイナリは「.build」というフォルダが新規作成されるのでこの中に入っています.

f:id:anbalioh:20161229173638p:plain

 

終わりに

疲れた.

Nucleoローカルビルド~なぜなに編~

STM32 Nucleoローカルビルド

f:id:anbalioh:20161229180334j:plain

はじめに

ローカルビルドって何?

 Nucleoってmbedオンラインコンパイラで開発するのが通常ですが,オフラインで開発するのは厳しいことがあります.

そこでローカルビルドです.「ローカル=オフライン」だと思えば問題ないです.

つまり,ローカルビルドとは "オフラインでコンパイルする" ことです.

 

ローカルビルドする利点

  • オフラインでコンパイルできる
  • コンパイルが早い
  • 好きなエディタが使えるのでvimだって使える
  • mbedの核心以外は自由に記述できるようになる

 

ローカルビルドする欠点

  • まだ未完成なところがある(オンライン環境でコンパイル通ってオフラインで通らないことがある)
  • オンラインコンパイラだと共有とかVCSが使えるので不利といえば不利

 

ローカルビルドの使用例

大会会場にて

mbedのオンライン環境でまっさきに悲しくなるのは大会会場です.

スマホテザリングしようにも圏外になるかもしれません.

ロボカップジュニアでは会場内におけるWifiテザリングを禁止しています(USBはOK).

万が一に備え,ローカルビルド環境は用意したほうがいいです.

 

寮生活にて

僕の住んでいる寮は24時にネットワークが切れます.(6時まで)

夜行性のオタクの皆さんは24時から作業が捗ると思いますのでこれは痛いです.

そこでローカルビルドはいいですよね.24時を過ぎても開発ができます.

 

上越新幹線にて

新潟県にお住まいの皆さん,東京で大会があって大会当日の朝にバグが見つかったらどうでしょう.移動の新幹線でバグ取りしないといけません.

しかし,上越新幹線は高崎までトンネル!トンネル!トンネル!で圏外です.

そこでローカルビルドです.新幹線内でもバグ取りがはかどります.

なぜSTM32を使うのか

STM32

f:id:anbalioh:20161229181011j:plain

注意

※STM32すごいぜ的な書き方で進めますので,ご注意よろしくお願いします.

※正直,使用するマイコンの選定は用途によるところが大きいと思いますので,STM32がどんなシチュエーションでもいいとは限りません.

STM32と他マイコンとの比較

STM32のいいところ

  • 評価ボード安い 
  • Aliexpressで安いことが多い
  • ペリフェラルが豊富
  • タイマが多くてロボコンに向いていると思われる
  • ARMなので流行りにのれる

 

vs. AVR(8bit)

Aliexpressで安いのは同じ.

スペックで勝っているので大勝利.

AVRはレジスタの勉強をするのに良いイメージです.

 

vs. PIC(8bit)

Aliexpressで安いのは同じ.

スペックで勝っている(?)ので大勝利.

※使ったことありませんすいませんでした.

 

vs. その他8bitマイコン(H8とか)

AVRとSTM8しか使ったことないマンです.すいませんでした.

 

vs. 他のARMマイコン

STM32はNucleoやDiscoveryがとても入手性がよく安い.価格的には1500~3000円程度.

他のARM系マイコンは5000円~するので高い.

--> お金ない学生うれぴい.

 

純正基板以外に中国でもSTM32は安い.

他のARM系マイコンはAliexpressでの破格がないけど,STM32はF103C8T6が150円とやばい.他にもいっぱい破格のSTM32マイコンがある.

(F103C8T6はDigikeyで7-800円程度なので600円程度も安い!!)

-->お金ない学生うれぴい.