かめら工房

ものを作ったり,写真撮ったり

SW4STM32を使ってmbedをオフラインコンパイルしたい(mbed OS 5編)

どうも皆様お盆をいかがお過ごしでしたでしょうか、かめらちゃんです。

私はTwitterロボコンOB界隈と楽しくキャンプへ行ってきました。楽しかったです。
そこらへんの話は行った私以外の誰かがブログエントリに載せるでしょうから書かないです。

あ、誰も書かなかったら来年度以降用のメモ代わりに書くかも・・・。


前回のエントリでmbed 2.0系のオフラインコンパイルについて書きました。

camerablog.hatenadiary.com

mbedとして使用するには大きな問題は無いんですが、RTOSを含めたシステムを組むとなるとエラーが出てうまく動作させることができないってことで話が終わってたと思います。

mbed OS 5は元々RTOSが搭載された状態なのでコンパイルしようとするとエラーが出て進めない状態な訳です。

今回はそのエラーを消してコンパイル+OpenOCDによる書き込みができたので報告します。

まず、mbedオンラインコンパイラでmbed-osを使ったプログラムを作成します。
今回も使用するマイコンボードはNUCLEO-F746ZGです。
mbed-osを使ったサンプルで最もシンプルなmbed OS Blinky LED HelloWorldを使用します。

f:id:ks7jistra:20170820004816p:plain


元となるプログラムを作成したら、プログラムワークスペースで右クリック→プログラムのエクスポートでExport ToolchainをSW4STM32に設定しExportします。

f:id:ks7jistra:20170820004821p:plain


ダウンロードが完了したらSW4STM32のworkspaceに解凍し、SW4STM32でImportします。

f:id:ks7jistra:20170820005737p:plain


ちなみにこの状態でBuildを実行すると目茶苦茶時間がかかる上にエラー吐くのでおすすめしません。

f:id:ks7jistra:20170820005746p:plain

f:id:ks7jistra:20170820005750p:plain


Project Explorerに表示されたmbed-os-example-blinkyを右クリック→Propertiesを選び、C/C++ Buildの設定をします。

f:id:ks7jistra:20170820005753p:plain

f:id:ks7jistra:20170820005757p:plain


通常状態では Builder SettingsのUse defalut build commandにチェックが入っていますが、
Build commandを編集したいのでチェックを外し、Build commandをmakeから make -jに変更します。

Makefile generationのGenerate Makefiles automaticallyのチェックを外します。

f:id:ks7jistra:20170820005804p:plain



BehaviorタブのWorkbench Build BehaviorのBuild(Incremental build)の中のallを消します。

f:id:ks7jistra:20170820005808p:plain



ここまで設定できればOKボタンを押してPropertiesのウィンドウを閉じて問題ありません。
この状態でビルドボタンを押すと一見ビルドが通ったかの様に見えますが実際は何もビルドされません。
もう一手間加えます。

オンラインコンパイラをもう一度開いて、プログラムワークスペースで右クリック→プログラムのエクスポートでExport ToolchainをEclipse_gcc_armに設定しExportします。
ExportされたzipのBuildフォルダの中にあるMakefileをSW4STM32で読み込んでいるものと置き換えます。

f:id:ks7jistra:20170820005731p:plain


SW4STM32のmakefileはプロジェクトフォルダのDebugフォルダ内にあるのでそれと置き換えます。

f:id:ks7jistra:20170820010213p:plain



置き換えたらSW4STM32内でmakefileを開き、16行目のOBJDIR:= BUILDをOBJDIR:= Debugに変更します。

f:id:ks7jistra:20170820010339p:plain


この状態でビルドを実行するとarm-none-eabiが実行され、.elf,.bin,.hexファイルが生成されます。

f:id:ks7jistra:20170820010610p:plain


自動で書き込みを済ませるためにRun Settingsを開きます。
Ac6 STM32 Debuggingをダブルクリックするとプロジェクトに応じたデバッグ設定が生成されるので、マイコンをPCにつないでRunボタンを押します。

f:id:ks7jistra:20170820010705p:plain


