truestudio 用 l152cd lps u1 の説明 v001 …tri-s.world.coocan.jp/.../project_l152cd_lps_u1.pdf1...

43
1 TrueSTUDIO 用 L152CD_LPS_U1 の説明 V001 2014/10/19 STM32L152C-DISCO に搭載されている CPU STM32L152RC の最大の特徴である超低消費電力モードを使用する プロジェクトサンプルです。 RTC を使用して指定時刻を判定して指定時刻なら指定された処理に分岐するプログラムです。 CPU の動作周波数を 32.768KHz にして Low Power Sleep モードに移行します。 RTC の 1 秒割り込みで起床して時刻を判定します。指定時刻でない場合、またすぐに Low Power Sleep モードに移行します。 指定された時刻だった場合、CPU の動作周波数を 32MHz にして指定モジュールを呼び出します。 処理が終了したら、動作周波数を 32.768KHz にして再度 Low Power Sleep モードに移行します。 時刻の判定には次の3種類があります。 1) 正時インターバルを最大 2 個指定することができます。指定した時刻に指定モジュールを呼び出します。 2) 定刻を指定を最大 2 個指定することができます。毎日、指定した時刻に指定モジュールを呼び出します。 3) 日付・時刻を最大 2 個指定することができます。指定した日付・時刻に指定モジュールを呼び出します。 指定モジュールでは、とりあえず LED LD4(青)を点滅させています。 ユーザーが指定モジュール内のプログラムを記述することにより希望の処理を実現できます。 指定時刻の設定は、アプリケーション Access_Timetable により行います。 RS232C で PC と STM32L152C-DISCO とを接続して UART(非同期シリアル通信)により設定します。 アプリケーション Access_Timetable は本プロジェクトサンプル TrST_L152CD_LPS_U1 掲載のページでダウンロードできます。 プロジェクトの開始番地は 0x08000000 です。デバッグが可能です。

Upload: others

Post on 25-Jun-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

1

TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19

STM32L152C-DISCOに搭載されているCPU STM32L152RCの最大の特徴である超低消費電力モードを使用する

プロジェクトサンプルです。

RTCを使用して指定時刻を判定して指定時刻なら指定された処理に分岐するプログラムです。

CPUの動作周波数を32.768KHzにして Low Power Sleepモードに移行します。

RTCの 1秒割り込みで起床して時刻を判定します。指定時刻でない場合、またすぐに Low Power Sleepモードに移行します。

指定された時刻だった場合、CPUの動作周波数を32MHzにして指定モジュールを呼び出します。

処理が終了したら、動作周波数を32.768KHzにして再度Low Power Sleepモードに移行します。

時刻の判定には次の3種類があります。

1) 正時インターバルを最大2個指定することができます。指定した時刻に指定モジュールを呼び出します。

2) 定刻を指定を最大2個指定することができます。毎日、指定した時刻に指定モジュールを呼び出します。

3) 日付・時刻を最大2個指定することができます。指定した日付・時刻に指定モジュールを呼び出します。

指定モジュールでは、とりあえず LED LD4(青)を点滅させています。

ユーザーが指定モジュール内のプログラムを記述することにより希望の処理を実現できます。

指定時刻の設定は、アプリケーションAccess_Timetableにより行います。

RS232CでPCと STM32L152C-DISCOとを接続して UART(非同期シリアル通信)により設定します。

アプリケーションAccess_Timetableは本プロジェクトサンプルTrST_L152CD_LPS_U1掲載のページでダウンロードできます。

プロジェクトの開始番地は 0x08000000 です。デバッグが可能です。

Page 2: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

2

目次

1. 指定処理への分岐と指定時刻について.............................................................................................................................................................................................. 4

1.1. 時刻による指定処理への分岐 ..................................................................................................................................................................................................... 4

1.2. 指定時刻について ............................................................................................................................................................................................................................... 4

1) 正時インターバル ................................................................................................................................................................................................................................... 4

2) 定刻................................................................................................................................................................................................................................................................ 4

3) 日付・時刻 .................................................................................................................................................................................................................................................. 4

2. RS232Cの UART(非同期シリアル通信)による接続 .................................................................................................................................................................... 5

2.1. UART信号 .............................................................................................................................................................................................................................................. 5

2.2. RS232C ドライバ................................................................................................................................................................................................................................... 5

2.3. RS232Cケーブル接続図 ............................................................................................................................................................................................................... 6

2.4. UART通信確認のための接続例 ................................................................................................................................................................................................ 6

3. プログラム実行時の動作と確認 ............................................................................................................................................................................................................... 7

3.1. プログラム実行時の動作 ................................................................................................................................................................................................................. 7

3.2. 動作確認 .................................................................................................................................................................................................................................................. 7

3.3. 消費電流 .................................................................................................................................................................................................................................................. 7

3.4. Sleep時のデバッグについて .......................................................................................................................................................................................................... 8

4. 指定時刻設定アプリケーションAccess_Timetableのインストール .................................................................................................................................... 10

4.1. アプリケーションAccess_Timetableのインストールファイルのダウンロード ....................................................................................................... 10

4.2. ダウンロードした圧縮ファイルAccess_Timetable_Install.zipの解凍 ........................................................................................................................ 10

4.3. アプリケーションAccess_Timetableのインストール........................................................................................................................................................ 11

5. アプリケーションAccess_Timetableによる指定時刻の設定 ................................................................................................................................................. 12

5.1. アプリケーションAccess_Timetableの起動 ........................................................................................................................................................................ 12

5.2. COMポートの選択 ............................................................................................................................................................................................................................ 13

5.3. RTCの時刻設定 ............................................................................................................................................................................................................................... 15

1) RTCの時刻取得 .................................................................................................................................................................................................................................. 15

2) RTCの時刻設定 .................................................................................................................................................................................................................................. 16

5.4. 指定できる時刻の種類 .................................................................................................................................................................................................................. 17

1) 正時インターバル ................................................................................................................................................................................................................................ 17

2) 定刻............................................................................................................................................................................................................................................................. 17

3) 日付・時刻 ............................................................................................................................................................................................................................................... 17

5.5. 正時インターバルの設定 .............................................................................................................................................................................................................. 17

1) 正時インターバルの選択 ................................................................................................................................................................................................................. 17

2) 正時インターバルとオフセットの設定 ........................................................................................................................................................................................ 18

5.6. 定刻の設定 .......................................................................................................................................................................................................................................... 19

1) 定刻の選択 ............................................................................................................................................................................................................................................. 19

2) 定刻の設定 ............................................................................................................................................................................................................................................. 19

5.7. 日付・時刻の設定 ............................................................................................................................................................................................................................. 20

1) 日付・時刻の選択 ................................................................................................................................................................................................................................ 20

