スイッチの入力とLED出力
1.本日の内容
(1) STM32マイコン(nucleo f401RE)を使用して、スイッチを押したときに、LEDの点灯/消灯を行う。
・目次
2.内容
(1) やる内容の詳細
・STM32マイコン(nucleo f401RE)を使用して、LEDの点灯/消灯を行う。
・nucleof401についてる青ボタンを押している間、nucleof401のLED(PA_5)を点灯。
・青ボタン(PC_13)を離している場合は、LEDを消灯する。
・GPIOのポート(青ボタン)の状態をReadで取り込む。
(2) 使用部品
個数 | 部品名 | 型番 |
---|---|---|
1 | USBケーブル | USBミニBタイプ |
1 | mbed(マイコンボード) | nucleo f401RE |
(3) STM32CubeMXの設定、プログラムを出力
(a)使用ピンを設定
・PC13:GPIO_Input
・PA5:GPIO_Output
※ピンの場所:NUCLEO-F401RE | Mbed
(b)使用するピンの名前を変更
・PC13→右クリック→Enter Username→KEY1とする。
・PA5→右クリック→Enter Username→LED1とする。
(c)プログラムの出力
・Project Managerを選択
・Project Nameにプログラムの名前を入力:SW_LED1
※スペース、空白文字、日本語を含めるとエラーになる場合があるので、使用しない。
・Project Location:プロジェクトを保存する場所
・Application Structure:Advanced (出力するフォルダの構成を選択)
・Toolchain/IDE:TrueSTUDIO(今回は、AtoricTrueStdioを使用するため)
(f)GENERATE CODEで、コードを出力
(g)Open pROJECTをクリックすると、AtricTrueStdioが自動的に起動される。
参考:
(4) AtricTrueStdioでプログラム作成
・AtricTrueStdioを起動
・インポート元のディレクトリをクリック
・CubeMXで作成した場所を指定
・フォルダーにSW_LED1(作成したプロジェクトの名前)が表示
・チェックされているのを確認して、終了をクリック
(b) プログラムの書き込み
・トンカチマークをクリックして、ビルドする。
・エラーが出ないことを確認する。
・下記プログラムを記載する。
(5) プログラムの説明
(a) プログラムの書き込み
・トンカチマークをクリックして、ビルドする。
・エラーが出ないことを確認する。
・下記プログラムを記載する。
/* USER CODE BEGIN 1 */ uint8_t button_state = 0; //ボタン確認用変数 /* USER CODE END 1 */ while(1){ /* USER CODE BEGIN 3 */ //GPIOのステータス監視 //ボタンの入力をbutton_stateに格納 //ボタンが押されたらbutton_state = 0となる。 button_state= HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin); if(button_state == 0){ //ボタンが押されたら動作 HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,SET); //LEDをON }else{ //ボタンが押された場合以外(離してる場合) HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,RESET); //LEDをoff } }
(6) プログラムの説明
(a) button_state= HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin);
・HAL_GPIO_ReadPinで、PC13のPin状態を読み込んでいる。
・PC13がLowなら0、Highなら1が代入される。
・その数値をbutton_stateに格納している。
・第一引数:KEY1_GPIO_Portが「CubeMXで設定した名前_GPIO_Port」
になっている。
・第二引数:KEY1_Pinが「CubeMXで設定した名前_Pin」になっている。
(b) HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,SET);
・HAL_GPIO_WritePinがGPIOポートのHigh/Lowを設定
・第一引数:LED1_GPIO_PortがCubeMXで設定した名前_GPIO_Port」になっている。
・第二引数:LED1_Pinが「CubeMXで設定した名前_Pin」になっている。
・第三引数:High/Lowの設定
・SET :Highに設定→3.3Vを出力
・RESET:Lowに設定→0Vを出力
このGPIOというのは、while()でループをしており、
if(button_state == 0)とelseで、その時のプログランムが実行されたときに、
stateの値を見て、stateが1ならLEDを点灯、0ならLED消灯するようになっている。
下記プログラムを作成する場合、スイッチを監視しているわけではないため、
スイッチの押すタイミングによって、ついたりつかなかったりと上手く動作しない。
・LEDがOFFの状態で、スイッチを押したときは、LEDをON
・LEDがONの状態で、スイッチを押したときは、LEDをOFF
そこで使用できるのが割り込み処理である。
割り込み処理は、トリガーを検知した場合のみ、実行されるプログラムを作成する。
次回、割り込み処理の実装を行う。
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
・SPI通信とは - 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
・C++日本語リファレンス(uint8_t)
・STM32でUARTをやってみる1
・STM32CubeIDEを使ってみよう How To STM32CubeIDE 日本語版 (5) UARTを使ってみよう
・マイクロマウス研修(kora編)[23] STM32マイコンでシリアル通信
・C言語ゼミ
あると便利な電子工作セット
|