SSブログ

STM32CubeMXに関する事 6 RTC割り込みを使う 2 [STM32F]

STM32CubeMXを使って割り込みを設定します。
makeCubeMxProjectForCoIDE_044.png


こんどこそRTCによる周期割り込みを利用します。

1.コールバックルーチン
RTC割り込みをユーザーが利用する時は、stm32f1xx_hal_rcc_ex.cの中のHAL_RTCEx_RTCIRQHandlerからユーザーのコールバックルーチンが呼ばれます。
この時の関数名は指定されており、どこかのファイルに以下の様に記述します。
この例では1秒周期でunixTimeと言う大域変数が1増加します。
/*************************************************************************/
/* RTC interrupt call back function.                                     */
/*************************************************************************/
void HAL_RTCEx_RTCEventCallback( RTC_HandleTypeDef *hrtc )
{
  unixTime++;
}

2.あとはこの変数を煮るなり焼くなり。



気を取り直して、、、

ARMマイコンCortex-M教科書 (ARM教科書)

ARMマイコンCortex-M教科書 (ARM教科書)

  • 作者: 桑野 雅彦 共著 中森 章
  • 出版社/メーカー: CQ出版
  • 発売日: 2016/11/21
  • メディア: 単行本



アームズマガジン17年10月号

アームズマガジン17年10月号

  • 作者:
  • 出版社/メーカー: ホビージャパン
  • 発売日: 2017/08/26
  • メディア: 雑誌



nice!(0)  コメント(0) 

STM32CubeMXに関する事 6 RTC割り込みを使う 1 [STM32F]

STM32CubeMXを使って割り込みを設定します。
makeCubeMxProjectForCoIDE_038.png


すでにRTCを有効にしていますので、RTCによる周期割り込みを行います。

1.STM32CubeMXのConfigurationタブからSystemのNVICをクリックしてRTCの割り込み優先度を調整します。
makeCubeMxProjectForCoIDE_038.png


2.ControlのRTCをクリックしてParameter Settingを開きます。
初期のカレンダーの値を設定しています。設定していますがSTM32F103のRTCはカレンダー機能を持っていませんので、ソフトウエア的に何かをしているのだと思います。
注意点は、時間は12時間表記、西暦は下位の2桁を入力する点でしょうか?
makeCubeMxProjectForCoIDE_039.png


3.コードを生成します。CoIDEのファイル構成が更新されますので、CoIDEのProjectウインドウ上のProject名を選択してF5キーを押します。
それでビルドすると、あらあらエラーが出ちゃいました。この作業、2回目ですが、もしかして2回目以降はこのバグが出るのかも。
makeCubeMxProjectForCoIDE_040.png


4.バッテリーバックアップ付き対策
このAitendoの基板にはバッテリーが搭載されている為、STM32F103のバックアップドメインは電源が落とされてしまっても、元の内容が消えません。RTCはこのバックアップドメインに属するので、電源断時も動いています。
このMX_RTC_Init関数の内部ではバックアップドメインのバックアップレジスタの内容が、以前設定された値であるかどうかでRTCの状況を判断しています。もしその値が正常であれば、RTCのカウンターの値(カレンダー)を変更しません!ってことが通常処理なのですが、今は今の時間を刻んで欲しいので、0x32F2と比較しているIF文を無効にしました。
makeCubeMxProjectForCoIDE_042.png


5.割り込み許可
1秒割り込み許可をMX_RTC_Init()の後に記述します。
  /* USER CODE BEGIN 2 */
  HAL_RTCEx_SetSecond_IT( &hrtc );
  /* USER CODE END 2 */
6.動かす
セミホスティングでカレンダー出力しています。
makeCubeMxProjectForCoIDE_041.png

7.割り込みが来ている事を確認してみる stm32f1xx_it.cの中にRTC_IRQHandlerと言う割り込みハンドラーが追加されています。 この中にBREAKを貼り、止めてみました。 makeCubeMxProjectForCoIDE_043.png
まあでも、このカレンダー機能は要らないかなぁ、、、 ひじょうにbuggyで、このまま使い続けて大丈夫なんだろうか、、、と思っているところです、、、はぁ。
ARMマイコンCortex-M教科書 (ARM教科書)

ARMマイコンCortex-M教科書 (ARM教科書)

  • 作者: 桑野 雅彦 共著 中森 章
  • 出版社/メーカー: CQ出版
  • 発売日: 2016/11/21
  • メディア: 単行本
アームズマガジン17年10月号

アームズマガジン17年10月号

  • 作者:
  • 出版社/メーカー: ホビージャパン
  • 発売日: 2017/08/26
  • メディア: 雑誌