2) 日付・時刻の設定 ................................................................................................................................................................................................................................ 21

5.8. モジュール分岐のON/OFFの設定 ....................................................................................................................................................................................... 22

5.9. CPU基板への時刻パラメータTimetableの設定 ............................................................................................................................................................ 22

5.10. CPU基板に設定されているTimetableの取得 ............................................................................................................................................................. 23

5.11. 時刻パラメータをファイルに保存 .......................................................................................................................................................................................... 23

5.12. 時刻パラメータファイルを読み込む。 ................................................................................................................................................................................ 25

6. プロジェクトの構成 ......................................................................................................................................................................................................................................... 26

6.1. プロジェクト L152CD_LPS_U1の起動画面........................................................................................................................................................................... 26

6.2. 追加したソース・フォルダとファイル........................................................................................................................................................................................ 26

6.3. 指定時刻による対応モジュールへの分岐 ......................................................................................................................................................................... 27

Page 3: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

3

1) 指定時刻と対応モジュール ........................................................................................................................................................................................................... 27

7. 主なモジュールの説明 .............................................................................................................................................................................................................................. 28

7.1. ソース・フォルダ src内のファイル ........................................................................................................................................................................................... 28

7.2. HandleCLK............................................................................................................................................................................................................................................. 30

7.3. HandleEEPROM ................................................................................................................................................................................................................................... 30

7.4. HandleGPIO ........................................................................................................................................................................................................................................... 31

7.5. HandleRTC ............................................................................................................................................................................................................................................ 31

7.6. HandleTIM .............................................................................................................................................................................................................................................. 33

7.7. HandleUART ......................................................................................................................................................................................................................................... 34

7.8. UserPrograms ..................................................................................................................................................................................................................................... 35

7.9. Communicate_UART ........................................................................................................................................................................................................................ 39

Page 4: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

4

1. 指定処理への分岐と指定時刻について

1.1. 時刻による指定処理への分岐

プロジェクト L152CD_LPS_U1では、RTCの 1秒ごとの割り込みで指定時刻であるかを判定して、

その時刻であれば指定処理へ分岐します。

指定時刻の設定はPCと STM32L152C-DISCOとをRS232Cで接続し、アプリケーションAccess_Timetableを使用して

UART(非同期シリアル通信)により行います。

アプリケーションAccess_Timetableは本プロジェクトサンプルTrST_L152CD_LPS_U1掲載のページでダウンロードできます。

1.2. 指定時刻について

指定時刻には次の 3種類があります。

1) 正時インターバル

正時とは時計のそれぞれの時刻の 00分00秒 のことをいいます。

1日を24時間であらわすと 00時00時00分、01時00分00秒、02時00分00秒、 ・・・

・・・ 22時00分00秒、23時00分00秒

のことをいいます。

インターバルを 60分にすれば、そのまま 24回、インターバルを 120分にすれば

00時00時00分、02時00分00秒、04時00分00秒、 ・・・ 20時00分00秒、22時00分00秒

の 12回が指定時刻になりその時刻に指定モジュールを呼び出します。

正時インターバルは2個指定できます。指定した時刻に指定モジュールを呼び出します。

2) 定刻

hh時mm分ss秒 を指定してください。

毎日 1回 指定した時刻に指定モジュールを呼び出します。

定刻は2個指定できます。指定した時刻に指定モジュールを呼び出します。

3) 日付・時刻

未来のYYYY年MM月DD日 hh時mm分ss秒を指定してください。

指定した日付・時刻になったときに1回だけ指定モジュールを呼び出します。

日付・時刻は2個指定できます。指定した日付・時刻に指定モジュールを呼び出します。

Page 5: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

5

2. RS232CのUART(非同期シリアル通信)による接続

STM32L152C-DISCOの UART(非同期シリアル通信)に使用する信号と接続相手との接続は以下の通りです。

2.1. UART信号

UART信号表

番号 CPU機能名 CPU信号名 基板コネクタピン番号 方向 接続相手の

信号名

1 USART1_TX PA9 P2-22 --- > RxD

2 USART1_RX PA10 P2-21 < --- TxD

3 GND GND P1-2, P1-9, P1-28

P2-2, P2-5, P2-28

< --- > GND

GNDは、いずれかの 1ピンに接続すればOKです。

UART信号にRS232C ドライバを接続して RS232Cレベルの信号どうしで接続すればRS232C通信を行うことが

できます。

2.2. RS232Cドライバ

RS232C ドライバの例を以下に示します。

RS232Cストレートケーブル接続の場合の DSUB-9Sへの接続例を以下に示します。

この例ではDSUB-9SにはTxD, RxD, GNDの3本の信号以外は接続されません。

番号 RS232C

ドライバ

方向 ドライバ側

D-SUB 9S

ストレートケーブル側

D-SUB 9P

1 RS1_TxD --- > 2 2 RxD

2 RS1_RxD < --- 3 3 TxD

3 GND < --- > 5 5 GND

Page 6: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

6

2.3. RS232Cケーブル接続図

2.4. UART通信確認のための接続例

アプリケーション Access_Timetableを使用して、UART(非同期シリアル通信)によりCPUにアクセスします。

PCからコマンド文字列を送信してCPU内蔵の RTCに対して日付・時刻の設定と取得を行います。

また、CPU内蔵の EEPROMに対して時刻パラメータの書き込みおよび取得を行います。

動作確認を行うための接続は以下のようになります。この例はRS232Cレベルで UART信号を接続しています。

STM32L152C-DISCO

RS232C

ドライバ

DSUB-9S

DSUB-9P

DSUB-9S

ストレートケーブル

接続機器

(PCなど)

図2.3.

RS232C

ドライバ DSUB-9S

PC

RS232C変換ケーブル

STM32L152C-DISCO

図2.4.

USBポート

USBケーブル : 電源供給 および ST-LINKのため A

MiniB

Page 7: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

7

3. プログラム実行時の動作と確認

3.1. プログラム実行時の動作

1) プログラムを実行すると基板上の LED LD3(緑)が 3秒に1回 チカっと点灯します。

Low Power Sleepモードから起床して LD3(緑)を点灯し、すぐに消灯して再び Low Power Sleepモードになります。

指定時刻の処理がある場合は、処理が終了するまでSleepしません。

2) アプリケーションAccess_Timetableを使用して、時刻を設定します。

プログラムは指定時刻になるとその指定時刻に対応する処理モジュールを呼び出します。

それぞれの呼び出す処理モジュールの動作は以下の通りです。

a) 正時インターバル0 の時刻で呼び出すモジュールの処理 LD4(青) 点滅間隔100mSec 点滅5回

b) 正時インターバル1 の時刻で呼び出すモジュールの処理 LD4(青) 点滅間隔100mSec 点滅10回

