LED制御用ファイルの作成
1.本日の内容
(1) STM32マイコン(nucleof401RE)を使用しLEDの点灯/消灯を制御する。
(2) 制御用のソースファイル、ヘッダファイルを作成する。
(3) 今までは、main.cのUSER CODE部分に記載していた。
LED制御用にled.c、led.hファイルを作成する。
LED制御用以外に、基本的なON/OFFやture/falseを定義する
typedef.hファイルを作成する。
・目次
2.内容
(1) やる内容の詳細
・LED制御用ファイル(led.c、led.h)を作成する。
・作成したファイルを使用して、STM32マイコン(nucleo f401RE)を使用して、
ledの点灯/消灯を行う。
・PA_5のLEDの点灯/消灯を制御する。
(2) CubeMXの設定
CubeMXの設定は、下記記事と同じ。
→STM32マイコン_9(タイマ割り込み:LED点滅) - Project_OKI’s diary
(3) プログラムの作成
typedef.hファイルの作成
/** * @file typedef.h * @brief 基本型変数定義 * @date 2023/01/10 */ #ifndef TYPEDEF_H #define TYPEDEF_H /** \mainpage * -#本プログラムについて<BR> * 本プログラムは、値が明示的に決まっているもの * (true/falseやON/OFFなど) * を基本的な型として定義する。 */ /* ***************************************** enum define ***************************************** */ #ifndef NULL #define NULL '\0' ///<NULLを'\0'と定義 #endif ///BOOL型(ない場合のみ) #undef false #undef true typedef enum{false=0 ///<為 ,true ///<真 }bool; ///ONOFF型 typedef enum{OFF=0 ///<OFF指定 ,ON ///<ON指定 }ONOFF; ///SIGNAL型 typedef enum{LOW=0 ///<信号をLOWにする ,HIGH ///<信号をHIGHにする。 }SIGNAL; ///UPDOWN型 typedef enum{UP=0 ///<UP指定 ,DOWN ///<DOWN指定 }UPDOWN; //INOUT型 typedef enum{INP=0 ///<IN指定 ,OUTP=1 ///<OUT指定 }INOUT; ///基本型定義 typedef signed char SCHAR; ///<8bit変数 符号有り typedef unsigned char UCHAR; ///<8bit変数 符号無し typedef signed short SSHORT; ///<16bit変数 符号有り typedef unsigned short USHORT; ///<16bit変数 符号無し typedef signed int SINT; ///<int型 符号有り(8bitサイズ) typedef unsigned int UINT; ///<int型 符号無し(8bitサイズ) typedef signed long SLONG; ///<32bit変数 符号有り typedef unsigned long ULONG; ///<32bit変数 符号無し typedef float SFLOAT; ///<32bit浮動小数点変数 typedef double SDOUBLE; ///<64bit浮動小数点変数 #endif
led.cファイルの作成
/** ******************************************************* */ /** * @file led.c * @brief LED制御処理 * @brief Compiler : Atollic True Studio for STM32 9.0.0 * @brief CPU : STM32F401 * @date $LastChangedDate : 2023/01/12 $ */ /** ******************************************************* */ /* ************************************************************ */ // インクルード ファイル /* ************************************************************* */ #include "main.h" #include "led.h" //LED制御ヘッダファイルのインクルード /** ************************************************************ */ /** 外部定義変数 */ /** ************************************************************ */ LEDCTRL ledctrl; //LED制御構造体 /** ******************************************************* */ // 関数の作成 /** *************************************************** */ /** *********************************************** */ /** * MODE1 LED点灯/消灯処理(LED1を点灯/消灯(反転)する処理) * @param void : none * @return void : none
*/ /** ************************************************ */ void Led1Blink() { ///LED点滅フラグ確認 if(ledctrl.led1blif == true){ if(Led1State == HIGH){ ///LEDがHIGHの時 Led1(LOW); ///LED1をON }else{ ///LED1がLOWの時 Led1(HIGH); ///LED1をOFF } } } /* **** ファイルの最後 ( led.c ) ******************************** */
led.hファイルの作成
/** ******************************************** */ /** * @file led.h * @brief LED制御ヘッダ * @brief Compiler : Atollic True Studio for STM32 9.0.0 * @brief CPU : STM32F401RE * @date $LastChangedDate : 2022/07/30 $ * */ /** ******************************************** */ ///多重インクルード防止 #ifndef LED_H ///<LED未定義? #define LED_H ///<LED_H 定義済み!! /* ****************************************************** */ // インクルード ファイル /**************************************************** */ #include "typedef.h" //基本型変数定義ヘッダファイルのインクルード /* **************************************************** */ // 定数値の定義 /* **************************************************** */ /* ************************************************** */ // 式、関数の置き換え /* **************************************************** */ ///Bit変換:出力 #define OutGPIOBit(port,pin,data) (port->ODR=((port->ODR&~(pin))|((data==0) ? 0 : (pin)))) ///GPIO設定 ///Bit変換:入力 #define InGPIO(port,pin) ((((port->IDR)&(pin))==0)?0:1) ///LED ON/OFF関数の作成 #define Led1(dt) OutGPIOBit(LED1_GPIO_Port,LED1_Pin,dt) ///LEDステート確認用変数 #define Led1State InGPIO(LED1_GPIO_Port,LED1_Pin) /* ****************************************************** */ // 構造体の定義 /* ************************************************ */ //MODE LEDステート管理用構造体 typedef struct{ //LED動作ステート USHORT led1blicout;///LED点滅時間カウント用変数 bool led1blif; ///LED1点滅ステート:true:LED点滅 false:LED点滅しない } LEDCTRL; /* **************************************************** */ // 外部変数の定義 /* ********************************************* */ extern LEDCTRL ledctrl; ///LED制御構造体 /* ********************************************** */ // 関数のプロトタイプ宣言 /* ********************************************* */ extern void Led1Blink(); ///LED1を点灯/消灯(反転)関数 #endif ///<LED_H 未定義 End /* **** ファイルの最後 ( led.h ) ************************* */
main.cファイルの作成
/* USER CODE BEGIN Includes */ #include "typedef.h" #include "led.h" /* USER CODE END Includes */
/* USER CODE BEGIN 2 */ //TIM3開始 HAL_TIM_Base_Start_IT(&htim3); //LED点滅開始 ledctrl.led1blif = true; /* USER CODE END 2 */
/* USER CODE BEGIN 4 */ //タイマー割り込み実行関数 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if(htim == &htim3){ //TIM3割り込み処理(1秒ごとに実行) //LED点滅処理 Led1Blink(); } } /* USER CODE END 4 */
(4) プログラムの説明
構造体名 | 構造体変数名 | |
---|---|---|
LEDCTRL | ledctrl | |
型 | 変数名 | 役割 |
bool | led1blif | LED1点滅ON/OFF制御フラグ |
USHORT | led1blitim | LED1点滅ON/OFF時間(使っていない) |
関数名 | 役割 | 引数 | 返り値 |
---|---|---|---|
Led1Blink | LED1 ON/OFF反転関数 | なし | なし |
LED1 | LED1 ON/OFF関数:HIGHでLED ON、LOWでLED OFF | HIGH/LOW | なし |
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
*1:port->ODR&~(pin