Project_OKI’s diary
スイッチの入力とLED出力 1.本日の内容 (1) STM32マイコン(nucleo f401RE)を使用して、スイッチを押したときに、LEDの点灯/消灯を行う。
・目次
- スイッチの入力とLED出力
- 1.本日の内容
- 2.内容
- (1) やる内容の詳細
- (2) 使用部品
- (3) STM32CubeMXの設定、プログラムを出力
- (4) AtricTrueStdioでプログラム作成
- (5) プログラムの説明
- (6) プログラムの説明
- 3.関連記事
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.関連記事
関連記事一覧:・Project OKI過去のブログ一覧とか - Project_OKI’s diary
組み込みC言語: ・STM32マイコン学習_1(環境の導入:CubeMXとTrueStdio) - Project_OKI’s diary
・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言語基礎知識4(if文) - Project_OKI’s diary
・C言語基礎知識5(switch文) - Project_OKI’s diary
データシート: ・UM1725|デザイン/サポート|STM32, STM8ファミリはSTの32bit/8bit汎用マイクロコントローラ製品 ・RM0368|デザイン/サポート|STM32, STM8ファミリはSTの32bit/8bit汎用マイクロコントローラ製品 ・NUCLEO-F401RE | Mbed 参考:・C++日本語リファレンス(uint8_t)・STM32でUARTをやってみる1・STM32CubeIDEを使ってみよう How To STM32CubeIDE 日本語版 (5) UARTを使ってみよう・マイクロマウス研修(kora編)[23] STM32マイコンでシリアル通信・C言語ゼミ あると便利な電子工作セットKeeYees 電子工作キット 初心者向け スターターキット 電子部品 基本部品56種類 エレクトロニクス入門キット Electronics Fun Kit チ価格:3478円(税込、送料無料) (2022/7/17時点)
楽天で購入