c) 定刻0 の時刻で呼び出すモジュールの処理 LD4(青) 点滅間隔200mSec 点滅4回

d) 定刻1 の時刻で呼び出すモジュールの処理 LD4(青) 点滅間隔200mSec 点滅8回

e) 日付・時刻0 の時刻で呼び出すモジュールの処理 LD4(青) 点滅間隔400mSec 点滅3回

f) 日付・時刻1 の時刻で呼び出すモジュールの処理 LD4(青) 点滅間隔400mSec 点滅6回

3) CPUの動作

a) CPUは通常Low Power Sleepモードになっています。その時の動作周波数は32.768kHzです。

b) RTCによる割り込みで1秒に一回起床します。起床すると動作周波数を32MHzにして指定時刻であるかを判定します。

c) 指定時刻であった場合、対応する処理モジュールを呼び出します。

d) 処理が終了すると、再び Low Power Sleepモードに移行します。

e) Low Power Sleepモードのとき、USART1_RX(PA10)のピンは入力に設定されていて信号の立ち上がりエッジで

外部割込みを発生するように設定されます。

f) 外部割込みが4回発生すると動作周波数を32MHzにして、UART1の初期化を行い通信可能になります。

g) 通信が終了すると、再び Low Power Sleepモードに移行します。

3.2. 動作確認

アプリケーションAccess_Timetableを使用して、指定時刻を設定します。

指定した時刻に上述のそれぞれの LD4(青)の動作を行うかを確認します。

アプリケーションAccess_Timetableのインストールと指定時刻の設定については後述します。

3.3. 消費電流

a) Low Power Sleepモードのとき : 50μA未満

b) 動作周波数32MHzのとき : 約12mA

Page 8: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

8

3.4. Sleep時のデバッグについて

Sleep時にST-LINKとの接続を保ってデバッグする方法があります。

1) Sleep前に呼び出すモジュール

以下のモジュールを読み出すことにより、Sleepモード時に debugger(ST-LINK)との接続が保たれます。

//-----------------------------------------------------------------

// Keep debugger connection during SLEEP mode

//-----------------------------------------------------------------

// Sleep状態でもデバッガとの接続が切れないようにすることができる。

//-----------------------------------------------------------------

// ただし、ブレークポイントの設定と解除は、実行が中断しているときに行う必要がある。

//-----------------------------------------------------------------

DBGMCU_Config(DBGMCU_SLEEP, ENABLE);

2) Sleep後、起床時に呼び出すモジュール

以下のように引数にDISABLEを指定して、keep debugger connectionを解除します。

// Keep debugger connection during SLEEP mode

DBGMCU_Config(DBGMCU_SLEEP, DISABLE);

3) ブレークポイントの設定について

ブレークポイントの設定と解除は、プログラム実行の中断中に行う必要があります。

実行中にブレークポイントを設定しても、正常にブレークしません。

実行開始前に、ブレークポイントを設定しておいて、ブレークがかかったら、その実行中断中に他のブレークポイントの

設定や、ブレークポイントの解除を行うと、うまくデバッグを行うことができます。

4) 不安定な要素

STM32L152C-DISCOではSleepモードに移行するためのモジュール

PWR_EnterSleepMode(PWR_Regulator_LowPower, PWR_SLEEPEntry_WFI);

を実行すると、CPUが動作しなくなります。

現在は、このモジュールをコメントアウトしています。

Sleepモードに移行しなくても、CPUの動作周波数は32.768kHzなので、消費電流は50μA未満になります。

//------------------------------------------------------------------

// Release ModeでBuildしたとき、このモジュールを実行するとCPUが動作しなくなる。

//------------------------------------------------------------------

// STM32L152C-DISCO(STM32L152RC)では、このモジュールを実行するとCPUが動作しなくなる。

//------------------------------------------------------------------

// Request to enter SLEEP mode with regulator in low power mode

// PWR_EnterSleepMode(PWR_Regulator_LowPower, PWR_SLEEPEntry_WFI);

//------------------------------------------------------------------

Page 9: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

9

5) Low Powerモードに移行せずにデバッグするために

ソースフォルダ Handlesの下の HandleLowPower.hにある以下の定義を生かすと Low Powerモードに移行せずに

デバッグを行うことができます。

動作周波数が32MHzのままになるので、LD3(緑)の点滅は、見えなくなります。

Low Powerモード以外の基本的なデバッグを行う場合に使用してください。

//---------------------------------------------------------

// Low Powerのデバッグ時宣言する。 : SYSCLKを32MHzのままにして

// Low Powerモードに移行しない。

//---------------------------------------------------------

//#define defDebug_LowPower

//---------------------------------------------------------

Page 10: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

10

4. 指定時刻設定アプリケーションAccess_Timetableのインストール

4.1. アプリケーションAccess_Timetableのインストールファイルのダウンロード

アプリケーションAccess_Timetableをインストールするための圧縮ファイルが掲載されているページから

Access_Timetable_Install.zipをダウンロードしてください。(本プロジェクトサンプルと同一のページに掲載されています。)

4.2. ダウンロードした圧縮ファイルAccess_Timetable_Install.zipの解凍

ダウンロードした圧縮ファイルAccess_Timetable_Install.zipがフォルダ tri_S_Downloadにあるものとして説明します。

フォルダ内のAccess_Timetable_Install.zipを選択した状態で右クリックするとポップアップメニューが開きます。

メニューの一番上の {開く(O)} をクリックすると圧縮ファイルが解凍されて次ページのように解凍されたファイルが

作成されます。

Page 11: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

11

4.3. アプリケーションAccess_Timetableのインストール

Access_Timetable_Install.zipをダウンロードして解凍すると、下図のようにフォルダAccess_Timetable_Installの下に

インストールのためのファイルが格納されています。

setup.exeをダブルクリックすると次の警告のダイアログが開きます。

[インストール(I)] ボタンをクリックしてインストールしてください。

アプリケーションがインストールされて、自動的にアプリケーションAccess_Timetableを実行して次のフォームが

表示されます。

Page 12: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

12

RS232Cケーブルを接続している場合、”COM(シリアルポート)を検索しました。” と表示されます。

5. アプリケーションAccess_Timetableによる指定時刻の設定

STM32L152C-DISCOがプロジェクト L152CD_LPS_U1を実行しているものとします。

5.1. アプリケーションAccess_Timetableの起動

スタートメニューから { Access_Timetable } をクリックすると次ページのアプリケーションAccess_Timetableの

フォームが表示されます。

Page 13: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

13

5.2. COMポートの選択

COM選択のComboBoxで COMポートを選択してください。

選択すると次ページのメッセージが表示されます。

Page 14: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

14

