USB VCP( COM - Coocantri-s.world.coocan.jp/.../Explain_STM32L_VCP.pdf1 STM32L_VCPの説明 V002...

15
1 STM32L_VCP の説明 V002 2014/07/17 USB の VCP(仮想 COM ポート)を使用して、Windows7 PC と非同期シリアル通信を行う STM32L-Discovery 用の プログラムです。 無料の開発ツール Atollic TrueSTUDIO for ARM Lite 4.3.1 で作成したプロジェクトです。 プログラムの開始番地は 0x08000000 です。デバッグが可能です。 PC アプリケーションの Access_VCP を使用して USB の VCP(仮想 COM ポート)による UART(非同期シリアル通信)送受信の 試験を行うことができます。 目次 1. USB の VCP(仮想 COM ポート)について ............................................................................................................................................................................................. 2 2. USB の VCP(仮想 COM ポート)による接続 ......................................................................................................................................................................................... 2 2.1. PC と STM32L-Discovery との接続...................................................................................................................................................................................... 2 2.2. VCP 接続のための MimiB コネクタと STM32L-Discovery との接続 ........................................................................................................................ 3 3. プログラム実行時の動作と確認............................................................................................................................................................................................................... 4 3.1. 実行時の動作 ........................................................................................................................................................................................................................................ 4 3.2. 動作確認.................................................................................................................................................................................................................................................. 4 1) Access_VCP アプリケーションの起動画面 ................................................................................................................................................................................ 4 2) COM ポートの選択 .................................................................................................................................................................................................................................. 5 3) 送信データのエコーバック................................................................................................................................................................................................................. 7 4) 基板上の LED LD4(青)の点灯/消灯.................................................................................................................................................................................... 8 4. プロジェクトの構成............................................................................................................................................................................................................................................ 9 4.1. 独自に追加したソースフォルダ.................................................................................................................................................................................................... 9 4.2. ソースフォルダ src のファイル...................................................................................................................................................................................................10 4.3. システムクロック SYSCLK の設定 ............................................................................................................................................................................................10 5. 主なモジュールの説明..............................................................................................................................................................................................................................11 5.1. HandleTIM..............................................................................................................................................................................................................................................11 5.2. main.c........................................................................................................................................................................................................................................................12 5.3. UserPrograms.....................................................................................................................................................................................................................................12 5.4. CommunicateHOST..........................................................................................................................................................................................................................13

Transcript of USB VCP( COM - Coocantri-s.world.coocan.jp/.../Explain_STM32L_VCP.pdf1 STM32L_VCPの説明 V002...

Page 1: USB VCP( COM - Coocantri-s.world.coocan.jp/.../Explain_STM32L_VCP.pdf1 STM32L_VCPの説明 V002 2014/07/17 USBのVCP(仮想COMポート)を使用して、Windows7 PCと非同期シリアル通信を行うSTM32L-Discovery用の

1

STM32L_VCPの説明 V002 2014/07/17

USBのVCP(仮想COMポート)を使用して、Windows7 PCと非同期シリアル通信を行うSTM32L-Discovery用の

プログラムです。

無料の開発ツール Atollic TrueSTUDIO for ARM Lite 4.3.1 で作成したプロジェクトです。

プログラムの開始番地は 0x08000000 です。デバッグが可能です。

PCアプリケーションのAccess_VCPを使用して USBのVCP(仮想COMポート)によるUART(非同期シリアル通信)送受信の

試験を行うことができます。

目次

1. USBのVCP(仮想COMポート)について ............................................................................................................................................................................................. 2

2. USBのVCP(仮想COMポート)による接続 ......................................................................................................................................................................................... 2

2.1. PC と STM32L-Discoveryとの接続 ...................................................................................................................................................................................... 2

2.2. VCP接続のためのMimiBコネクタと STM32L-Discoveryとの接続 ........................................................................................................................ 3

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

3.1. 実行時の動作 ........................................................................................................................................................................................................................................ 4

3.2. 動作確認 .................................................................................................................................................................................................................................................. 4

1) Access_VCPアプリケーションの起動画面 ................................................................................................................................................................................ 4

2) COMポートの選択 .................................................................................................................................................................................................................................. 5

3) 送信データのエコーバック ................................................................................................................................................................................................................. 7

4) 基板上の LED LD4(青)の点灯/消灯 .................................................................................................................................................................................... 8

