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 ... 122 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) 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 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 2) COM ポートと通信速度の選択
COM 選択の ComboBox で COM を選択します。
確認のメッセージが表示されるので、よい場合は [はい(Y)] ボタンをクリックします。
6
この例では、”COM4 に設定しました。” とメッセージが表示されています。 通信速度は 9600bps でよいのでこのままにしておきます。
7 3) 送信データのエコーバック
送信データの TextBox に ASCII 文字列を入力して、[送信] ボタンをクリックすると、CPU 基板にデータが送信されます。 CPU 基板はデータを受信して、そのデータをそのまま PC に送信します。
PC が受信したデータは受信データの部分に表示されます。
上記の例では、送信データに “How are you?” と入力して [送信] ボタンをクリックした結果、エコーバックのデータが 受信データの欄に表示されています。
8 4) 基板上の LED LD4(青)の点灯/消灯 基板上の LED LD4(青)を点灯/消灯するコマンドは以下のようになります。 a) 点灯 “LED0 ON” b) 消灯 “LED0 OFF”
上記の例では、”LED0 ON” を入力して [送信] ボタンをクリックした結果、STM32L-Discovery は LD4(青)を点灯して、 ”OK : LED0 ON” を応答データとして送信しました。
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 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 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 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 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 改訂履歴 V001 2014/02/05 初版 V002 2014/03/09 誤記訂正 V003 2014/03/26 誤記訂正 V004 2014/03/30 説明追加