よい場合は、[はい(Y)] ボタンをクリックしてください。

この例では 「COM4に設定しました。」 とメッセージが表示されています。

通信速度は115200bpsです。

Page 15: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

15

5.3. RTCの時刻設定

1) RTCの時刻取得

RTCの時刻を読んでみます。

[ 時刻取得 ] ボタンをクリックしてください。時刻が読み込まれて次のように動作メッセージの部分に表示されます。

RTCがバックアップされていない初期状態では、日付・時刻が 2000/01/01 00:00:00 から開始します。

Page 16: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

16

2) RTCの時刻設定

[ 時刻設定 ] ボタンをクリックすると PCの日付・時刻がRTCに設定されます。

動作メッセージの欄に ”時刻を設定しました。“ と表示されています。再度 [ 時刻取得 ] ボタンをクリックして確認して

みます。

今度は設定した時刻が表示されました。

Page 17: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

17

5.4. 指定できる時刻の種類

指定時刻には次の 3種類があります。

1) 正時インターバル

正時とは時計のそれぞれの時刻の 00分00秒 のことをいいます。

1日を24時間であらわすと 00時00時00分、01時00分00秒、02時00分00秒、 ・・・

・・・ 22時00分00秒、23時00分00秒

のことをいいます。

インターバルを 60分にすれば、そのまま 24回、インターバルを 120分にすれば

00時00時00分、02時00分00秒、04時00分00秒、 ・・・ 20時00分00秒、22時00分00秒

の 12回が指定時刻になり処理を起動します。

正時インターバルは2個指定できます。指定した時刻に指定モジュールを呼び出します。

2) 定刻

指定した時刻が毎日 1回 指定時刻になり処理を起動します。 hh時mm分ss秒 を指定します。

定刻は2個指定できます。指定した時刻に指定モジュールを呼び出します。

3) 日付・時刻

指定した日付・時刻に 1回だけ処理を起動します。未来のYYYY年MM月DD日 hh時mm分ss秒 を指定します。

日付・時刻は2個指定できます。指定した日付・時刻に指定モジュールを呼び出します。

5.5. 正時インターバルの設定

1) 正時インターバルの選択

正時インターバルは TaskIH00 ~ TaskIH01 の 2個です。TaskIHのComboBoxで選択します。

Page 18: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

18

2) 正時インターバルとオフセットの設定

正時インターバルはインターバルとオフセットの TextBoxに値を秒単位で入力して設定します。

インターバルは最小値10秒で、オフセットはインターバルの値未満にします。

正時に対するオフセットを正負の値で指定することができます。インターバルに3600秒を設定して、

オフセットに -5 を設定した場合は hh時59分55秒 に

オフセットに 5 を設定した場合は hh時00分05秒 にTaskが起動します。

[ 設定 ] ボタンをクリックしたときにTextBoxに入力した値が有効になります。

この例では、選択したTaskIH 00を設定しました。 とメッセージが表示されています。

Page 19: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

19

5.6. 定刻の設定

1) 定刻の選択

定刻は TaskFT00 ~ TaskFT01 の 2個です。TaskFTのComboBoxで選択します。

2) 定刻の設定

定刻は 時:分:秒 のTextBoxに hh:mm:ss の形で入力します。

Page 20: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

20

毎日 15時20分35秒にTaskを起動したい場合は、15:20:35 を 時:分:秒 のTextBoxに入力します。

[ 設定 ] ボタンをクリックしたときにTextBoxに入力した値が有効になります。

この例では、選択したTaskFT 00を設定しました。 とメッセージが表示されています。

5.7. 日付・時刻の設定

1) 日付・時刻の選択

日付・時刻は TaskDT00 ~ TaskDT01 の 2個です。TaskDTのComboBoxで選択します。

Page 21: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

21

2) 日付・時刻の設定

日付・時刻は 年/月/日 時:分:秒 のTextBoxに YYYY/MM/DD hh:mm:ss の形で入力します。

2014年10月17日 15時30分00秒にTaskを起動したい場合は、2014/10/17 15:30:00 を

年/月/日 時:分:秒 のTextBoxに入力します。

[ 設定 ] ボタンをクリックしたときにTextBoxに入力した値が有効になります。

この例では、選択したTaskDT 00を設定しました。 とメッセージが表示されています。

処理をONに設定するとCPU基板ではその日付・時刻に実行します。処理を実行するとCPUは処理フラグをOFFにします。

Page 22: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

22

5.8. モジュール分岐のON/OFFの設定

正時インターバル、定刻、日付・時刻 それぞれの部分のON/OFFの RadioButtonでモジュール分岐のON/OFFを

設定します。

プロジェクト分岐ON/OFFの設定もそれぞれの [ 設定 ] ボタンをクリックしたときに有効になります。

5.9. CPU基板への時刻パラメータTimetableの設定

時刻パラメータTimetableはCPU基板に設定しないと、動作しません。

[ Timetable設定 ] ボタンをクリックするとCPU基板に、設定した時刻パラメータが設定されます。

正常に書き込みが行われると動作メッセージの欄に “Taskパラメータを設定しました。” と表示されます。

Page 23: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

23

5.10. CPU基板に設定されているTimetableの取得

[ Timetable取得 ] ボタンをクリックするとCPU基板に設定されている時刻パラメータTimetableを取得できます。

正常に取得できると、動作メッセージの欄に “Taskパラメータを取得しました。” と表示されます。

5.11. 時刻パラメータをファイルに保存

設定したTask起動のための時刻パラメータをファイルに保存することができます。

ファイルの [ 保存 ] ボタンをクリックすると、保存場所の選択ダイアログが表示されます。

Page 24: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

24

保存したいフォルダを指定して [ 保存(S) ] ボタンをクリックすると設定した時刻パラメータを保存することができます。

ファイルの保存に成功すると上記のメッセージが表示されます。

Page 25: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

25

5.12. 時刻パラメータファイルを読み込む。

ファイルの [ 読み込み ] ボタンをクリックすると、次ページのファイル選択ダイアログが表示されます。

時刻パラメータのファイルを選択して [ 開く(O) ] ボタンをクリックするとファイルからパラメータを読み込んで

Access_Timetableの画面に表示します。

正常に読み込めた場合、次のメッセージが表示されます。

[ OK ] ボタンをクリックして閉じてください。

Page 26: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

26

6. プロジェクトの構成

6.1. プロジェクト L152CD_LPS_U1の起動画面

TrueSTUDIOで作成したプロジェクト L152CD_LPS_U1を開いた状態を以下に示します。

左側のプロジェクト・エクスプローラーの L152CD_LPS_U1を展開した状態です。

6.2. 追加したソース・フォルダとファイル

追加したソース・フォルダとファイルについて簡単に説明します。