4. プロジェクトの構成 ............................................................................................................................................................................................................................................ 9

4.1. 独自に追加したソースフォルダ .................................................................................................................................................................................................... 9

4.2. ソースフォルダ srcのファイル................................................................................................................................................................................................... 10

4.3. システムクロック SYSCLKの設定............................................................................................................................................................................................ 10

5. 主なモジュールの説明 .............................................................................................................................................................................................................................. 11

5.1. HandleTIM .............................................................................................................................................................................................................................................. 11

5.2. main.c ........................................................................................................................................................................................................................................................ 12

5.3. UserPrograms ..................................................................................................................................................................................................................................... 12

5.4. CommunicateHOST .......................................................................................................................................................................................................................... 13

Page 2: USB VCP( COM - Coocantri-s.world.coocan.jp/.../Explain_STM32L_VCP.pdf1 STM32L_VCPの説明 V002 2014/07/17 USBのVCP(仮想COMポート)を使用して、Windows7 PCと非同期シリアル通信を行うSTM32L-Discovery用の

2

1. USBのVCP(仮想COMポート)について

USBのVCP(仮想COMポート)は USBを非同期シリアル通信として使用するための USBのドライバです。

PCにはVCP ドライバをインストールする必要があります。

USBのVCP(仮想COMポート)を使用するためのVCPドライバのインストールについては、「インストール」のページの

[ 1.「 VCP(Virtual COM Port : 仮想COMポート)ドライバ」のインストール ] の部分をご覧ください。

2. USBのVCP(仮想COMポート)による接続

2.1. PC と STM32L-Discoveryとの接続

USBのVCP(仮想COMポート)による、PC と STM32L-Discoveryとの接続は以下のようになります。

USBケーブルは A – MiniB のタイプです。

PC

A

USBポート

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

図2.1.

STM32L-Discovery Mini B

MiniB

USBのVCP(仮想COMポート)接続

Page 3: USB VCP( COM - Coocantri-s.world.coocan.jp/.../Explain_STM32L_VCP.pdf1 STM32L_VCPの説明 V002 2014/07/17 USBのVCP(仮想COMポート)を使用して、Windows7 PCと非同期シリアル通信を行うSTM32L-Discovery用の

3

2.2. VCP接続のためのMimiBコネクタとSTM32L-Discoveryとの接続

STM32L-DiscoveryとMiniUSBコネクタとの接続は以下のようになります。

SHELL

GND

ID

DP

DM

1 2 3 4 5 6

MiniBコネクタ

10Ω

10Ω

100kΩ

GND

PA11

PA12

図2.2.

Page 4: USB VCP( COM - Coocantri-s.world.coocan.jp/.../Explain_STM32L_VCP.pdf1 STM32L_VCPの説明 V002 2014/07/17 USBのVCP(仮想COMポート)を使用して、Windows7 PCと非同期シリアル通信を行うSTM32L-Discovery用の

4

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

3.1. 実行時の動作

1) プログラムを実行すると基板上の LED LD3(緑)が 1秒点灯、2秒消灯 で点滅します。

2) USBのVCP(仮想COMポート)で I/O Port bit ON/OFFコマンド以外のデータを受信するとエコーバックします。

3) USBのVCP(仮想COMポート)で LED0 ON/OFFコマンドを受信すると、基板上の LED LD4(青)の点灯/消灯を行います。

3.2. 動作確認

USBのVCP(仮想COMポート)による UART(非同期シリアル通信)のツール Access_VCPアプリケーションを使用して、

CPU基板の送受信の確認、および コマンド文字列を送信して I/O Portの bitのON/OFFを行うことができます。

1) Access_VCPアプリケーションの起動画面

まず、PCと「飛石伝ひCPU基板」とをUSBケーブルで接続してください。

Access_VCPアプリケーションを起動すると以下のダイアログが表示されます。

次ページに続く

Page 5: USB VCP( COM - Coocantri-s.world.coocan.jp/.../Explain_STM32L_VCP.pdf1 STM32L_VCPの説明 V002 2014/07/17 USBのVCP(仮想COMポート)を使用して、Windows7 PCと非同期シリアル通信を行うSTM32L-Discovery用の

5

2) COMポートの選択

COM選択のComboBoxでCOMを選択します。

確認のメッセージが表示されるので、よい場合は [はい(Y)] ボタンをクリックします。

次ページに続く

