STM32:レジスタ操作でスイッチ入力
1.本日の内容
(1) レジスタを読み込みスイッチを入力する。
(2) レジスタ操作により、スイッチを押すとLEDをONにするプログラムを作成する。
STM32マイコン(nucleo f401RE)を使用する。
・目次
2.内容
(1) やる内容の詳細
・STM32マイコン(nucleo f401RE)を使用して、スイッチを押した時にLEDを点灯
1秒後に消灯するプログラムを作成する。
・ただLEDを消灯するわけではなく、LEDの点灯を検知し、点灯したら1秒後消灯する。
(2) 使用部品
個数 | 部品名 | 型番 |
---|---|---|
1 | USBケーブル | USBミニBタイプ |
1 | mbed(マイコンボード) | nucleo f401RE |
(3) STM32CubeMXの設定、プログラムを出力
CubeMXの設定は下記記事の
「(3)STM32CubeMXの設定、プログラムを出力」を参照
(4) AtricTrueStdioでプログラム作成
/* USER CODE BEGIN 3 */ //スイッチ(PC_13)が押されたとき、動作 if(!(GPIOC -> IDR & 0b0010000000000000)){ LED1_GPIO_Port->ODR |= GPIO_ODR_OD5; //PA5プルアップ if(GPIOA -> IDR & 0b0000000000100000){ //PA5がHighになったら実行 HAL_Delay(1000); LED1_GPIO_Port->ODR = 0b0000000000000000;//プルダウン } } /* USER CODE END 3 */
(5) プログラム説明
(a) GPIOC -> IDR & 0b0010000000000000
・PC13のHIGH/LOWを確認する。
・IDRが入力用レジスタ
・PC13の為、GPIOCを指定する。
・PC13のため、0b0010000000000000と13bit目をHighにする。
これにより、そのポートのHigh,Lowを読み出し出来る。
・mbedの回路上、GPIOC -> IDR & 0b0010000000000000が0の時スイッチがONということになる。
・if(!xxx)で、反転している。
※RM0368の8.4.5を参照
→ここからダウンロードできる:STM32/STM8 マイクロコントローラ リファレンス マニュアル(日本語)
(b) LED1_GPIO_Port->ODR |= GPIO_ODR_OD5;
→PA5のLED1をONにする。
→参照:STM32マイコン_15(レジスタ操作でLED点滅2)
(c) GPIOA -> IDR & 0b0000000000100000
・PA5のHIGH/LOWを確認する。
・PA5なので、GPIOAを指定
・IDRが入力用レジスタ
・PA5なので、0b0000000000100000と5bit目を1にしている。
・PA5がHIGHになった時、GPIOA -> IDR & 0b0000000000100000は1になる。
(d) CubeMXでKEY1と作成しているため、(b)と同様に
GPIOC -> IDR & 0b0010000000000000 は
KEY1_GPIO_Port->IDR & KEY1_Pin
と書いてもよい。
STM32f401xe.hで、#defineを用いて、別名に置き換えている。
CubeMXで作成した場合、自動的にそのファイルがインクルードされる。
CubeMXにて、KEY1と名前を指定しておくと、ポート位置が変わっても、
プログラムを変更せずにすむ。
(6) プログラム作成(レジスタを用いた入力用関数作成)
・スイッチを押すと点灯し1秒後消灯するプログラム
/* USER CODE BEGIN 0 */ ///base:GPIOのベース pin:ピンBIT指定 戻り:0/1 #define InGPIO(port,pin) ((((port->IDR)&(pin))==0)?0:1) #define KEY1 InGPIO(KEY1_GPIO_Port,KEY1_Pin) /* USER CODE END 0 */ /* USER CODE BEGIN 3 */ if(KEY1==0){ LED1_GPIO_Port->ODR |= GPIO_ODR_OD5; //PA5プルアップ HAL_Delay(1000); //1000ms wait LED1_GPIO_Port->ODR &= ~GPIO_ODR_OD5 //PA5プルダウン } /* USER CODE END 3 */
(7) プログラムの説明
3.関連記事
・STM32マイコン_2(UART通信:TeraTermにHellow表示) - Project_OKI’s diary
・STM32マイコン_3(UART通信:複数文字送信) - Project_OKI’s diary
・STM32マイコン_4(NVICの設定内容) - Project_OKI’s diary
・STM32マイコン_5(スイッチ入力とLED点灯、消灯) - Project_OKI’s diary
その他:
・CubeIDEの使い方(起動~デバック実行) - Project_OKI’s diary
C言語:
・組み込みの為のC言語基礎知識1(printf) - Project_OKI’s diary
・C言語基礎知識2(for分で処理を繰り返す) - Project_OKI’s diary
・C言語基礎知識3(配列) - Project_OKI’s diary