1) CommonModules (ソース・フォルダ)

共通に使用するモジュールを記述してあります。

時間待ち、文字列操作 などの処理を記述しています。

2) Communicate_UART (ソース・フォルダ)

a) Communicate_UART .h Communicate_UART .c (ファイル)

接続相手との通信処理を記述しています。

コマンドを受信して、RTCの日付・時刻の設定 または 日付・時刻データの送信を行います。

3) Handles (ソース・フォルダ)

Peripheralの設定などを行っています。

a) HandleCLK.h HandleCLK.c (ファイル)

内部クロックMSIと HSIを使用するための設定を記述しています。

Low Power Sleepモード時はMSIを使用して動作周波数を32.768kHzにします。

高速動作時はHSI(周波数16MHz)を入力して PLLにより32MHzにしてシステムクロック SYSCLKとして使用します。

Page 27: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

27

b) HandleEEPROM.h HandleEEPROM.c (ファイル)

CPU内部の EEPROMへの書き込み処理を記述しています。

c) HandleGPIO.h HandleGPIO.c (ファイル)

GPIO入出力の初期設定を記述しています。

d) HandleLowPower.h HandleLowPower.c (ファイル)

Low Power Sleepモードへの移行処理と、高速動作モードへの移行処理を記述しています。

e) HandleRTC.h HandleRTC.c (ファイル)

RTCの初期化を行います。

f) HandleTIM.h HandleTIM.c (ファイル)

タイマ割り込みを使用するために、タイマの初期設定を記述しています。

1mSecごとにタイマ割り込みが発生するように設定しています。

g) HandleUART.h HandleUART.c (ファイル)

UARTの初期化と UART送受信の処理を記述しています。

4) UserPrograms (ソース・フォルダ)

a) ScheduledJobs.h ScheduledJobs.c (ファイル)

指定時刻に呼び出されるモジュールの雛形が記述されています。

b) TimeScheduled.h TimeScheduled.c (ファイル)

指定時刻を判定して、その時刻と一致した場合、対応する処理モジュールを呼び出します。

c) UserPrograms.h UserPrograms.c (ファイル)

Status LED : LD3(緑) に使用している GPIOの初期設定と点滅処理を記述しています。

LD4(青)に使用している GPIOの初期設定を記述しています。

6.3. 指定時刻による対応モジュールへの分岐

指定時刻に対応して実行するモジュールの雛形はソースフォルダUserProgramsの下のファイルScheduledJobs.c

に記述されています。

1) 指定時刻と対応モジュール

以下に、それぞれの指定時刻と対応モジュールを記します。

a) 正時インターバル0 の時刻で呼び出すモジュール : void JobIH0(void);

b) 正時インターバル1 の時刻で呼び出すモジュール : void JobIH1(void);

c) 定刻0 の時刻で呼び出すモジュール : void JobFT0(void);

d) 定刻1 の時刻で呼び出すモジュール : void JobFT1(void);

e) 日付・時刻0 の時刻で呼び出すモジュール : void JobDT0(void);

f) 日付・時刻1 の時刻で呼び出すモジュール : void JobDT1(void);

本プロジェクトサンプルでは LD4(青)の点滅処理を記述していますが、このモジュールの内容を書き換えることにより希望の

処理を実現することができます。

Page 28: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

28

7. 主なモジュールの説明

7.1. ソース・フォルダ src内のファイル

ソース・フォルダ src内のファイルでプログラムを追加した主なファイルについて簡単に説明します。

1) main.c

a) main関数

プログラムはここから開始します。主に初期化処理関数を呼び出しています。

int main(void)

呼び出している初期化処理は以下の通りです。

b) システムクロックの設定

システムクロック SYSCLKの設定を行います。Low Power Sleepモードから抜けるためのモジュールを呼び出して

高速動作モードにしています。内部クロック HSIを入力クロックとして選択し、PLLを使用して 32MHzに設定します。

//------------------------------------------------------------------------------------------

GLB_int16_vLowPowerMode = 1; // ExitLowPowerMode();を実行するためにLowPowerModeフラグを

ONにする。

//-------------------------------------------------------------------

// HSIを選択して、PLL ClockをSystem Clockとして使用する。 : SYSCLK = 32MHz

//-------------------------------------------------------------------

ExitLowPowerMode(); // Low Power Sleepモードから抜けてSYSCLK = 32MHzにする。

//------------------------------------------------------------------------------------------

c) 周辺クロックの初期化

// 周辺クロックの設定

void RCC_Configuration(void);

d) GPIOの初期化

// GPIO初期化

void Init_GPIOs(void);

e) Status LEDポートの初期化

//--------------------------------------

// Status LEDポート初期化 : LD3(緑)

//--------------------------------------

InitializePortStatusLED();

Page 29: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

29

f) LD4(青)ポートの初期化

//--------------------------------------

// LD4(青)ポート初期化

//--------------------------------------

InitializePortLD4();

g) 時刻パラメータTimetableがEEPROMに設定済みかを判定

CPU内蔵のEEPROMに時刻パラメータTimetableが設定済みかを判定して結果を

フラグ GLB_int16_vTimeParameterOK_NGにセットします。

//--------------------------------------------------------------

// EEPROMの時刻パラメータ判定

//--------------------------------------------------------------

//戻り値 :

// 0 : OK

// 1 : NG

//--------------------------------------------------------------

GLB_int16_vTimeParameterOK_NG = CheckParameterEEPROM();

h) TIM6の初期化

//----------------------------------------------------------------------

// TIM6初期化

//----------------------------------------------------------------------

InitializeTIMx(TIM6, RCC_APB1Periph_TIM6, (uint16_t)defInterval_1mSec);

EnableIrqTIMx(RCC_APB1Periph_TIM6, TIM6_IRQn); // TIM6 Enable Interrupt

//----------------------------------------------------------------------

i) RTCの初期化

//--------------------------------------------------------------------------

// RTC初期化 : InitializeRTC()は、TIM6の割り込みを許可した後に呼び出さなければならない。

//--------------------------------------------------------------------------

InitializeRTC();

j) UART1の初期化

UART通信を行うときに、PCから 10mSecごとに 4回 0x00を送信します。CPUはUSART1_RX(PA10)のピンに

4回、外部割込みが発生すると Low Power Sleepモードから抜けて、動作周波数を32MHzにします。

その後、以下のUART初期化モジュールを呼び出し、通信速度を115200bpsに設定して通信を行います。

//-----------------------------------------------------------

// UART1通信パラメータ初期化 : 通信速度 115200bps

//-----------------------------------------------------------

InitializeCommunicate_UART1((uint32_t)115200);

Page 30: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

30

2) stm32f4xx_it.h stm32f4xx_it.c

このファイルに割り込み処理を記述します。