Page 6: USB VCP( COM - Coocantri-s.world.coocan.jp/.../Explain_STM32L_VCP.pdf1 STM32L_VCPの説明 V002 2014/07/17 USBのVCP(仮想COMポート)を使用して、Windows7 PCと非同期シリアル通信を行うSTM32L-Discovery用の

6

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

次ページに続く

Page 7: USB VCP( COM - Coocantri-s.world.coocan.jp/.../Explain_STM32L_VCP.pdf1 STM32L_VCPの説明 V002 2014/07/17 USBのVCP(仮想COMポート)を使用して、Windows7 PCと非同期シリアル通信を行うSTM32L-Discovery用の

7

3) 送信データのエコーバック

送信データのTextBoxにASCII文字列を入力して、[送信] ボタンをクリックすると、CPU基板にデータが送信されます。

CPU基板はデータを受信して、そのデータをそのまま PCに送信します。

PCが受信したデータは受信データの部分に表示されます。

上記の例では、送信データに “How are you?” と入力して [送信] ボタンをクリックした結果、エコーバックのデータが

受信データの欄に表示されています。

次ページに続く

Page 8: USB VCP( COM - Coocantri-s.world.coocan.jp/.../Explain_STM32L_VCP.pdf1 STM32L_VCPの説明 V002 2014/07/17 USBのVCP(仮想COMポート)を使用して、Windows7 PCと非同期シリアル通信を行うSTM32L-Discovery用の

8

4) 基板上の LED LD4(青)の点灯/消灯

LED点灯/消灯のコマンドは以下のようになります。

a) LED ONの場合

“LED0 ON”

b) LED OFFの場合

“LED0 OFF”

上記の例では、”LED0 ON” を入力して [送信] ボタンをクリックした結果、STM32L-Discoveryは LD4を点灯して、

”OK : LED0 ON” を応答データとして送信しました。

LD4を消灯したい場合は、”LED0 OFF” を送信します。

Page 9: USB VCP( COM - Coocantri-s.world.coocan.jp/.../Explain_STM32L_VCP.pdf1 STM32L_VCPの説明 V002 2014/07/17 USBのVCP(仮想COMポート)を使用して、Windows7 PCと非同期シリアル通信を行うSTM32L-Discovery用の

9

4. プロジェクトの構成

プロジェクトを開いて、左側の Project Explolerのを開いた状態です。

4.1. 独自に追加したソースフォルダ

独自に追加したソースフォルダについて簡単に説明します。

1) CommonModules

共通処理を記述しています。

2) CommunicateHOST

UARTの通信処理を記述しています。LED ON/OFFのコマンドを受信して処理を行います。

3) Handle

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

a) HandleTIM.h HandleTIM.c

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

4) UserPrograms

a) Status LED に使用している I/O の初期設定と点滅処理を記述しています。

b) LED0の初期設定を記述しています。

5) Virtual_COM_Port

USBのVCP(仮想COMポート)の処理です。

6) STM32_USB-FS-Device_Driver

フォルダ Librariesの下にあります。STMicroelectronics社から提供されているUSBのための Libraryです。

Page 10: USB VCP( COM - Coocantri-s.world.coocan.jp/.../Explain_STM32L_VCP.pdf1 STM32L_VCPの説明 V002 2014/07/17 USBのVCP(仮想COMポート)を使用して、Windows7 PCと非同期シリアル通信を行うSTM32L-Discovery用の

10

4.2. ソースフォルダ srcのファイル

フォルダ srcの中の特に重要なファイルについて説明します。

1) main.c

mainモジュールが記述されています。プログラムはここから開始します。

I/Oと USBのVCPの初期設定とVCP通信モジュールの呼び出しを記述しています。

2) stm32f4xx_it.c

割り込み処理を記述しています。

このプロジェクトでは、Timer2割り込みと USBの割り込み処理を記述しています。

4.3. システムクロックSYSCLKの設定

内部クロックHSIを使用してシステムクロック SYSCLKを32MHzに設定して使用します。

フォルダ srcのファイル system_stm32l1xx.c内のモジュール static void SetSysClock(void)に

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

SetSysClockToHSI();

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

を追加します。

場所は、HSEが failsだった場合のところです。

static void SetSysClockToHSI(void)の宣言とモジュール本体も追加します。