nice!(0)  コメント(0) 

STM32CubeMXに関する事 4 CoIDEで開発 6 [STM32F]

STM32CubeMXコードジェネレータの出力を、CoIDE環境で動かしたい!と言う話
makeCubeMxProjectForCoIDE_033.png


STM32CubeMXで機能を追加してコードを生成する度に、mainの中のwhileループ辺りが変な事になるなぁ!と思っていたんです。
もともと最初に生成されるコードが以下の様に、気持ち悪い入れ子構造になっています。
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

これ、以下の様に直しましょう。たぶん、、、
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  }
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
  /* USER CODE END 3 */

コードジェネレーター、たぶんまだまだ不具合があるので、コードを再生成する前に上手く動いていた前のバージョンは保存しておいた方が良いかも。
それと、頑張って作った重要なコードは、なるべくコードジェネレーターに依存しない別のファイルに書いた方が良いと思う。


たぶん続くんじゃないかなぁ。

ディジタル回路設計とコンピュータアーキテクチャ[ARM版]

ディジタル回路設計とコンピュータアーキテクチャ[ARM版]

  • 作者: デイビッド・M・ハリス サラ・L・ハリス
  • 出版社/メーカー: 星雲社
  • 発売日: 2016/04/25
  • メディア: 大型本



nice!(0)  コメント(0) 

STM32CubeMXに関する事 5 セミホスティングを使う [STM32F]

ST-LINK V2だけの機能なのか?ST-LINK V1ではどうだっけ?他のオンチップデバッガーの状況は?さっぱり知りませんが、セミホスティング便利です。

従来UARTの一部を使って、動作中のメッセージ等を出力してデバッグとかしている事も多いと思いますが、セミホスティングを使えば特別にI/Fを用意する事無く、デバッガーの画面にメッセージを出力する事も、なにか文字を受信することもできます。
makeCubeMxProjectForCoIDE_036.png



使い方は簡単。プロジェクトにリポジトリでSemihostingを追加し、CoIDEの設定(Configuration)のDebuggerタブでAdvanceのSemihosting Enableにチェックを入れるだけでした。
makeCubeMxProjectForCoIDE_023.png


main.cのこの部分にsemihosting.hをインクルードします。
makeCubeMxProjectForCoIDE_037.png


main.hのこの部分に以下のマクロを追加します。
/* USER CODE BEGIN Private defines */
/* debug */
#if defined(__DEBUG__)
#define  debugPrint(fmt,param)  do{ char buf[128]; sprintf(buf,fmt,param); SH_SendString(buf);} while(0)
#else
#define  debugPrint(fmt,param)
#endif /*__DEBUG__*/
/* USER CODE END Private defines */

mainのwhileループにこれを追加します。
    debugPrint( "loop count = %d\r\n", count++ );

以上



ディジタル回路設計とコンピュータアーキテクチャ[ARM版]

ディジタル回路設計とコンピュータアーキテクチャ[ARM版]

  • 作者: デイビッド・M・ハリス サラ・L・ハリス
  • 出版社/メーカー: 星雲社
  • 発売日: 2016/04/25
  • メディア: 大型本



nice!(0)  コメント(0) 

STM32CubeMXに関する事 4 CoIDEで開発 5 [STM32F]

STM32CubeMXコードジェネレータの出力を、CoIDE環境で動かしたい!と言う話
makeCubeMxProjectForCoIDE_033.png


前回まではLED1をチカチカしました。
今回はSTM32CubeMXでGPIOの出力を増やし、4つのLEDチカチカを行います。
1.STM32CubeMXを起動し、先に作成したSTM32CubeMXのプロジェクトを開き、PIN配置の画面でGPIOの出力を追加します。LEDとの接続は図の様になっています。
MB-STM32-led_sch.jpg


makeCubeMxProjectForCoIDE_032.png


2.LEDにラベルを付加します。
makeCubeMxProjectForCoIDE_033.png


3.コードを生成すると変更の必要なファイルは上書きされます。ただしユーザーが記述したコード、おそらく「USER CODE BEGIN」で始まり、「USER CODE END」で終わる範囲内は保護されるような気がします。
今回はmain.hとmain.cに記述が追加されています。
makeCubeMxProjectForCoIDE_034.png


4.だらっ!としたコードを書いてみました。
makeCubeMxProjectForCoIDE_035.png




たぶん続くんじゃないかなぁ。

ディジタル回路設計とコンピュータアーキテクチャ[ARM版]

ディジタル回路設計とコンピュータアーキテクチャ[ARM版]

  • 作者: デイビッド・M・ハリス サラ・L・ハリス
  • 出版社/メーカー: 星雲社
  • 発売日: 2016/04/25
  • メディア: 大型本