本プロジェクトサンプルではRTCの1秒割り込み と TIM6のタイマ割り込み処理 および UART1の割り込み処理を

記述しています。

また、Low Power Sleepモード時はUSART_RX(PA10)のピンを入力に設定して外部割込みが発生するようにして

通信時に起床させるために使用しています。

7.2. HandleCLK

1) 高速動作モード時の設定

動作クロックに内部クロックHSI : 16MHzを選択し、PLLにより 32MHzにして使用します。

//----------------------------------------------------------------------------------

// HSIを選択して、PLL ClockをSystem Clockとして使用する。 : SYSCLK = 32MHz

//----------------------------------------------------------------------------------

void SetHSICLK32MHz(void);

2) Low Power Sleep時の設定

動作クロックに内部クロックMSI : 65.536kHzを選択し、設定により 32.768kHzにして使用します。

//-----------------------------------------------------

// To select MSI as System clock source

//-----------------------------------------------------

// 低消費電飾モード(Low Power Mode)にするために使用クロックをMSIに

// 変更してHCLK = 32.768KHzにする。

//-----------------------------------------------------

void SetHSICLKToMSI(void);

7.3. HandleEEPROM

CPU内蔵のEEPROMにデータを書き込みます。

//--------------------------------------------------------------------------------------------

// Set Data and Write EEPROM

//--------------------------------------------------------------------------------------------

//引数 :

// uint32_t uint32_StartAddress(4 の倍数) : 書き込み開始アドレス

// int16_t int16_Length : 書き込みbyte数

// uint8_t *puint8_Data : 書き込みデータが格納されているBufferのポインタ

//戻り値 :

// -1 : NG

// 0 : OK

//--------------------------------------------------------------------------------------------

int16_t SetDataAndWriteEEPROM(uint32_t uint32_StartAddress, int16_t int16_Length,

uint8_t *puint8_Data);

Page 31: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

31

7.4. HandleGPIO

GPIOを初期化します。

1) 低消費電力モード時のGPIO初期化

最初は、使用しないGPIOピンをアナログ入力モードに初期化します。

//--------------------------------------------------------------------------------

// 低消費電力モード時のGPIO初期化

//--------------------------------------------------------------------------------

void InitializeGPIOs_LowPower(void);

2) GPIOの初期化

必要なGPIOの初期化を行います。

//---------------------------------------------

// GPIO初期化

//---------------------------------------------

void Init_GPIOs(void);

7.5. HandleRTC

RTCの初期化と日付・時刻の設定 および 日付・時刻の取得の処理を行います。

1) RTCの初期化

Backupの有無を判定して、Buckupが行われていない場合、RTCを全て初期化します。

Backupが行われている場合、日付・時刻のレジスタの設定は行わず、レジスタにセットされている日付・時刻を

読み出します。

RTCの時刻の読み込みは、RTCの 1秒割り込みの中で行います。

//---------------------------------------------------------------------

// RTC初期化

//---------------------------------------------------------------------

void InitializeRTC(void);

Page 32: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

32

2) その他のRTCデータ処理

a) 日付・時刻の文字列を uint32_t のデータに変換

//-------------------------------------------------------------------------

// 日付・時刻の文字列から uint32_t に変換

//-------------------------------------------------------------------------

// 2000/01/01 00:00:00 を起点に秒で表す。

// 2135年以上はエラー : 0xffffffff を返す。

// 2000/01/01 00:00:00 以前の日付・時刻を指定された場合 戻り値は 0 とする。

//-------------------------------------------------------------------------

//引数 :

// uint8_t *puint8_DateTime : 日付・時刻の文字列が格納されたBufferのポインタ : YYYY/MM/DD hh:mm:ss

//戻り値 : 日付・時刻に対する秒数

//-------------------------------------------------------------------------

uint32_t ConvStringDateTimeToULONG(uint8_t *puint8_DateTime);

b) uint32_t の秒データから日付・時刻の文字列に変換

//-------------------------------------------------------------------------

// uint32_t の秒から 日付・時刻の文字列に変換

//-------------------------------------------------------------------------

// YYYY/MM/DD hh:mm:ss

// 2000/01/01 00:00:00 を 0 とする。

// 1日 : 60 x 60 x 24 = 86400

// 1年 : 86400 x 365 = 31536000

//-------------------------------------------------------------------------

//引数 :

// uint32_t uint32_Sec : 現在の日付・時刻を表す秒数

// uint8_t *puint8_Date : 変換した日付・時刻を格納するBufferのポインタ

//-------------------------------------------------------------------------

void ConvUlongSecToTimeString(uint32_t uint32_Sec, uint8_t *puint8_Date);

Page 33: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

33

7.6. HandleTIM

1) TIM6の初期化

タイマ割り込みのためにTIM6を初期化してインターバルをセットします。

1mSecごとに割り込みがかかるように設定しています。

以下の関数の引数にTIM6用のパラメータを指定して TIM6を初期化します。

//------------------------------------------------------------------------------

// TIMx初期化

//------------------------------------------------------------------------------

//引数 :

// TIM_TypeDef *TIMx : TIM選択 : TIM6 or TIM7

// uint32_t RCC_APB1Periph_TIMx : specifies the APB1 peripheral to gates its clock.

// uint16_t uint16_Interval : TiMxのインターバル設定値

//------------------------------------------------------------------------------

void InitializeTIMx(TIM_TypeDef *TIMx, uint32_t RCC_APB1Periph_TIMx, uint16_t uint16_Interval);

2) タイマ割り込み許可

以下の関数の引数に希望するTIMx用のパラメータを指定して割り込みを許可します。

//-----------------------------------------------------------------------------------

// TIMx割り込み許可

//-----------------------------------------------------------------------------------

//引数 :

// uint32_t RCC_APB1Periph_TIMx : specifies the APB1 peripheral to gates its clock.

// uint8_t TIMx_IRQn : STM32 specific Interrupt Numbers

//-----------------------------------------------------------------------------------

void EnableIrqTIMx(uint32_t RCC_APB1Periph_TIMx, uint8_t TIMx_IRQn);

Page 34: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

34

7.7. HandleUART

1) UARTの初期化

//-------------------------------------------------

// UART1初期化

//-------------------------------------------------

//引数 :

// uint32_t uint32_BaudRate : 通信速度 bps

//-------------------------------------------------

void InitializeUART1(uint32_t uint32_BaudRate);

2) UART送信

送信Bufferに格納されたデータを指定データ数送信します。

//------------------------------------------------------------------

// UART1 送信処理 : 送信Bufferに送信データがセットされた状態でCallされる。

//------------------------------------------------------------------

//引数 :

// uint16_t uint16_SendLength : 送信データ数

//戻り値 :

