STM32に手を出している。STM32を追加したが、まぁいろいろうまく行かなかった。2018-q4-major.path}/bin/が、今度はobjcopyでよくわからんエラーで先に進まない。́Д`)対策は、2018年版のツールチェインをやめて2017年版にするか、2017年版のobjcopyだけを上書きコピーすること。[STM32F]以下はまったく未保証なので注意してね。何かあれば戻せるようにした上でどうぞ。1.gccのバージョンを上げてみる。バージョンが4.8.何某はないんじゃないかと思って最新のバージョンにしてみる。arm-none-eabi-gccはすでに2018バージョンがリリースされているので、それをまずPCにインストールする。!このままではArduinoから呼ばれない。STM32-Arduinoが呼んでいるarm-none-eabi-gccはArduino15フォルダー以下に存在する。IDEの環境設定からArduino15フォルダーを開くと便利。C:\Users\hamayan\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gccこのフォルダーの下に、先ほどインストールしたarm-none-eabi-gccをまるっとコピー。次にboards.txtを編集する。33行目辺りにarm-none-eabi-gccのツールチェインバージョンが書かれた行が有るので、それを編集する。2018-q2-update※nucleo_f103rbとなっているが、他のボードにも適用される模様。IDEを再起動してビルドすると上記の変更が反映される。errorが出るようになっちゃった!もうARM関連は色々いじり過ぎて、何をやっているのかさっぱり。Arduinoで出るようになってしまったので、対策を探す。以下の内容がとても近い、AVR-GCCの話だけれど。https://www.avrfreaks.net/forum/avrgnu-c-compiler-duplicate-inline-errorそこでエラーの出ているソースを編集してみる。port)とした、、、微妙だなぁ。2週間もしたらきっと忘れるので、こうやってメモしておこう。※arm-none-eabi-gccの2018バージョンは、STM32Fの開発でCoIDEでデバッガーを起動すると問題が起きるので、その一つ前の2017年バージョンに落とした。DPのプルアップの制御が異なるので、これを一々ヘッダーファイルやCソースを書き換えていてはたいへんだから、boards.txtで対応できるようにした。-DUSB_POWER_ON=1を追加し、ポート番号、ピン番号、プルアップ時の論理を渡す。}いやぁ、良かった良かった。IDEを起動して、ツール→ボードマネージャーでボードマネージャを起動し、フィルターにSAMを入力してCortex-M3に関する環境を入手する。※フィルターにSTMを入れるとSTM32F4が見つかる。2.GitHubからSTM32F用のArduinoライブラリを入手する。https://github.com/rogerclarkmelbourne/Arduino_STM32展開後、展開したフォルダーごとhardwareフォルダー以下に移動。3.適当なプロジェクトを作成する。書き込みはSTLinkを選択する。※DFU(USB書き込み)とかシリアル書き込みはできるのだけど、都度BOOTのスイッチを切り替える必要が有るので、もうSTLinkでイイじゃん!って感じ。※STM32FのUSBを有効にするためには、USBのDPのプルアップを制御しているDISK(信号名)を基板に合わせる必要が有る。MB-STM32F103ならPC13がそれになる(標準はPC12)。この基板で使用しているのはSTM32F103VETなので、以下のboard.hの111行目を編集して適応化させる。\hardware\Arduino_STM32-master\STM32F1\variants\generic_stm32f103v\board\board.h論理の変更は以下のファイルの390行目だと思われる。最後の引数を0から1かなぁ、、、と言うのは元になっているmaple-r5と言う基板が以下の様になっているからである。https://github.com/leaflabs/maple/blob/master/maple-r5/maple-r5-schematic.pdf信号名DISCをLOWにするとDPにプルアップが行われる。上記のboard.hに以下の様に定義されている。[STM32F]STM32CubeMXを使って割り込みを設定します。こんどこそRTCによる周期割り込みを利用します。1.コールバックルーチンRTC割り込みをユーザーが利用する時は、stm32f1xx_hal_rcc_ex.cの中のHAL_RTCEx_RTCIRQHandlerからユーザーのコールバックルーチンが呼ばれます。この時の関数名は指定されており、どこかのファイルに以下の様に記述します。この例では1秒周期でunixTimeと言う大域変数が1増加します。unixTime++;}2.あとはこの変数を煮るなり焼くなり。[STM32F]STM32CubeMXを使って割り込みを設定します。RTCを有効にしていますので、RTCによる周期割り込みを行います。1.STM32CubeMXのConfigurationタブからSystemのNVICをクリックしてRTCの割り込み優先度を調整します。Settingを開きます。初期のカレンダーの値を設定しています。設定していますがSTM32F103のRTCはカレンダー機能を持っていませんので、ソフトウエア的に何かをしているのだと思います。注意点は、時間は12時間表記、西暦は下位の2桁を入力する点でしょうか?3.コードを生成します。CoIDEのファイル構成が更新されますので、CoIDEのProjectウインドウ上のProject名を選択してF5キーを押します。それでビルドすると、あらあらエラーが出ちゃいました。この作業、2回目ですが、もしかして2回目以降はこのバグが出るのかも。4.バッテリーバックアップ付き対策このAitendoの基板にはバッテリーが搭載されている為、STM32F103のバックアップドメインは電源が落とされてしまっても、元の内容が消えません。RTCはこのバックアップドメインに属するので、電源断時も動いています。このMX_RTC_Init関数の内部ではバックアップドメインのバックアップレジスタの内容が、以前設定された値であるかどうかでRTCの状況を判断しています。その値が正常であれば、RTCのカウンターの値(カレンダー)を変更しません!ってことが通常処理なのですが、今は今の時間を刻んで欲しいので、0x32F2と比較しているIF文を無効にしました。5.割り込み許可1秒割り込み許可をMX_RTC_Init()の後に記述します。*/6.動かすセミホスティングでカレンダー出力しています。7.割り込みが来ている事を確認してみるstm32f1xx_it.cの中にRTC_IRQHandlerと言う割り込みハンドラーが追加されています。この中にBREAKを貼り、止めてみました。このカレンダー機能は要らないかなぁ、、、ひじょうにbuggyで、このまま使い続けて大丈夫なんだろうか、、、と思っているところです、、、はぁ。[STM32F]STM32CubeMXコードジェネレータの出力を、CoIDE環境で動かしたい!と言う話STM32CubeMXで機能を追加してコードを生成する度に、mainの中のwhileループ辺りが変な事になるなぁ!と思っていたんです。最初に生成されるコードが以下の様に、気持ち悪い入れ子構造になっています。*/これ、以下の様に直しましょう。*/コードジェネレーター、たぶんまだまだ不具合があるので、コードを再生成する前に上手く動いていた前のバージョンは保存しておいた方が良いかも。それと、頑張って作った重要なコードは、なるべくコードジェネレーターに依存しない別のファイルに書いた方が良いと思う。続くんじゃないかなぁ。V1ではどうだっけ?他のオンチップデバッガーの状況は?さっぱり知りませんが、セミホスティング便利です。従来UARTの一部を使って、動作中のメッセージ等を出力してデバッグとかしている事も多いと思いますが、セミホスティングを使えば特別にI/Fを用意する事無く、デバッガーの画面にメッセージを出力する事も、なにか文字を受信することもできます。Enableにチェックを入れるだけでした。main.cのこの部分にsemihosting.hをインクルードします。main.hのこの部分に以下のマクロを追加します。*/mainのwhileループにこれを追加します。前回まではLED1をチカチカしました。今回はSTM32CubeMXでGPIOの出力を増やし、4つのLEDチカチカを行います。1.STM32CubeMXを起動し、先に作成したSTM32CubeMXのプロジェクトを開き、PIN配置の画面でGPIOの出力を追加します。LEDとの接続は図の様になっています。2.LEDにラベルを付加します。3.コードを生成すると変更の必要なファイルは上書きされます。END」で終わる範囲内は保護されるような気がします。今回はmain.hとmain.cに記述が追加されています。4.だらっ!としたコードを書いてみました。続くんじゃないかなぁ。最近のコメントこんなものでよろしければ。場合..ありがとうございます。Electronicsアットマークエレ不要なデバイスドライバーを削除ダウンロードInterface付属SH2基板のSRAM有り/無しデバックモニタとHOS-V4同梱バージョンHOS本のサンプルをH8/3048Fでデバックする為のデバックモニタH8/3048Fのセクション情報ファイルインポートして使います。