nice!(0)  コメント(0) 

STM32CubeMXに関する事 4 CoIDEで開発 4 [STM32F]

STM32CubeMXコードジェネレータの出力を、CoIDE環境で動かしたい!と言う話
makeCubeMxProjectForCoIDE_028.png


前回まではCoIDEで生成したコードを取り込みました。
今回はLEDチカチカを記述していきます。
1.STM32CubeMXの出力にはサンプルが含まれていないので、生成されたコードの使い方がイマイチ判りません。
STマイクロのサイトに行って、このファイルを落としてくると周辺機能ごとのサンプルが有りますので、これを参照します。
http://www.st.com/en/embedded-software/stm32cube-embedded-software.html?querycriteria=productId=LN1897
makeCubeMxProjectForCoIDE_024.png


2.先ほどのPC6にラベル付けを行った定義はmain.hに、初期化コードはmain.cに書かれています。
makeCubeMxProjectForCoIDE_025.png


makeCubeMxProjectForCoIDE_026.png


3.mainのwhileループの中にチカチカを書いてみました。
HAL_GPIO_WritePinはstm32f1xx_hal_gpio.hに、HAL_Delayはstm32f1xx_hal.hに宣言されていますが、なぜかHAL_Delayにはエラー表示が、、、
makeCubeMxProjectForCoIDE_027.png


makeCubeMxProjectForCoIDE_030.png


4.デバッガーを起動して、今回はREMAPによるデバッガーの暴走は発生しませんでした(笑)。
makeCubeMxProjectForCoIDE_031.png




たぶん続く。

STM32マイコン徹底入門 (TECH I Processor)

STM32マイコン徹底入門 (TECH I Processor)

  • 作者: 川内 康雄
  • 出版社/メーカー: CQ出版
  • 発売日: 2010/10/29
  • メディア: 単行本






nice!(0)  コメント(0) 

STM32CubeMXに関する事 4 CoIDEで開発 3 [STM32F]

STM32CubeMXコードジェネレータの出力を、CoIDE環境で動かしたい!と言う話
makeCubeMxProjectForCoIDE_028.png


前回まではSTM32CubeMXを使ってコード生成しました。
今回はCoIDEで生成したコードを取り込みます。
1.STM32CubeMXの出力先に、先に生成したCoIDEのプロジェクトフォルダーを指定したためか、C Libraryとかセミホスティングのコードが削除されてしまいました。諦めてもう一度リポジトリから追加します。
また、ファイルエクスプローラからドラッグ&ドロップでCoIDEのプロジェクトツリーに
Drivers、Inc、Src、startupの4つを放り込みます。
makeCubeMxProjectForCoIDE_018.png


2.CoIDEの設定(Configuration)タブを開き、Compileタブから設定します。赤枠の定義を追加します。
makeCubeMxProjectForCoIDE_021.png


3.Linkタブでオプションを赤枠の通りに、リンカースクリプトをTrueIDE用に生成されたスクリプトを選択します。
makeCubeMxProjectForCoIDE_019.png


4.DebuggerタブでSWDとなっている事を確認します。セミホスティングを使う場合はSemiHosting enableにチェック
makeCubeMxProjectForCoIDE_023.png


5.ビルドするとエラーが出ます(笑)。
セミホスティング機能を追加した時に追加されたファイルのsh_cmd.sのHardFault_Handlerがぶつかっている為です。プロジェクトから削除してしまいます。
makeCubeMxProjectForCoIDE_020.png


嘘です。sh_cmd.sを削除するのではなく、sh_cmd.sの15行目辺りのglobal宣言をコメントアウトします。こんな風に。
/*.global HardFault_Handler*/



またまた長いので続く。

STM32マイコン徹底入門 (TECH I Processor)

STM32マイコン徹底入門 (TECH I Processor)

  • 作者: 川内 康雄
  • 出版社/メーカー: CQ出版
  • 発売日: 2010/10/29
  • メディア: 単行本






nice!(0)  コメント(0) 

STM32CubeMXに関する事 4 CoIDEで開発 2 [STM32F]

STM32CubeMXコードジェネレータの出力を、CoIDE環境で動かしたい!と言う話
makeCubeMxProjectForCoIDE_028.png


前回まではCoIDEでプロジェクトを新規生成しました。
今回はSTM32CubeMXを使ってコード生成します。

1.STM32CubeMXを起動して
makeCubeMxProjectForCoIDE_006.png


2.ポチポチとマイコンを選択
makeCubeMxProjectForCoIDE_007.png


3.PIN配置の画面が開く
makeCubeMxProjectForCoIDE_008.png