// 0 : 送信終了

// 1 : エラー

//------------------------------------------------------------------

void SendUART1(uint16_t uint16_SendLength);

3) UART受信

受信待ちを行いデータを受信したら、受信Bufferに格納します。

//------------------------------------------------------------------

// UART1 受信処理

//------------------------------------------------------------------

//引数 :

// uint8_t *puint8_ReceiveBuffer : 受信データを格納するBufferのポインタ

//戻り値 :

// -1 : 受信なし

// 0 : 受信なし

// 1以上 : 受信byte数

//------------------------------------------------------------------

int16_t ReceiveUART1(uint8_t *puint8_ReceiveBuffer);

Page 35: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

35

7.8. UserPrograms

1) ScheduledJobs.h ScheduledJobs.c

指定時刻に対応して、以下の6個のモジュールの中のいずれかが呼び出されます。

// 正時インターバルJob0

void JobIH0(void);

// 正時インターバルJob1

void JobIH1(void);

// 定刻Job0

void JobFT0(void);

// 定刻Job1

void JobFT1(void);

// 日付・時刻Job0

void JobDT0(void);

// 日付・時刻Job1

void JobDT1(void);

2) TimeScheduled.h TimeScheduled.c

a) 正時インターバルの時刻判定と分岐

正時インターバルの指定時刻を判定して、一致した場合、対応する処理モジュールを呼び出します。

//-----------------------------------------------------------------------------------

// 正時インターバル時刻判定と分岐 : 指定の正時インターバルに一致したら指定プロジェクトの開始番地に分岐する。

//-----------------------------------------------------------------------------------

void CheckIntervalProjectBranch(uint8_t uint8_OnOff, uint32_t uint32_Interval, int32_t int32_Offset,

uint32_t *puint32_NextTime, uint32_t uint32_CountRTC, uint16_t uint16_JobNumber,

uint32_t *puint32_Interval_Old, int32_t *pint32_Offset_Old);

b) 定刻の時刻判定と分岐

定刻の指定時刻を判定して、一致した場合、対応する処理モジュールを呼び出します。

//-----------------------------------------------------------------------------------

// 定刻判定と分岐: 指定の定刻に一致したら指定プロジェクトの開始番地に分岐する。

//-----------------------------------------------------------------------------------

void CheckTimeProjectBranch(uint8_t uint8_OnOff, uint32_t uint32_Time, uint32_t *puint32_NextTime,

uint32_t uint32_CountRTC, uint16_t uint16_JobNumber,

uint32_t *puint32_Time_Old);

Page 36: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

36

c) 日付・時刻の時刻判定と分岐

日付・時刻の指定時刻を判定して、一致した場合、対応する処理モジュールを呼び出します。

//-----------------------------------------------------------------------------------

// 日付・時刻判定と分岐: 指定の日付・時刻に一致したら指定プロジェクトの開始番地に分岐する。

//-----------------------------------------------------------------------------------

void CheckDateTimeProjectBranch(uint8_t *puchrOnOff, int16_t int16_PositionOnOff,

uint32_t ulngDateTime,

uint32_t ulngCountRTC, uint16_t uint16_JobNumber);

3) UserPrograms.h UserPrograms.c

UserPrograms.hには LEDに使用するGPIOに対する定義を記述してあります。

以下に、UaerPrograms.cに記述している関数の説明を記します。

a) LEDに使用するGPIOの初期化(共通処理)

GPIO番号とピン番号を指定して I/Oを初期化します。

//----------------------------------------------------------------

// LEDポート初期化

//----------------------------------------------------------------

//引数 :

// GPIO_TypeDef *GPIOx : GPIOポート指定

// uint16_t GPIO_Pin_x : GPIOピン指定

//----------------------------------------------------------------

void InitializePortLED(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin_x);

Page 37: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

37

b) LEDの点滅処理(共通処理)

GPIO番号とピン番号などを指定して 希望のLEDの点滅処理を行います。

//----------------------------------------------------------------

// LED点滅 : 点灯/消灯 切り替え

//----------------------------------------------------------------

// 点灯/消灯 を切り替えると同時に 点灯時間/消灯時間 をセットする。

//----------------------------------------------------------------

//引数 :

// GPIO_TypeDef *GPIOx : GPIOポート指定

// uint16_t GPIO_Pin_x : GPIOピン指定

// int16_t *pint16_OnOff : ON/OFF状態

// 0 : OFF

// 1 : ON

// uint16_t *puint16_Timer : 点灯時間/消灯時間をセットする変数のポインタ

// uint16_t uint16_TimeON : 点灯時間

// uint16_t uint16_TimeOFF : 消灯時間

//----------------------------------------------------------------

void BlinkLED(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin_x,

int16_t *pint16_OnOff, uint16_t *puint16_Timer,

uint16_t uint16_TimeON, uint16_t uint16_TimeOFF);

c) LEDに使用する I/Oの初期化

i) StatusLED : LD3(緑)

//----------------------------------------------------------------

// Status LEDポート初期化 : LD3(緑)

//----------------------------------------------------------------

void InitializePortStatusLED(void);

ii) LD4(青)初期化

//----------------------------------------------------------------

// LD4(青) ポート初期化

//----------------------------------------------------------------

void InitializePortLD4(void);

Page 38: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

38

d) StatusLED : LD3(緑)の点滅

//----------------------------------------------------------------

// Status LED点滅 : LD3(緑) : 点灯/消灯 切り替え

//----------------------------------------------------------------

// TIMx割り込み内でGLB_uint16_BlinkTimerStatusLEDをデクリメントする。

// GLB_uint16_BlinkTimerStatusLEDが0になった時、呼び出される。

//----------------------------------------------------------------

// 点灯/消灯 を切り替えると同時に 点灯時間/消灯時間 をセットする。

//----------------------------------------------------------------

//引数 :

// uint16_t uint16_TimeON : 点灯時間

// uint16_t uint16_TimeOFF : 消灯時間

//----------------------------------------------------------------

void BlinkStatusLED(uint16_t uint16_TimeON, uint16_t uint16_TimeOFF);

e) LD4(青)の点滅 : 点滅回数の指定あり

//----------------------------------------------------------------

// LD4(青)を指定回数だけ点滅 : LD4(青) : 点灯/消灯 切り替え

//----------------------------------------------------------------

// TIMx割り込み内でGLB_uint16_BlinkTimerStatusLEDをデクリメントする。

// GLB_uint16_BlinkTimerStatusLEDが0になった時、呼び出される。

//----------------------------------------------------------------

// 点灯/消灯 を切り替えると同時に 点灯時間/消灯時間 をセットする。

//----------------------------------------------------------------

//引数 :

// uint16_t uint16_TimeON : 点灯時間