OpenOCDが実行され、マイコンにプログラムが書き込まれ、実行されます。


と、このようにeclipse用のエクスポート設定を無理矢理使ってコンパイルする方法を見いだしました。(Eclipseでやろうとも思ったけれどOpenOCDの設定がうまくいかなかった)

誰がこんなやり方でやるねん感はありますが、STM32をmbed状態でオフラインでRTOSを使いたいという私と似た境遇の方がおられたら使っていただけると幸いです。
なお、今後のアップデートでこんな回りくどい方法をとらなくても良くなる可能性があります。

もっといい方法あるよとかいう方がおられましたらコメントとかTwitterでお知らせいただけると大変ありがたく思います。

 

 

オフラインでmbedが使いたい(STM32)

どうもお久しぶりです。かめらちゃんです。皆様いかがお過ごしでしょうか。

研究とかでSTM32使うことも多いのですが、皆が皆手軽に扱える代物ではないので、手軽にmbedを使って開発ができれば楽ちんですね。

ただmbed、オンラインでは手軽なんですけどオフラインではなかなか癖があるらしく、解説のブログ記事などがあまり見当たりません(探し方が悪いともいう)。

今回はみんな大好きSW4STM32

yuqlid.hatenablog.com

を使ったmbedオフラインコンパイルを紹介する記事にしたいと思います。SW4STM32のインストール自体はyuqlid君の記事内で書かれているのでインストールは済んでいるものとして進めていきます。

使用するマイコンは今手元にちょうどあったNUCLEO-F746ZGを使いたいと思います。

mbed、mbedと一口に言いますが、どうも最近は元々あったmbed 2.0とmbed OS 5という2つの使い方(?)があるそうなのですが、今回は元々のmbed 2.0を用いて作業環境構築を行いたいと思います。

[lang:ja] mbed OS 5に関する諸々 | mbed

mbedオンラインコンパイラ側でまずは適当なプロジェクトファイルを作ります。(このとき間違えてmbed OS 5のプロジェクトファイルを生成しないようにすること)。

f:id:ks7jistra:20170716180243p:plain


そのまま特にいじることなくプログラムワークスペースのプロジェクトで右クリック→プログラムのエクスポート(Ctrl+E)

f:id:ks7jistra:20170716180910p:plain

 

Export ToolchainをSW4STM32に合わせてExportし、適当な場所に解凍します。

f:id:ks7jistra:20170716180940p:plain

 

解凍したフォルダをsw4stm32でインポートします。

 

f:id:ks7jistra:20170716181023p:plain

f:id:ks7jistra:20170716181047p:plain

f:id:ks7jistra:20170716181114p:plain

インポートできたらプロジェクトのプロパティを開き、
C/C++ Build>Settingsへ移動します。
その中のMCU SettingsのFloating point hardwareがNo unitになっているので
fpv5-sp-d16に変更、
Floating-point ABIがsoftになっているのでsoftfpに変更します。

f:id:ks7jistra:20170716181152p:plain


そこまでできたらとりあえずDebugボタンを押してコンパイルします。
ちなみに失敗します。

するとこういうエラーが5件ほどでます。

f:id:ks7jistra:20170716181241p:plain

  • "MBED_CONF_PLATFORM_DEFAULT_SERIAL_BAUD_RATE" was not declared in this scope, RawSerial.h
  •  "MBED_CONF_PLATFORM_DEFAULT_SERIAL_BAUD_RATE" was not declared in this scope, Serial.h
  • "MBED_CONF_PLATFORM_DEFAULT_SERIAL_BAUD_RATE" was not declared in this scope, UARTSerial.h
  • "STM32_D11_SPI_ETHERNET_PIN" was not declared in this scope, PinNames.h

というエラーがでてきますので、RawSerial.h、Serial.h、UARTSerial.hの頭あたりに
#define MBED_CONF_PLATFORM_DEFAULT_SERIAL_BAUD_RATE 9600を追加してやります。PinNames.hのD11にエラーが出ているので、STM32_D11_SPI_ETHERNET_PINをPA_7に書き換えます。

