• 検索結果がありません。

CoIDE 用 STM32F4_UART2 の説明 V /03/30 STM32F4 Discovery の非同期シリアル通信ポート UART2 の送受信を行うプログラムです Free の開発ツール CoIDE で作成したプロジェクトサンプルです プログラムの開始番地は 0x08000

N/A
N/A
Protected

Academic year: 2021

シェア "CoIDE 用 STM32F4_UART2 の説明 V /03/30 STM32F4 Discovery の非同期シリアル通信ポート UART2 の送受信を行うプログラムです Free の開発ツール CoIDE で作成したプロジェクトサンプルです プログラムの開始番地は 0x08000"

Copied!
19
0
0

読み込み中.... (全文を見る)

全文

(1)

1 CoIDE 用 STM32F4_UART2 の説明 V002 2014/03/30 STM32F4 Discovery の非同期シリアル通信ポート UART2 の送受信を行うプログラムです。 Free の開発ツール CoIDE で作成したプロジェクトサンプルです。 プログラムの開始番地は 0x08000000 です。デバッグが可能です。 提供する PC のアプリケーションの Access_SerialPort を使用して UART(非同期シリアル通信)送受信の試験を行うことが できます。

目次

1. UART について ... 2 2. UART に使用する信号 ... 2 3. プログラム実行時の動作と確認 ... 4 3.1. 実行時の動作 ... 4 3.2. 動作確認 ... 4 1) アプリケーション Access_SerialPort のインストール ... 4 2) Access_SerialPort アプリケーションの起動 ... 7 3) COM ポートと通信速度の選択 ... 8 4) 送信データのエコーバック ... 10 5) 基板上の LED LD6(青)の点灯/消灯 ... 11 4. プロジェクトの構成 ... 12 4.1. 独自に追加したソースフォルダ ... 12 4.2. ルートのファイル ... 13 5. 主なモジュールの説明 ... 13 5.1. HandleTimer2 ... 13 5.2. HandleUART ... 14 5.3. main.c ... 15 5.4. UserPrograms ... 15 5.5. CommunicateHOST ... 17

(2)

2 1. UART について

UART は Universal Asynchronous Receiver Transmitter の頭文字をとったもので、非同期シリアル通信と呼ばれます。 シリアル通信とは、一本の信号線でデータをやりとりするために1bitずつデータを送出することをいいます。 データを受け渡すために、送信側が、1bitずつ送り出し、受信側が 1bitずつ取り込みます。 通常、UART という場合、送受信のために、送信と受信に一本ずつ信号線を使用します。 また、送受信する機器同士の GND を接続します。というわけで、信号線は、最低 3本 接続することになります。 詳しくは、「UART(非同期シリアル通信)の説明」 をご覧ください。 2. UART に使用する信号 STM32F4 Discovery の UART(非同期シリアル通信)に使用する信号と接続相手との接続は以下の通りです。 1) UART2 接続信号表 STM32F4 Discovery の UART 信号 番号 CPU 機能名 CPU 信号名 基板コネクタピン番号 方向 接続相手の 信号名 D-SUB 9S ストレート接続 1 USART2_TX PA2 P1-14 --- > RxD 2 2 USART2_RX PA3 P1-13 < --- TxD 3 3 GND GND P1-1, P1-2, P1-5, P1-23 P1-49, P1-50 P2-1, P2-2, P2-49, P2-50 < --- > GND 5 2) RS232C ドライバ接続例 この例では DSUB-9S には TxD, RxD, GND の3本の信号以外は接続されません。

(3)

3 3) PC との接続例 PC との接続は以下のようになります。 RS232C ドライバと DSUB-9S との接続は以下の通りです。 RS232C ドライバ DSUB-9S 1 RS2_TxD --- > 2 RxD 2 RS2_RxD < --- 3 TxD 3 GND < --- > 5 GND RS232C ドライバ D S U B -9S PC RS232C 変換ケーブル 図2. 3) STM32F4 Discovery A Mini B USB ケーブル : 電源供給 および ST-LINK のため USB ポート

(4)

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

3.1. 実行時の動作

1) プログラムを実行すると基板上の LED LD4(緑)が 1 秒点灯、2 秒消灯 で点滅します。 2) UART2 ポートで LED ON/OFF コマンド以外のデータを受信するとエコーバックします。

3) UART2 ポートで LED ON/OFF コマンドを受信すると、基板上の該当する LED の点灯/消灯を行います。 LED ON/OFF コマンドと LED との対応は以下のようになります。

a) LD3 ON LD3(橙)が点灯します。 b) LD3 OFF LD3(橙)が消灯します。 d) LD5 ON LD5(赤)が点灯します。 e) LD5 OFF LD5(赤)が消灯します。 f) LD6 ON LD6(青)が点灯します。 g) LD6 OFF LD6(青)が消灯します。 3.2. 動作確認