4.マイコンのICの足をクリックすると、この端子の機能が選択できるようになる。今回はGPIOの出力に設定。また左のペインのSYSを展開してデバッガ機能としてSWDを有効化。
makeCubeMxProjectForCoIDE_009.png


5.RCC、RTC等はクロックソースに応じて有効化。
makeCubeMxProjectForCoIDE_011.png


6.クロックの設定のタブを開き、クロックソースとか、倍率を設定。今回は外部に8Mのクリスタルを実装している事から、このマイコンの最大の72MHzで動くように設定。
makeCubeMxProjectForCoIDE_012.png


MB-STM32-mpu_sch.jpg


7.設定のタブでGPIOをクリックし、LEDを接続してあるPC6に適当なラベルを付加
makeCubeMxProjectForCoIDE_014.png


makeCubeMxProjectForCoIDE_013.png


8.電力計算機能の使い方はよく判らんので、スルー。
makeCubeMxProjectForCoIDE_015.png


9.生成するプロジェクトの名前などの設定。ToolchainはTrueIDEを選択している。
makeCubeMxProjectForCoIDE_016.png


10.生成するプロジェクトの生成コードに関する設定。必要な機能のみ生成と未接続の端子をアナログ扱い?
makeCubeMxProjectForCoIDE_017.png


11.コードの生成を行う。また、コード生成プロジェクト自身を適当なフォルダーに保存。
makeCubeMxProjectForCoIDE_029.png


makeCubeMxProjectForCoIDE_010.png




またまた長いので続く。

ARMマイコンCortex-M教科書 (ARM教科書)

ARMマイコンCortex-M教科書 (ARM教科書)

  • 作者: 桑野 雅彦 共著 中森 章
  • 出版社/メーカー: CQ出版
  • 発売日: 2016/11/21
  • メディア: 単行本



STM32マイコン徹底入門 (TECH I Processor)

STM32マイコン徹底入門 (TECH I Processor)

  • 作者: 川内 康雄
  • 出版社/メーカー: CQ出版
  • 発売日: 2010/10/29
  • メディア: 単行本



nice!(0)  コメント(0) 

STM32CubeMXに関する事 4 CoIDEで開発 1 [STM32F]

STM32CubeMXコードジェネレータの出力を、CoIDE環境で動かしたい!と言う話
makeCubeMxProjectForCoIDE_028.png


まずCoIDEでプロジェクトを新規生成します。ターゲットはAitendoのSTM32F103VE基板(MB-STM32F103)、なんと引っ越し価格?で一枚999円だす。
※ただしUSB/シリアルのPL-2303HXのドライバがWindows10に対応していないくて、ちょっとだけ苦労します。ここを参照-> http://www.ifamilysoftware.com/news37.html
mb-stm32f103_001.jpg


このボードには4つのLEDが実装されています。接続はこんな感じです。って、回路図が断片化したjpegファイルしか無くてつらい、、、
MB-STM32-led_sch.jpg


PC6に接続されているLED、D1をチカチカさせてみましょう。

1.CoIDEで新規プロジェクトを作成開始
makeCubeMxProjectForCoIDE_001.png


2.CHIPを選択
makeCubeMxProjectForCoIDE_002.png


3.STM32F103VEを選択
makeCubeMxProjectForCoIDE_003.png


4.リポジトリで最低限の機能を追加。欲しいのはC Libraryと、デバック用にセミホスティング
※とは言え、後程Stm32CubeMXを動かすと無残にも削除?されてしまうので、何も選択しなくてもいいのかも、、、
makeCubeMxProjectForCoIDE_004.png


5.main.cとか要らないので、、、フォルダーとプロジェクトから削除、
makeCubeMxProjectForCoIDE_005.png



長いので続く!

ディジタル回路設計とコンピュータアーキテクチャ[ARM版]

ディジタル回路設計とコンピュータアーキテクチャ[ARM版]

  • 作者: デイビッド・M・ハリス サラ・L・ハリス
  • 出版社/メーカー: 星雲社
  • 発売日: 2016/04/25
  • メディア: 大型本



STM32マイコン徹底入門 (TECH I Processor)

STM32マイコン徹底入門 (TECH I Processor)

  • 作者: 川内 康雄
  • 出版社/メーカー: CQ出版
  • 発売日: 2010/10/29
  • メディア: 単行本



nice!(0)  コメント(0) 

STM32CubeMXに関する事 3 クロックツリー [STM32F]

STM32CubeMXコードジェネレータのこういうのは、本当にイイねー!
新人君へのクロック系統の説明にもとても役に立った。
stm32cubemx_002.png


nice!(1)  コメント(0) 

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。