Project_OKI’s diary

エンジニアの勉強ブログ

STM32マイコン_5(スイッチ入力とLED点灯、消灯)

​​​​

スイッチの入力と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が自動的に起動される。

 

 参考:

project-oki.hatenablog.com

(4) AtricTrueStdioでプログラム作成
 (a) AtricTrueStdioから開く場合(上記(g)をした場合は不要)
    ・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」になっている。

 ※データシート:UM1725データシート

GPIO_Read

 (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を出力
 (c) 次回
   このGPIOというのは、while()でループをしており、 
   if(button_state == 0)とelseで、その時のプログランムが実行されたときに、
   stateの値を見て、stateが1ならLEDを点灯、0ならLED消灯するようになっている。
   
   下記プログラムを作成する場合、スイッチを監視しているわけではないため、
   スイッチの押すタイミングによって、ついたりつかなかったりと上手く動作しない。
   ・LEDがOFFの状態で、スイッチを押したときは、LEDをON
   ・LEDがONの状態で、スイッチを押したときは、LEDをOFF
     
   そこで使用できるのが割り込み処理である。
   割り込み処理は、トリガーを検知した場合のみ、実行されるプログラムを作成する。
   次回、割り込み処理の実装を行う。
 

3.関連記事

組み込みC言語

 

あると便利な電子工作セット