Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
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
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
ドライバ DSUB-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” を応答データとして送信しました。
LD4(青)を消灯したい場合は、”LED0 OFF” を送信します。
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割り込み許可
void EnableIrqTim2(void);
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 : 消灯時間
//----------------------------------------------------------------
void BlinkStatusLED(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 : 終了
//------------------------------------------------------------
int16_t CommunicateHOST(void);
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 説明追加