2023年4月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            

カテゴリー

ブログパーツ

無料ブログはココログ

« STM32F4 DISCOVERYのGPIOをテストする(プログラム作成編) | トップページ | STM32F4 DISCOVERYのGPIOをテストする(実行・デバッグ編) »

2011年12月 9日 (金)

STM32F4 DISCOVERYのシリアル通信(UART)をテストする(送信編)

ロボット作ろう:シェーキー製作記
ちょっと順番が狂ってしまいました。ひとつ後の投稿を先に読んでください。

GPIOを使う目処は立ったので、次はシリアル通信をテストします。PCと通信が出来れば、変数をリポートさせたりすることで機能デバッグがやり易くなります。場合によってはデバッガよりずっと便利です。

ここでやっている機能チェックは、このページのDesign supportタブの下の方にあるFARMWAREをダウンロードし、Periphral_Examplsフォルダの中のサンプルコードを参考にしてコードを書いています。残念ながらUARTによるシリアル通信のサンプルはありません。USBもEtherも付けてやったんだからそっちでやれよというわけではないでしょうが、裏道を行ってるなあという感慨ひとしおです。トホホ。

気を取り直して作ったプログラムがこれです。USART2を使って9600bpsでAを約260ms周期で送信し続けます。先ずはこの辺から確認しましょう。

int main(void)
{
//GPIOAとUSART2にクロック供給
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

//GPIO初期化用構造体を作る
GPIO_InitTypeDef GPIO_InitStructure;

//GPIOAのPIN2を出力に設定
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

//GPIOAのPIN2をオルタネィテブファンクションのUSART2に割り当て
GPIO_PinAFConfig(GPIOA , GPIO_PinSource2 , GPIO_AF_USART2);

//USART初期化用構造体を作る
USART_InitTypeDef USART_InitStructure;

//USART2を9600bps,8bit,ストップビット1,パリティなし,フロー制御なし,送受信有効に設定
USART_InitStructure.USART_BaudRate = 9600*3;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART2, &USART_InitStructure);

//USART2を有効化
USART_Cmd(USART2, ENABLE);

//Aを繰り返し送信
while (1)
{
USART_SendData(USART2, 'A');
myDelay();
}
}

UARTを設定する前に当該ポートも初期化します。今回はTXDだけを使用しています。そのため出力に設定しています。時間待ち関数myDeley()は前と同じです。

ボーレートの設定が変ですね。最初普通に9600を設定し、オシロで測定したところ、3倍のボーレートになっていました。そこで、このように目的の3倍の値を設定することで調整しています。
後日調べてみたらここの投稿が目に留まりました。ヘッダファイルを修正すればいいようですが、まだ、正式にクロック周りを設定していないので、これは後回しに。

レベル変換機をPA2に入れてパソコンに接続、無事にボードからの送信を確認しました。次回は送受信をやってみます。

« STM32F4 DISCOVERYのGPIOをテストする(プログラム作成編) | トップページ | STM32F4 DISCOVERYのGPIOをテストする(実行・デバッグ編) »

ロボット作ろう」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: STM32F4 DISCOVERYのシリアル通信(UART)をテストする(送信編):

« STM32F4 DISCOVERYのGPIOをテストする(プログラム作成編) | トップページ | STM32F4 DISCOVERYのGPIOをテストする(実行・デバッグ編) »