Page 11: USB VCP( COM - Coocantri-s.world.coocan.jp/.../Explain_STM32L_VCP.pdf1 STM32L_VCPの説明 V002 2014/07/17 USBのVCP(仮想COMポート)を使用して、Windows7 PCと非同期シリアル通信を行うSTM32L-Discovery用の

11

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

5.1. HandleTIM

1) Timer2初期化

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

// Timer2初期化

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

//引数 :

// uint16_t uint16_TIM_Pulse1 : Timer2 CH1 インターバル

// uint16_t uint16_TIM_Pulse2 : Timer2 CH2 インターバル

// uint16_t uint16_TIM_Pulse3 : Timer2 CH3 インターバル

// uint16_t uint16_TIM_Pulse4 : Timer2 CH4 インターバル

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

void InitializeTimer2(__IO uint16_t uint16_TIM_Pulse1, __IO uint16_t uint16_TIM_Pulse2,

__IO uint16_t uint16_TIM_Pulse3, __IO uint16_t uint16_TIM_Pulse4);

2) Timer2割り込み禁止

//Timer2割り込み禁止

void DisableIrqTim2(void);

3) Timer2割り込み許可

//Timer2割り込み許可

void EnableIrqTim2(void);

Page 12: USB VCP( COM - Coocantri-s.world.coocan.jp/.../Explain_STM32L_VCP.pdf1 STM32L_VCPの説明 V002 2014/07/17 USBのVCP(仮想COMポート)を使用して、Windows7 PCと非同期シリアル通信を行うSTM32L-Discovery用の

12

5.2. main.c

1) 使用するクロックの初期化

void RCC_Configuration(void);

2) I/Oの初期化

void Init_GPIOs(void);

5.3. UserPrograms

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

//Status LEDポート初期化

void InitializePortStatusLED(void);

//LED0ポート初期化

void InitializePortLED0(void);

2) StatusLEDの点滅

点滅一回の処理

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

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

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

// Timer2割り込み内で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);

Page 13: USB VCP( COM - Coocantri-s.world.coocan.jp/.../Explain_STM32L_VCP.pdf1 STM32L_VCPの説明 V002 2014/07/17 USBのVCP(仮想COMポート)を使用して、Windows7 PCと非同期シリアル通信を行うSTM32L-Discovery用の

13

5.4. CommunicateHOST

1) USBの初期化

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

//HOST Communication初期化 : USBをVCPとして使用するための初期化を行います。

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

void InitializeCommunicateHOST(void);

2) HOST通信処理

受信処理を行い、受信コマンドを処理して応答データを送信します。

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

// HOST通信処理

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

//戻り値 :

// -1 : 処理中

// 0 : 終了

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

int16_t CommunicateHOST(void)

3) VCP送信処理

VCPによりHOSTにデータを送信します。

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

// VCP 送信処理

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

//引数 :

// uint16_t uint16_SendLength : 送信データ数

// uint8_t *puint8_Data : 送信データのポインタ

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

void SendVCP(uint16_t uint16_SendLength, uint8_t *puint8_SendData);

4) VCP受信処理

VCPにより受信したデータを受信Bufferにセットします。

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

// VCP 受信処理

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

//引数 :

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

//戻り値 :

// -1 : 受信なし

// 0 : Error

// 1以上 : 受信byte数

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

int16_t ReceiveVCP(uint8_t *puint8_ReceiveBuffer);

Page 14: USB VCP( COM - Coocantri-s.world.coocan.jp/.../Explain_STM32L_VCP.pdf1 STM32L_VCPの説明 V002 2014/07/17 USBのVCP(仮想COMポート)を使用して、Windows7 PCと非同期シリアル通信を行うSTM32L-Discovery用の

14

5) HOSTコマンドの実行

受信コマンドを判定してそれぞれの処理モジュールを呼び出します。

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

// HOSTコマンドを実行する。

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

//引数 :

// uint16_t uint16_ReceiveLength : 受信データ数

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

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

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

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

uint16_t ExecuteCommandHOST(uint16_t uint16_ReceiveLength, uint8_t *puint8_ReceiveData,

uint8_t *puint8_SendData);

Page 15: USB VCP( COM - Coocantri-s.world.coocan.jp/.../Explain_STM32L_VCP.pdf1 STM32L_VCPの説明 V002 2014/07/17 USBのVCP(仮想COMポート)を使用して、Windows7 PCと非同期シリアル通信を行うSTM32L-Discovery用の

15

改訂履歴

V001 2014/02/02 初版

V002 2014/07/17 使用クロックの説明追加 および 誤記訂正