これらは本来プロジェクトのmbedフォルダにあるtargets.jsonファイルに記述されており、そこから読み込まれるはずがSW4STM32が読み出してくれないので、直で書き直す必要があります。

変更を終えたら再びデバッグボタンを押すとエラーがなくなり、
コンパイルに成功します。

プロジェクト右クリック→Debug As→Debug Configuration
Ac6 STM32 DebuggingでNew launch configurationをクリックするとDebugもしくはRun設定が追加され、OpenOCDが実行されます。

f:id:ks7jistra:20170716181847p:plain

 

また、ボードをつないでおくと自動的にプログラムがダウンロードされ、記述したプログラムが実行されます。

おわり!!皆様よいmbedオフラインコンパイルライフを!!

 

ちなみに私はこのNucleoボードのEthernetポートが使いたいのでmbed RTOSを別途インポートする必要があるのですが、mbedRTOSをインポートした状態でオフラインコンパイルを行おうとするとエラーが頻出してまだうまく動かせてません。

うまく動かせるようになったら記事にします。

 

なお、mbed OS 5はもとよりRTOSが入ってますので、SW4STM32でやるとどうもエラーが出るので扱いませんでした。

こちらも解決したら記事にするつもりです。

 

それでは!

 

Elecrowは金曜の午前中に頼め

どうもかめらです.

自己啓発本のタイトルみたいになりましたが,基板発注のお話です.

 

私がとてもとてもお世話になっている基板外注業者に

中国深センのElecrowという会社があります.

www.elecrow.com

 

安い早い最近結構シルクが綺麗と良いことずくめな基板製造やってる業者ですが,

タイミングが良いと1週間以内に来たりするのでこの記事はそのことについて書いていこうと思います.

 

条件

  • 発送業者は深センDHLを使用します.
  • 製造はスピード製造ではなくごく一般的な製造スピードで行ってもらいます.

 

通常スピードで頼んだ場合,Elecrowの基板製造にはだいたい2~3日の日数を要します.また,土曜日曜及び中国の祝日は発送はされませんが,どうも製造ラインは動いているようです(祝日は知らん)

 

金曜の朝に基板のデータを向こうに送ると,受け取ったよ~というメールが昼頃,

製造ラインに放り込んだよ~というメールが夕方頃に来ます.

そうすると土曜日曜の間にも着々と基板製造が進み,月曜には発送がされ,

水曜日には手元に届きます.

 

水曜や木曜に頼むと,土日に発送がなされない罠が潜んでいるので金曜の朝発注をかけるのと同じタイミングで発送されます.

 

また,月曜に頼むと木曜日若しくは金曜日に発送がなされますが,これもまた税関だとかDHLだとかが土日に動かない(もしくはうごきがのっそい)ので結局届くのが月曜発送とさして変わりません.

 

結論

  • Elecrowは金曜の午前中に頼め

NUCLEO-746ZGとSTM32F7Discovery

どうも

 

お世話になっております。かめらです。

 

最近またSTM32触り始めたんですよ。

前は敬遠していたHALライブラリ使って。

 

作業環境はeclipseにいろいろ突っ込んで作った作業環境に

spiralray君がねむいさんの作った環境をアレンジしたやつをgitから落としてきて使わせていただいています。

github.com

続きを読む

不定期!ニキシー管時計をつくる!5

どうもですかめらです.

 

頼んでいたニキシー管が届きました!eBayで頼んでくるかどうか分からないどきどきを感じながら1~2ヶ月かかるかなぁと思ってましたら,2/2に頼んだのが今日届いたので,10日で届いたことになります.はやい.

追跡番号は無く,(恐らく)ウクライナからの発送でした.

 

f:id:ks7jistra:20160212235548j:plain

 

で,その写真が上の画像になります.(実際は18本ありますが,その1部だけ掲載)

 上記画像だけでも漂う足の不安さたるや・・・.

 

安かっただけにそこまで状態が良くありませんね.安かったので仕方ない.

f:id:ks7jistra:20160213000148j:plain

