STM32:レジスタ操作でLED点滅
1.本日の内容
(1) STM32マイコン(nucleo f401RE)を使用して、LEDの点灯/消灯を行う。
(2) 今回は、HALの関数を使わず、レジスタを操作し、LEDを点滅させる。
(3) #defineを使用し、LED ON/OFF用の関数を作成する。
前の記事:STM32マイコン_10(レジスタ操作でLED点滅) - Project_OKI’s diary
・目次
2.内容
(1) やる内容の詳細
・STM32マイコン(nucleo f401RE)を使用して、LEDの点灯/消灯を行う。
・nucleof401についてる青ボタンを押した時
・プログラムを実行し、LEDを2秒ごとに点滅する。
・レジスタの操作でON/OFF出来ることを確認する。
・#defineでLED ON/OFFを制御する関数を作る。
(2) 使用部品
個数 | 部品名 | 型番 |
---|---|---|
1 | USBケーブル | USBミニBタイプ |
1 | mbed(マイコンボード) | nucleo f401RE |
(3) STM32CubeMXの設定、プログラムを出力
CubeMXの設定は下記記事の
「(3)STM32CubeMXの設定、プログラムを出力」を参照
→STM32マイコン_5(スイッチ入力とLED点灯、消灯) - Project_OKI’s diary
(4) AtricTrueStdioでプログラム作成
(a) プログラムの書き込み
・トンカチマークをクリックして、ビルドする。
・エラーが出ないことを確認する。
・下記プログラムを記載する。
/* USER CODE BEGIN 3 */ LED1_GPIO_Port->ODR |= GPIO_ODR_OD5; //プルアップ HAL_Delay(2000); LED1_GPIO_Port->ODR &= ~GPIO_ODR_OD5; //プルダウン HAL_Delay(2000); /* USER CODE END 3 */
(5) プログラムの説明
・LEDを点灯させる。
・ODRがポートの設定となっている。
・LEDを消灯させる。
(6) AtricTrueStdioでプログラム作成(LED ON/OFF関数作成)
/* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ ///ONOFF型作成(ON =1, OFF =0) typedef enum{OFF=0 ///<OFF指定 ,ON ///<ON指定 }ONOFF; /* USER CODE END PTD */ /* Private macro -----------------------------------------------------------*/ /* USER CODE BEGIN PM */ #define OutGPIOBit(port,pin,data) (port->ODR=((port->ODR&~(pin))|((data==0) ? 0 : (pin)))) //LED ON/OFF関数の作成 #define Led1(dt) OutGPIOBit(LED1_GPIO_Port,LED1_Pin,dt) //LED1:LEDのON/OFF /* USER CODE END PM */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ Led1(ON); //LED ON HAL_Delay(2000); //2秒wait Led1(OFF); //LED OFF HAL_Delay(2000); //2秒wait } /* 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
・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
*1:port->ODR&~(pin