USB VCP( COM - Coocantri-s.world.coocan.jp/.../Explain_STM32L_VCP.pdf1 STM32L_VCPの説明 V002...
Transcript of USB VCP( COM - Coocantri-s.world.coocan.jp/.../Explain_STM32L_VCP.pdf1 STM32L_VCPの説明 V002...
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
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ポート)接続
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.
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アプリケーションを起動すると以下のダイアログが表示されます。
次ページに続く
5
2) COMポートの選択
COM選択のComboBoxでCOMを選択します。
確認のメッセージが表示されるので、よい場合は [はい(Y)] ボタンをクリックします。
次ページに続く
6
この例では、”COM6に設定しました。” とメッセージが表示されています。
次ページに続く
7
3) 送信データのエコーバック
送信データのTextBoxにASCII文字列を入力して、[送信] ボタンをクリックすると、CPU基板にデータが送信されます。
CPU基板はデータを受信して、そのデータをそのまま PCに送信します。
PCが受信したデータは受信データの部分に表示されます。
上記の例では、送信データに “How are you?” と入力して [送信] ボタンをクリックした結果、エコーバックのデータが
受信データの欄に表示されています。
次ページに続く
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” を送信します。
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です。
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)の宣言とモジュール本体も追加します。
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);
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);
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);
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);
15
改訂履歴
V001 2014/02/02 初版
V002 2014/07/17 使用クロックの説明追加 および 誤記訂正