// uint16_t uint16_TimeOFF : 消灯時間

// int16_t *pint16_Count : 点滅回数の変数のポインタ

//----------------------------------------------------------------

void BlinkLD4withCount(uint16_t uint16_TimeON, uint16_t uint16_TimeOFF, int16_t *pint16_Count);

Page 39: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

39

7.9. Communicate_UART

1) UARTの初期化

//-----------------------------------------------------------

// UART1通信パラメータ初期化

//-----------------------------------------------------------

//引数 :

// uint32_t uint32_BaudRate : 通信速度

//-----------------------------------------------------------

void InitializeCommunicate_UART1(uint32_t uint32_BaudRate);

2) UART通信処理

UARTの受信待ちを行い、受信データを判定して RTCアクセスコマンドの場合、RTCに対する処理を行います。

//------------------------------------------------------------

// UART1通信処理

//------------------------------------------------------------

//戻り値 :

// -1 : 処理中

// 0 : 終了

//------------------------------------------------------------

int16_t Communicate_UART1(void);

3) 受信コマンドの実行

受信データを判定して、コマンドに対する処理を呼び出します。

//--------------------------------------------------------------------

//受信コマンド判定 および 実行

//--------------------------------------------------------------------

//引数

// uint16_t uint16_ReceiveLength : 受信データ数

// uint8_t *puint8_ReceiveData : 受信データが格納されたBufferのポインタ

// uint8_t *puint8_SendData : 応答送信データを格納するBufferのポインタ

//戻り値: 応答送信データ数

//--------------------------------------------------------------------

uint16_t ExecuteCommandUART(uint16_t uint16_RecieveLength, uint8_t *puint8_ReceiveData,

uint8_t *puint8_SendData);

Page 40: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

40

4) RTCに日付・時刻を設定

RTC設定コマンドを受信した場合呼び出されるモジュールです。

受信した日付・時刻データをRTCのレジスタに設定します。

//-------------------------------------------------------------------------------------------------

// 時刻設定

//-------------------------------------------------------------------------------------------------

// 受信Command :

// "Set RTC [日付・時刻 : 19byte]"

//-------------------------------------------------------------------------------------------------

// [日付・時刻 : 19byte] : "YYYY/MM/DD hh:mm:ss"(西暦/月/日 時:分:秒)

//-------------------------------------------------------------------------------------------------

// 応答(Reply) :

// OK応答 : "Set RTC OK"

// NG応答 :

// RTCが動作していない : "RTC is not working."

// 設定値エラー : "The parameter is not correct."

//-------------------------------------------------------------------------------------------------

//引数 :

// uint8_t *puint8_ReceiveData : 受信データが格納されているBufferのポインタ

// uint8_t *puint8_SendData : 応答データを格納するBufferのポインタ

//戻り値 : 応答データ数

//-------------------------------------------------------------------------------------------------

uint16_t ComActSetTime(uint8_t *puint8_ReceiveData, uint8_t *puint8_SendData);

5) RTCに日付・時刻を取得

RTC取得コマンドを受信した場合呼び出されるモジュールです。RTCの日付・時刻データを送信します。

//-------------------------------------------------------------------------------------------------

// 時刻取得

//-------------------------------------------------------------------------------------------------

// 受信Command :

// "Get RTC¥0"

//-------------------------------------------------------------------------------------------------

// 応答(Reply) :

// OK応答 : [日付・時刻 : 19byte] : "YYYY/MM/DD hh:mm:ss"(西暦/月/日 時:分:秒)

//-------------------------------------------------------------------------------------------------

// NG応答 :

// RTCが動作していない : "RTC is not working."

//-------------------------------------------------------------------------------------------------

//引数 :

// uint8_t *puint8_SendData : 応答データを格納するBufferのポインタ

//戻り値 : 応答データ数

//-------------------------------------------------------------------------------------------------

uint16_t ComActGetTime(uint8_t *puint8_SendData);

Page 41: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

41

6) Timetable設定

PCからTimetable設定コマンドと時刻パラメータを受信して、Timetableの内容を EEPROMに書き込みます。

//---------------------------------------------------------------------------------------------

// Timetable設定

//---------------------------------------------------------------------------------------------

// 受信Command :

// "Set Timetable [Timetable パラメータ]"

//---------------------------------------------------------------------------------------------

// [Timetable パラメータ] :

// [TaskIH ON/OFF],[IntervalIH],[OffsetIH],

// [TaskFT ON/OFF],[TimeFT],

// [TaskDT ON/OFF],[DateTimeDT]

//---------------------------------------------------------------------------------------------

// 応答(Reply) :

// OK応答 : "Set Timetable OK"

// NG応答 :

// 設定値エラー : "The parameter is not correct."

// EEPROM書き込みNG : "It failed to write the EEPROM."

//---------------------------------------------------------------------------------------------

//引数 :

// uint8_t *puint8_ReceiveData : 受信データが格納されているBufferのポインタ

// uint8_t *puint8_SendData : 応答データを格納するBufferのポインタ

//戻り値 : 応答データ数

//---------------------------------------------------------------------------------------------

uint16_t ComActSetTimetable(uint8_t *puint8_ReceiveData, uint8_t *puint8_SendData);

Page 42: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

42

7) Timetable取得

PCからTimetable取得コマンドを受信したとき、EEPROMから時刻パラメータを読み込んで、送信します。

//---------------------------------------------------------------------------------------------

// Timetable取得

//---------------------------------------------------------------------------------------------

// 受信Command :

// "Get Timetable¥0"

//---------------------------------------------------------------------------------------------

// 応答(Reply) :

// OK応答 : [Timetableパラメータ]

//---------------------------------------------------------------------------------------------

// [Timetableパラメータ] :

// [TaskIH ON/OFF],[IntervalIH],[OffsetIH],

// [TaskFT ON/OFF],[TimeFT],

// [TaskDT ON/OFF],[DateTimeDT]

//---------------------------------------------------------------------------------------------

// NG応答 :

// Timetableが設定されていない : "There is no data."

//---------------------------------------------------------------------------------------------

//引数 :

// uint8_t *puint8_SendData : 応答データを格納するBufferのポインタ

//戻り値 : 応答データ数

//---------------------------------------------------------------------------------------------

uint16_t ComActGetTimetable(uint8_t *puint8_SendData);

Page 43: TrueSTUDIO 用 L152CD LPS U1 の説明 V001 …tri-s.world.coocan.jp/.../Project_L152CD_LPS_U1.pdf1 TrueSTUDIO用 L152CD_LPS_U1の説明 V001 2014/10/19 STM32L152C-DISCOに搭載されているCPU

43

有限会社りばいぶ

電子工作のための「飛石伝ひ」

改訂履歴

V001 2014/10/19 初版