UART(非同期シリアル通信)のためのアプリケーション Access_SerialPort を使用して、CPU 基板の送受信の確認、 および コマンド文字列を送信して基板上の LED の点灯/消灯を行います。

1) アプリケーション Access_SerialPort のインストール

Access_SerialPort_Install.zip をダウンロードして解凍すると、次ページのようにフォルダ Access_SerialPort_Install の下に インストールのためのファイルが格納されています。

(5)

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

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

(6)

6

アプリケーション Access_SerialPort のインストールはこれで終了です。

STM32F4 Discovery でプロジェクト STM32F4_UART2 が実行されていて、PC と STM32F4 Discovery とが RS232C ケーブルで接続されている場合、上記のように ”COM(シリアルポート)を検索しました。” とメッセージが 表示されます。

通常は、スタートメニューの{ Access_SerialPort }をクリックするとアプリケーションを起動されて上記のフォームが 表示されます。

(7)

7 2) Access_SerialPort アプリケーションの起動

まず、PC と STM32F4 Discovery とを RS232C インターフェースで接続してください。

スタートメニューの { Access_SerialPort } をクリックするとアプリケーション Accsess_SerialPort が 起動して 次ページのフォームが表示されます。

(8)

8 3) COM ポートと通信速度の選択

(9)

9

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

この例では、”COM8 に設定しました。” とメッセージが表示されています。 通信速度は 9600bps でよいのでこのままにしておきます。

(10)

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

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

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

上記の例では、送信データに “How are you?” と入力して [送信] ボタンをクリックした結果、エコーバックのデータが 受信データの欄に表示されています。

(11)

11 5) 基板上の LED LD6(青)の点灯/消灯 基板上の LED LD6(青)を点灯/消灯するコマンドは以下のようになります。 a) 点灯 “LD6 ON” b) 消灯 “LD6 OFF” 上記の例では、”LD6 ON” を入力して [送信] ボタンをクリックした結果、STM32F4 Discovery は LD6(青)を点灯して、 ”OK : LD6 ON” を応答データとして送信しました。 LD6(青)を消灯したい場合は、”LD6 OFF” を送信します。 LD3(橙)、 LD5(赤)についても同様にして 点灯/消灯 を行うことができます。確認してみてください。

(12)

12 4. プロジェクトの構成 CoIDE で作成したプロジェクト STM32F4_UART2 を開いた状態を以下に示します。 4.1. 独自に追加したソースフォルダ 独自に追加したソースフォルダについて簡単に説明します。 1) CommonModules 共通処理を記述しています。 2) CommunicateHOST UART の通信処理を記述しています。LED 点灯/消灯のコマンドを受信して処理を行います。 コマンド以外のデータを受信した場合はそのままデータを折り返し送信します。 3) Handles Peripheral の設定などを行っています。 a) HandleTimer2.h HandleTimer2.c タイマ割り込みを使用するために、タイマの初期設定を記述しています。 b) HandleUART.h HandleUART.c UART の初期設定と送受信の処理を記述しています。 4) UserPrograms

(13)

13 4.2. ルートのファイル

ルートの中の特に重要なファイルについて説明します。 1) main.c

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

I/O と UART の初期設定と UART の送受信モジュールの呼び出しを記述しています。 2) stm32f4xx_it.c 割り込み処理を記述しています。 このプロジェクトでは、Timer2 割り込みと UART の割り込み処理を記述しています。 5. 主なモジュールの説明 5.1. HandleTimer2 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割り込み許可

(14)

14 5.2. HandleUART 1) UART2 の初期化 //---// UART2初期化 //---//引数 : // uint32_t uint32_BaudRate : 通信速度 bps

//---void InitializeUART2(uint32_t uint32_BaudRate)

2) UARTx の初期化(共通処理) UART 番号やピン番号を指定して、希望の UART を初期化します。 //---// UARTx初期化 //---//引数 : // uint32_t uint32_BaudRate : 通信速度 bps

// uint32_t RCC_AHB1Periph_GPIOx : specifies the AHB1 peripheral to gates its clock. // uint32_t RCC_APBxPeriph_USARTx : specifies the APB1 peripheral to gates its clock. // GPIO_TypeDef *GPIOx : where x can be (A..H) to select the GPIO peripheral.

// uint8_t GPIO_PinSourceTx : GPIO_PinSource : specifies the pin for the Alternate function. : TX // uint8_t GPIO_PinSourceRx : GPIO_PinSource : specifies the pin for the Alternate function. : RX // uint8_t GPIO_AF_USARTx : selects the pin to used as Alternate function. : USART1..3

