« STM32F303のシルク印刷 | トップページ | 続いてジョイスティック »

2017年10月12日 (木)

まずはLチカ

紆余曲折あったが、STM32の開発環境は、TrueStudio+CubeMXとした。

STM32のピン設定は、今までずっと手作業でやっていた。正確にいうと、SPL(Standard Peripheral Library)というライブラリを使って、手動でビットをON/OFFしていた。
マイコンが多機能になるにつれ、膨大な設定、初期化ルーチンを書かねばならない。STM32ともなると、かなり複雑で、新しいボードが発売されても移行する気になれなかった。

そんな中、CubeMXという自動設定ツールがリリースされた。ピン設定のソースを自動生成してくれる上、基本的なライブラリも付属するらしい。
両者に互換性はなく、それなりに使い込んでいた人には、自作ライブラリを作り直しとなる。だがイチから始める人は、自前でwait1ms()とか作らなくても、HAL_Delay()一つで事足りる。これだけでも相当楽だ。

リリース当時はSTM32F4系しかサポートされていなかった。STM32F4xxは大きくて、イベントの用のメカに組み込むには向いていない。しかしいつの間にか、小型のSTM32F3xxにも対応していたようだ。ちょうどいい機会なので乗り換えた。

さて、最初はオンボードのLチカである。ArduinoでいうLED13に相当する。
STM32F303K8のデータシートというか、以下の画像(※1)を見ると、

Stm32f303k8 STM32F303K8

オンボードのLチカ(LED点灯)は、Arduino的に言うとD13となっているが、STM32的にはPB3だということがわかる。
CubeMXでPB3をOUTPUTに設定して、プロジェクトを作った。
main()関数のユーザプログラム部分に以下のようなコードを追加する。

while(1) {
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);
	HAL_Delay(300);
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);
	HAL_Delay(300);
}

問題なくLEDが点滅した。
CubeMXを使うと、ピンを設定する部分のコードを書かなくていいから、ずいぶん楽だ。
以下、外部Lチカ→sw判定→シリアル通信→ADC入力という手順で進もう。
外部LEDは機能が少ないD3(PB0)に接続した。

D3(PB0)───R510───LED───GND

プロジェクトに上書きすると、当然だが「自分が書いたコードは消えてしまう」ので、その度に、該当コードを上書き修正することになる。

while(1) {
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
	HAL_Delay(300);
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
	HAL_Delay(300);
}

続いてスイッチの判定。スイッチで、LEDをON/OFFすればいいかな。
スイッチはなるべく使い道のない(※2)ピンに接続しよう。今回はD3(PF1)を選択し、INPUT&PULLUPに設定した。
配線はこんな感じになる。

GND───SW──┬──R10K───VCC
D3(PF1)────┘

PCとのシリアル通信は、USART2を使うことになる。PA2とPA15を設定するだけだ。
プログラムはこんな感じ。

int flag = 0;
int sw;
char buf[] = "sw on!\r\n";
while (1) {
	sw = HAL_GPIO_ReadPin(GPIOF, GPIO_PIN_1);
	if( sw==0 ) {
		flag = 1 - flag;
		HAL_UART_Transmit( &huart2, (uint8_t*)buf, sizeof(buf), 0xffff);
		HAL_Delay(300);
	}
	if( flag ) {
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
	}
	else {
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
	}
}

文字が表示できるとデバグに便利だ。このままジョイスティックといきたいところだが、今日はここまで。

※1. STM32を使うのであれば、該当のマイコンボードの画像をダウンロードしておいた方がいい。デスクトップの壁紙にしてもいいし、カラー印刷してファイルにはさんでもいい。
拡大コピーしたものをポスターにして、壁に貼れるなら理想的だ。

※2. 特別な機能を持ったピンは空けておく。たとえばI2CやSPI1は避ける。

« STM32F303のシルク印刷 | トップページ | 続いてジョイスティック »

電子工作」カテゴリの記事

コメント

コメントを書く

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

トラックバック


この記事へのトラックバック一覧です: まずはLチカ:

« STM32F303のシルク印刷 | トップページ | 続いてジョイスティック »

最近のトラックバック