2018年11月24日

HALとCubeMxを使ったSTM32Fxxxの受信割り込み

HALとCubeMxを使ったSTM32Fxxxの受信割り込みの備忘録

33517.jpg

STM32Fをある仕事で使ってみたら慣れてくるととても使い易いのとマイコンの単価も比較的安いの他の仕事にも使おうかと評価してます。
ここで嵌ってしまったのが、受信割込のコード記述で、CubeMxで自動生成されたコードにHALライブラリを使ってどうするのか、Web上では情報がまだ少なく四苦八苦。

ちょっとメモでポイントをまとめてみた。

開発環境は、Atollic TrueSTUDIOレジスタードマーク for STM32 ver9
マイコンは、STM32F303を搭載したNucleo-144
基本的には、UARTの差ぐらいでどれを使ってもあまり変わらないみたい。

1.CubeMxを起動して新しいプロジェクトを作ると、マイコンまたはボード選択の画面になるので使用する使っているボードを選ぶ。
2.始めに144pinのマイコン画面(Pinout)がでるけど、既に自動設定されているのでそのまま。
3.次にConfigrationタブを選んで、有効になっているUART3(UART2のもある)をクリックして詳細の設定
4.ParameterSettingsで通信速度とか設定、NVICで割込をイネーブルにしておく。(重要)
5.最後にProject>Settingでプロジェクトネームを入力、Toolchain/IDEは"TrueSTUDIO"(←忘れる)にしておく。
6.最後にProject>Genarate Codeを実行すれば初期化のコードが全て自動生成される。

次に自動生成されたコートに受信割込処理を追加するが、念のため追加前に一回ビルドしてみる。(大抵は正常にビルドできてhexファイルが生成される)
CubeMxを使うとハードウェアの設定を変える時に、自分で追加したコードが勝手に上書きされないように作法(user codeのエリア)に従って書かねばならない。

1.割込待ち状態にする関数
割込を受け付けられるようにmain関数のイニシャル時(USER CODE BEGIN 2)にHALの割込処理を入れる。
HALライブラリの送信の確認のために、イニシャル時には5バイトだけ送信の記述も追加。

  /* USER CODE BEGIN 2 */
  HAL_UART_Receive_IT(&huart3, &RxData, 1);//1バイト受信割込待ちの準備
  HAL_UART_Transmit(&huart3,TData, 5, 1);
  /* USER CODE END 2 */

2.コールバック関数の追加
昔誰かが作ったソースには、作成者がコールバック関数のプロトタイプ宣言を自ら記述していたが、既に自動生成されていた。

コールバック関数は取りあえずmain.cなかのUSER CODE BEGIN 4に入れてみて実験。(後で他に移す予定)
取りあえず使わないが送信割込も記述した。

/* USER CODE BEGIN 4 */
/*--- Interrupt ---*/
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *UartHandle){}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle){
  HAL_UART_Receive_IT(&huart3, &RxData, 1);//次の割込待ち準備
}
/* USER CODE END 4 */

以上のコードを追加してビルド、デバッグモードに切り替えてRUNさせる。
UART3はデバッグインターフェースでも使っているが、仮想UARTがIDE上で使えるので便利です。Open a terminalでIDE上の認識されているComportを開けばそのまま送受信できる。

私が嵌ったのは1.割込待ち状態にする関数を書かなかったので、コールバック関数内にブレークポイントをかけて走らせ、ターミナルウィンドウから文字を送ってもまったくプレークポイントで引っかからなかった。
よくよく考えると自分で全て書いているときは、割込許可は当然なのでした。

posted by Soki at 12:02| Comment(0) | 調査・研究

2018年08月09日

TrueSTUDIOとSTM32CubeMX

TrueSTUDIOとCubeMX、STMF072を使ってUART割込みをテスト。

先々週に開発環境の調査を始めたSTM32とTrueSTUDIOですが、なんとか使い慣れてきました。

43880473_2228547573884976_5492996647388446720_o.jpg

(必要なペリフェラルとピンを選択)


この組合せの環境でいろいろ実験している人がまだ少なくちょと足踏み状態でしたが、基本は類似しているのでなんとかなりました。

手こずったのはUARTの割込受信で、割込ハンドラの記述とコールバック関数について、動くまで色々試行錯誤。
原因は購入したテンプレートのソースファイルを新規に作成したプロジェクトに組み込むと、何故かCube-mxが生成するはずの割込記述のソースが更新されないという顛末。
(便利なのですが、このあたり要注意ですね)

44028953_2228547593884974_1277535273416130560_o.jpg

(ピンを指定すると各ペリフェラルのコンフィグレーション設定が個別のダイアログでできる)


新規にプロジェクトでCube-MXでハード設定をしてコード生成し、必要な変数や関数を生成したプロジェクトにコピペしたところあっけなく動いてしまいました。CPUを変更してもHALライブラリが使えればその移植性がとても高いとみています。

このTrueSUTUDIOの良い機能として、デバッグ時にはデバッグ通信で使用しているUARTも仮想ポートとして使えるところでしょうか。

IDEの画面の一部がターミナルソフトとして使えTeratermなどを起動しなくても通信系のデバッグが出来るところです。


44178822_2228547617218305_6938153542200852480_o (1).jpg


(デバッグ時にはUARTのエミュレーションを接続したUSBポートでできるのでとっても便利)


RTOSについては、購入したサンプルがとてもわかりやすくにも改造して使えそうです。
あとはオリジナルのステートマシン制御の汎用ひな壇テンプレートを完成させるだけです。

posted by Soki at 00:00| Comment(0) | 調査・研究

2016年02月08日

電源回路シミュレーション

2月は作業がとても混み合っていて猫の手も借りたいほどですが、それでもお客様からの回答待ちで時間が出来たで次の案件の事前調査を行っています。

新しく採用するデバイスはシミュレーションが出来る場合はシミュレーション、それでも不安な時はバラックで回路試作をして様子を探る要にしています。
今回のこのデバイスは、理屈では大丈夫と思っていますが、付加回路つけてカタログにでには書いていない使い方をするでシミュレーションをしたところ、ちょっと気になるところが・・・・

なので、実際に回路を速攻で作り上げてテストする予定です。
回路図の仕上げ&アートワークを来週までに終わらせるので、今週はもう一つの開発・製作の作業の合間をみつつ、ちょこちょこと色々条件を変えながら実験し出来る限り万全を期すつもりです。

12654166_997749460298133_8994157481104345538_n.jpg

12662554_997749440298135_8757696195837694482_n.jpg

posted by Soki at 00:00| Comment(0) | 調査・研究