// uint16_t GPIO_Pin_Tx : GPIO_Pin : specifies the port bit. : TX // uint16_t GPIO_Pin_Rx : GPIO_Pin : specifies the port bit. : RX

// USART_TypeDef* USARTx : where x can be 1, 2, 3, 4, 5 or 6 to select the USART or UART peripheral. // (STM32F4 Discoveryでは 2 と 3 のみ使用可能)

// uint8_t USARTx_IRQn : STM32 specific Interrupt Numbers

// int16_t *GLB_pint16_UARTxReceiveIRQ : 受信割り込みON/OFFフラグのポインタ

//---void InitializeUARTx(uint32_t uint32_BaudRate,

uint32_t RCC_AHB1Periph_GPIOx, uint32_t RCC_APBxPeriph_USARTx, GPIO_TypeDef *GPIOx,

uint8_t GPIO_PinSourceTx, uint8_t GPIO_PinSourceRx, uint8_t GPIO_AF_USARTx,

uint16_t GPIO_Pin_Tx, uint16_t GPIO_Pin_Rx,

USART_TypeDef* USARTx, uint8_t USARTx_IRQn, int16_t *GLB_pint16_UARTxReceiveIRQ );

(15)

15 5.3. main.c

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

void RCC_Configuration(void);

2) I/O の初期化

void Init_GPIOs(void);

5.4. UserPrograms 1) LED に使用する I/O の初期化(共通処理) GPIO番号とピン番号を指定して I/Oを初期化します。 //---// LEDポート初期化 //---//引数 :

// GPIO_TypeDef *GPIOx : GPIOポート指定 // uint16_t GPIO_Pin_x : GPIOピン指定

//---void InitializePortLED(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin_x);

2) 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);

(16)

16 3) 各LEDの初期化

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

//---void InitializePortStatusLED(void);

//---// LD3(橙) ポート初期化

//---void InitializePortLD3(void);

//---// LD5(赤) ポート初期化

//---void InitializePortLD5(void);

//---// LD6(青) ポート初期化

//---void InitializePortLD6(void);

4) Status LED : LD4(緑)の点滅処理 点灯/消灯の切り替えと時間の設定 //---// Status LED点滅 : LD4(緑) : 点灯/消灯 切り替え //---// Timer2割り込み内でGLB_uint16_vBlinkTimerStatusLEDをデクリメントする。 // GLB_uint16_vBlinkTimerStatusLEDが0になった時、呼び出される。 //---// 点灯/消灯 を切り替えると同時に 点灯時間/消灯時間 をセットする。 //---//引数 : // uint16_t uint16_TimeON : 点灯時間 // uint16_t uint16_TimeOFF : 消灯時間

(17)

17 5.5. CommunicateHOST 1) UART の初期化 //---// HOST通信パラメータ初期化 //---//引数 : // uint32_t uint32_BaudRate : 通信速度

//---void InitializeCommunicateHOST(uint32_t uint32_BaudRate);

2) HOST 通信処理 受信処理を行い、受信コマンドを処理して応答データを送信します。 //---// HOST通信処理 //---//戻り値 : // -1 : 処理中 // 0 : 終了

//---int16_t CommunicateHOST(void);

(18)

18 3) UART 送信処理 送信バッファにセットされたデータを指定された byte 数だけ送信します。 //---// UART 送信処理 //---//引数 : // uint16_t uint16_SendLength : 送信データ数 // uint8_t *puint8_Data : 送信データのポインタ

//---void SendUART(uint16_t uint16_SendLength);

4) UART 受信処理 受信の有無を判定して、受信があった場合、受信データを Buffer にセットします。 //---// UART 受信処理 //---//引数 :

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

// -1 : 受信なし

// 0 : Error

// 1以上 : 受信byte数

//---int16_t ReceiveUART(uint8_t *puint8_ReceiveBuffer);

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);

(19)

19 改訂履歴

V001 2014/03/26 初版 V002 2014/03/30 説明追加

参照

関連したドキュメント

主として、自己の居住の用に供する住宅の建築の用に供する目的で行う開発行為以外の開

メイン プログラムウィンドウでの作業 [スタート] → [すべてのプログラム] → [Acronis] → [PrivacyExpert] → [Acronis Pricacy Expert

Scival Topic Prominence

この課題のパート 2 では、 Packet Tracer のシミュレーション モードを使用して、ローカル

J-STAGE は、日本の学協会が発行する論文集やジャー ナルなどの国内外への情報発信のサポートを目的とした 事業で、平成

Actually it can be seen that all the characterizations of A ≤ ∗ B listed in Theorem 2.1 have singular value analogies in the general case..

操作は前章と同じです。但し中継子機の ACSH は、親機では無く中継器が送信する電波を受信します。本機を 前章①の操作で

AC100Vの供給開始/供給停止を行います。 動作の緊急停止を行います。