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

1. UART について UART は Universal Asynchronous Receiver Transmitter の頭文字をとったもので 非同期シリアル通信と呼ばれます シリアル通信とは 一本の信号線でデータをやりとりするために 1bit ずつデータを送出することをいいます データを受

N/A
N/A
Protected

Academic year: 2021

シェア "1. UART について UART は Universal Asynchronous Receiver Transmitter の頭文字をとったもので 非同期シリアル通信と呼ばれます シリアル通信とは 一本の信号線でデータをやりとりするために 1bit ずつデータを送出することをいいます データを受"

Copied!
14
0
0

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

全文

(1)

1 STM32L_UART1 の説明 V004 2014/03/30

STM32L-Discovery の UART 1 の送受信を行うプログラムです。

無料の開発ツール Atollic TrueSTUDIO for ARM Lite(試用版) で作成したプロジェクトです。 プログラムの開始番地は 0x08000000 です。デバッグが可能です。 PC アプリケーションの Access_SerialPort を使用して UART(非同期シリアル通信)送受信の試験を行うことができます。

目次

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

(2)

2 1. UART について

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

(3)

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

(4)

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

3.1. 実行時の動作

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

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

3.2. 動作確認

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

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

まず、PC と STM32L-Discovery とを RS232C インターフェースで接続してください。 Access_SerialPort アプリケーションを起動すると以下のダイアログが表示されます。

(5)

5 2) COM ポートと通信速度の選択

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

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

(6)

6

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

(7)

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

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

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

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

(8)

8 4) 基板上の LED LD4(青)の点灯/消灯 基板上の LED LD4(青)を点灯/消灯するコマンドは以下のようになります。 a) 点灯 “LED0 ON” b) 消灯 “LED0 OFF”

上記の例では、”LED0 ON” を入力して [送信] ボタンをクリックした結果、STM32L-Discovery は LD4(青)を点灯して、 ”OK : LED0 ON” を応答データとして送信しました。

(9)

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

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

(10)

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

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

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

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

(11)

11 5.2. HandleUART

1) UART の初期化

//UART1初期化

void InitializeUART1(uint32_t uint32_BaudRate);

5.3. main.c

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

void RCC_Configuration(void);

2) I/O の初期化

void Init_GPIOs(void);

5.4. 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 : 消灯時間

(12)

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

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

//---//UART1 パラメータ初期化

//---defHostReceiveTimeOut = -1; //TimeOut OFF

defHostReceiveEndTime = -1; //Initialize EndTime

defHostRxDelimiter = (uint8_t)0;

//Set Value for TimeOut

defHostReceiveTimeOutVal = -1; //TimeOutなし

//Set Value for EndTime

defHostReceiveEndTimeVal = 50; //受信終了タイマ 50mSec defHostReadPointer = 0; defHostWritePointer = 0; //---//UART1初期化 : 通信速度設定 //---InitializeUART1(uint32_BaudRate); } 2) HOST 通信処理 受信処理を行い、受信コマンドを処理して応答データを送信します。 //---// HOST通信処理 //---//戻り値 : // -1 : 処理中 // 0 : 終了

(13)

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

(14)

14 改訂履歴 V001 2014/02/05 初版 V002 2014/03/09 誤記訂正 V003 2014/03/26 誤記訂正 V004 2014/03/30 説明追加

参照

関連したドキュメント

ロボットは「心」を持つことができるのか 、 という問いに対する柴 しば 田 た 先生の考え方を

断面が変化する個所には伸縮継目を設けるとともに、斜面部においては、継目部受け台とすべり止め

2021] .さらに対応するプログラミング言語も作

が前スライドの (i)-(iii) を満たすとする.このとき,以下の3つの公理を 満たす整数を に対する degree ( 次数 ) といい, と書く..

BC107 は、電源を入れて自動的に GPS 信号を受信します。GPS

これはつまり十進法ではなく、一進法を用いて自然数を表記するということである。とは いえ数が大きくなると見にくくなるので、.. 0, 1,

たとえば、市町村の計画冊子に載せられているアンケート内容をみると、 「朝食を摂っています か 」 「睡眠時間は十分とっていますか」

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