さっきの写真の真ん中にあったニキシー管の足を見てみると,何かの機械から取り外してきました感満載の足が.さて,これをどうやって使うか・・・・・・.

 

f:id:ks7jistra:20160213000608j:plain

 最初の画像左側にあった比較的綺麗な管.足はわりかし綺麗だがよく分からないカバーがついてる.

んで,

f:id:ks7jistra:20160213000741j:plain

何か1本かけてますね?

確か左ドットか右ドットの部分なのでまぁ使わない筈だから許容範囲でしょう.

8番ピンとかぬかしてましたが結局データシートをよーくよーく確認したらドットでした.

他にも数々の簡単には使えそうに無い管がはるばるやってきてくれました.

とりあえずニキシー管を載せるベース部分を修正して発注し直さねば・・・って感じです.

不定期!ニキシー管時計をつくる!4

こんにちは かめらです.

 

研究室のボスからはじめて進捗どうですかメールをいただきました.

 

本日の更新は頼んでいたものがぞくぞくと届いたぞっていう内容です.

まず一つ目

  • GPSモジュール(GMS-G9)

f:id:ks7jistra:20160210182810j:plain

色々な個人ブログなどでGPSモジュールならこれでしょって言われているタイプのモジュール.

精度が高く,QZSS(日本の準天頂衛星「みちびき」)の受信も可能な高性能タイプのGPS受信モジュールらしいです.

時計にそんな精度いらなくね?ってGPS系研究してる友人から言われましたが,後でGPSロガー作ろうと思ってる関係もあり,これにしました.時計だけならもっと精度低くても余裕で時刻の取得は可能であると思います.

 

その2

  • こて先たち

f:id:ks7jistra:20160210183834j:plain

斜めに切り取られたような形状のC型 T18-C2

先のとがった形状のI型       T18-I

両面から切り取ったような形状のD型 T18-D24

の3種がこて先コレクションにラインナップされました.

(C型ばかり使うようになりそう・・・

 

その3

  • K155ИД1(K155ID1)

SN74141互換のICです.ヤフオクで1個230円で売ってたので買いました.

これであとはニキシー管が着弾すれば基本的な部分は出来そう

 

f:id:ks7jistra:20160210184717j:plain

 

ではまたよろしくお願いします~

不定期!ニキシー管時計をつくる!3

ども

かめらです.

 

進捗どうですか.

 

わたしはだめです.

 

前にお伝えしたニキシー管制御用基板が届いたのです.(多分最初の記事くらいにはすでに届いてたけど)

f:id:ks7jistra:20160204010624j:plain

こんな感じに.

 

んで,Arduinoの部分だけでも作りたかったので手持ちの部品を実装すると

f:id:ks7jistra:20160204010740j:plain

こんな感じに

 

使用しているマイコンはおなじみATMega328P-AU

 

Arduino IDEのファイル>スケッチの例>11.Arduino ISP > Arduino ISPを選択し,既製品Arduinoに書き込み.

んで,Arduino Unoの

13番ピンとこちらのマイコンの17番ピン

12番ピンと16番ピン

11番ピンと15番ピン

10番ピンと29番ピン

電源同士とGND同士を結線して

 

対象マイコンボードをArduino Pro or Pro Mini, ATmega328 (5V, 16MHz)を選択し

ブートローダを書き込み.さっきの画像のやつは上手くブートローダ焼けたんですが,

さっきの画像とは別にもう一枚実装したんだけどなんか全然上手く行かなくて1日潰しました.

 

原因は半田付け不良で,クリスタル周りの半田付けをしっかりやり直したら上手く行きました.

マイコンの半田付けはしっかり確実にね☆(←原因が分からなくて一日潰したおじさん

 

無事にマイコンArduino化ができました.

これでUSBからマイコンの書き込みが出来る.

 

eBayでIN-14を頼んで発送までしてくれたらしいけどいつ来るか未知数過ぎて怖い.

あと,ヤフオクで74141互換ICを落札したし完成は間近だ.

 

あ,GMS-G9買わなきゃ