サンプルプログラム N446RE_LED_USW の説明
LED点滅とスイッチ入力の処理を
並列に動作させるプログラムです。
STMicroelectronics社製の
評価用基板、NUCLEO-F446RE と
freeの開発ツール、STM32CubeIDE を
使用しています。
目次
サンプルプログラム N446RE_LED_USW のソース
サンプルプログラム N446RE_LED_USW の説明
N446RE_LED_USW の構成
N446RE_LED_USW の動作パラメータの定義
ユーザープログラムの実行開始位置
N446RE_LED_USW の main() の説明
1) 初期化の部分
2) LED点滅 と User Switch入力検出 処理の部分
各モジュールの説明
1) Blk_LED_Stat
2) Det_USW
3) Renew_Flag_Blk_LED
サンプルプログラム N446RE_LED_USW のソース
STM32CubeIDE 1.7.0 を使用して作成しました。
ここからサンプルプログラム R_N446RE_LED_USW.zip をダウンロードしてください。
サンプルプログラム N446RE_LED_USW の説明
NUCLEO-F446RE基板上のLED、LD2を点滅させます。
NUCLEO-F446RE基板上のUSERスイッチを押すごとに点滅間隔を変化させます。
LED点滅処理とスイッチ入力検出処理は並列に動作します。
プロジェクトを最初に開いた画面は以下のようになります。
以下、サンプルプログラム N446RE_LED_USW について説明していきます。
N446RE_LED_USW の構成
STM32CubeIDEの画面左側、Project Explorerの
N446RE_LED_USW を展開した画面は以下のようになります。
サンプルプログラム N446RE_LED_USW の構成を以下に示します。
N446RE_LED_USW
|
|- Includes
|
|- Blk_LED_Stat : Status LED点滅処理
| |-Blk_LED_Stat.c
| |-Blk_LED_Stat.h
|
|- Core
| |- Inc
| | |- main.h
| | |- stm32f4xx_hal_conf.h
| | |- stm32f4xx_it.h
| |
| |- Src
| | |- main.c
| | |- stm32f4xx_hal_msp.c
| | |- stm32f4xx_it.c
| | |- syscalls.c
| | |- system.c
| | |- system_stm32f4xx.c
| |
| |- Startup
|
|- Det_USW : User Switch入力検出処理
| |- Det_USW.c
| |- Det_USW.h
|
|- Drivers
|
|- N446RE_Config : 動作パラメータの定義
| |- Dev_Conf.h
|
|- Periph_F4 : 周辺インターフェース処理
| |- H_F4_GPIO.c
| |- H_F4_GPIO.h
|
|- Wait_Itvl : 時間待ち処理
| |- Wait_Itvl.c
| |- Wait_Itvl.h
|
|- N446RE_LED_USW.launch
|- STM32F446RETX_FLASH.ld
|- STM32F446RETX_RAM.ld
N446RE_LED_USW の動作パラメータの定義
サンプルプログラム N446RE_LED_USW の 動作パラメータの定義を
N446RE_Config/Dev_Conf.h に記述しています。
使用する CPU の定義、ヘッダ名の定義、GPIO のポートとピンの定義、
などを記述しています。
ユーザープログラムの実行開始位置
プログラムは、int main(void) から実行開始します。
int main(void) は、フォルダ Core/Src/main.c にあります。
STM32CubeIDEでビルドされたプログラムは、自動的にCPUの初期化を
行った後、int main(void) を呼び出します。
ユーザーコード(記述したプログラム)は、
int main(void) の先頭から実行されます。
N446RE_LED_USW の main() の説明
サンプルプログラム N446RE_LED_USW の main() の記述は、
以下のとおりです。
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
uint8_t uint8_JobNum_LED = 0; // LED点滅処理番号
uint8_t uint8_JobNum_USW = 0; // USW検出処理番号
//-------------------------------------
// LED点滅フラグ
//-------------------------------------
// 0 : 点灯1000mSec / 消灯2000mSec
// 1 : 点灯100mSec / 消灯100mSec
// 2 : 点灯200mSec / 消灯200mSec
// 3 : 点灯300mSec / 消灯300mSec
// 4 : 点灯400mSec / 消灯400mSec
// 5 : 点灯500mSec / 消灯500mSec
//-------------------------------------
int16_t int16_Flag_Blk_LED = 0;
int16_t int16_Return;
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
/* USER CODE BEGIN 2 */
//----------------------------------------------
// User Switch入力ピン初期化
//----------------------------------------------
Init_USW();
//------------------------------------------------
// Status LED(緑) : 点灯1000mSec / 消灯2000mSec
//------------------------------------------------
GLB_uint16_Time_LED_Stat_ON = (uint16_t)1000;
GLB_uint16_Time_LED_Stat_OFF = (uint16_t)2000;
//------------------------------------------------
//------------------------------------------------
// Status LEDのGPIO初期化
//------------------------------------------------
Init_LED_Stat();
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
//------------------------------------------------------
// Status LED点滅
//------------------------------------------------------
// 引数:
// uint8_t *puint8_JobNum : 処理番号を格納する変数のポインタ
// uint16_t uint16_Time_ON : 点灯時間
// uint16_t uint16_Time_OFF : 消灯時間
// 戻り値:
// -1 : 処理中
// 0 : OK終了
// 1 : NG
//------------------------------------------------------
Blk_LED_Stat(&uint8_JobNum_LED,
GLB_uint16_Time_LED_Stat_ON, GLB_uint16_Time_LED_Stat_OFF);
//-----------------------------------------------------------
// User Switch入力検出
//-----------------------------------------------------------
// 引数:
// uint8_t *puint8_JobNum : 処理番号が格納された変数のポインタ
// 戻り値:
// -1 : 検出なし
// 0 : 検出あり
//-----------------------------------------------------------
int16_Return = Det_USW(&uint8_JobNum_USW);
if(int16_Return == 0){
// 検出あり
//---------------------------------------------------------
// LED点滅フラグ更新
//---------------------------------------------------------
// 引数:
// int16_t *pint16_Flag_Blk_LED : LED点滅フラグの変数のポインタ
//---------------------------------------------------------
Renew_Flag_Blk_LED(&int16_Flag_Blk_LED);
}
}
/* USER CODE END 3 */
}
1) 初期化の部分
a) CPUのPeripheral初期化
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
により、CPUのPeripheralなどの基本的な初期化を行います。
PeripheralとはCPUの周辺インターフェースなどのことを言います。
プロジェクト構築時に自動的に組み込まれる、
HAL Drivers(フォルダ Drivers/STM32F4xx_HAL_Drivers) 内に記述されています。
b) CPU動作クロックの設定
/* Configure the system clock */
SystemClock_Config();
CPUの動作クロックとPeripheralの動作クロックを設定します。
SystemClock_Config(); の設定内容は、
int main(void)
{
.
.
.
}
の、すぐ下に記述されています。
c) USERスイッチの初期化
User Switch入力ピン初期化モジュール Init_USW(); を呼び出しています。
//----------------------------------------------
// User Switch入力ピン初期化
//----------------------------------------------
Init_USW();
USERスイッチが接続されているピンを入力に設定しています。
d) LEDの初期化
初期の点滅時間をセットした後、Init_LED_Stat(); を呼び出して
LEDが接続されているピンを出力に設定しています。
//------------------------------------------------
// Status LED(緑) : 点灯1000mSec / 消灯2000mSec
//------------------------------------------------
GLB_uint16_Time_LED_Stat_ON = (uint16_t)1000;
GLB_uint16_Time_LED_Stat_OFF = (uint16_t)2000;
//------------------------------------------------
//------------------------------------------------
// Status LEDのGPIO初期化
//------------------------------------------------
Init_LED_Stat();
2) LED点滅 と User Switch入力検出 処理の部分
永久ループ部分の記述を以下に示します。
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
//------------------------------------------------------
// Status LED点滅
//------------------------------------------------------
// 引数:
// uint8_t *puint8_JobNum : 処理番号を格納する変数のポインタ
// uint16_t uint16_Time_ON : 点灯時間
// uint16_t uint16_Time_OFF : 消灯時間
// 戻り値:
// -1 : 処理中
// 0 : OK終了
// 1 : NG
//------------------------------------------------------
Blk_LED_Stat(&uint8_JobNum_LED,
GLB_uint16_Time_LED_Stat_ON, GLB_uint16_Time_LED_Stat_OFF);
//-----------------------------------------------------------
// User Switch入力検出
//-----------------------------------------------------------
// 引数:
// uint8_t *puint8_JobNum : 処理番号が格納された変数のポインタ
// 戻り値:
// -1 : 検出なし
// 0 : 検出あり
//-----------------------------------------------------------
int16_Return = Det_USW(&uint8_JobNum_USW);
if(int16_Return == 0){
// 検出あり
//---------------------------------------------------------
// LED点滅フラグ更新
//---------------------------------------------------------
// 引数:
// int16_t *pint16_Flag_Blk_LED : LED点滅フラグの変数のポインタ
//---------------------------------------------------------
Renew_Flag_Blk_LED(&int16_Flag_Blk_LED);
}
}
/* USER CODE END 3 */
Status LED点滅処理 Blk_LED_Stat と User Switch入力検出処理 Det_USW を呼び出しています。
Det_USW でスイッチの押下が検出された場合、LED点滅フラグ更新 Renew_Flag_Blk_LED を呼び出して
LED点滅フラグ更新(点滅時間変更)を行います。
各モジュールの説明
1) Blk_LED_Stat
Status LEDを点滅します。
Blk_LED_Stat のフォルダに記述されています。
以下に、Blk_LED_Statのコードを示します。
//------------------------------------------------------
// Status LED点滅 : 処理番号使用
//------------------------------------------------------
// 引数:
// uint8_t *puint8_JobNum : 処理番号を格納する変数のポインタ
// uint16_t uint16_Time_ON : 点灯時間
// uint16_t uint16_Time_OFF : 消灯時間
// 戻り値:
// -1 : 処理中
// 0 : OK終了
// 1 : NG
//------------------------------------------------------
int16_t Blk_LED_Stat(uint8_t *puint8_JobNum, uint16_t uint16_Time_ON, uint16_t uint16_Time_OFF)
{
static uint8_t STC_uint8_JobNum_Wait; // 時間待ちの処理番号
static uint32_t STC_uint32_tikstart; // 時間待ち開始時のカウント数
static uint32_t STC_uint32_Interval; // 待ち時間
int16_t int16_Return;
// Status LED再起動フラグチェック
if(GLB_int16_Restart_LED_Stat == 1){
// Status LED再起動フラグONの場合
*puint8_JobNum = 0; // 処理番号を 0 にする。
GLB_int16_Restart_LED_Stat = 0; // Status LED再起動フラグOFF
}
switch(*puint8_JobNum)
{
case 0:
//------------------------------------------------
// Status LED点灯
//------------------------------------------------
Status_LED_ON();
STC_uint8_JobNum_Wait = 0; // 時間待ちの処理番号初期化
STC_uint32_Interval = (uint32_t)uint16_Time_ON; // 待ち時間
(*puint8_JobNum)++; // 処理番号をインクリメント : 次の処理番号に移行する。 : case 1:
int16_Return = -1; // 処理中
break;
case 1:
//------------------------------------------------------
// mSec待ちシーケンス : 処理番号使用 : 複数呼び出し用
//------------------------------------------------------
// 戻り値が -1 以外になるまで、繰り返し呼び出してください。
//------------------------------------------------------
// 引数 :
// uint8_t *puint8_JobNum : 処理番号が格納される変数のポインタ
// uint32_t *puint32_tikstart : 時間待ち開始時のカウント数
// uint32_t uint32_mSec : 待ち時間(mSec)
// 戻り値 :
// -1 : 処理中 : 時間が経過していない。
// 0 : OK終了 : 時間が経過した。
// 1 : NG終了
//------------------------------------------------------
int16_Return = Wait_mSec_Seq_Multi(&STC_uint8_JobNum_Wait,
&STC_uint32_tikstart,
STC_uint32_Interval);
if(int16_Return == -1){
// 処理中 : 時間未経過
break; // 処理番号維持 : 処理継続 : case 1: をループ
}
(*puint8_JobNum)++; // 処理番号をインクリメント : 次の処理番号に移行する。 : case 2:
int16_Return = -1; // 処理中
break;
case 2:
//------------------------------------------------
// Status LED消灯
//------------------------------------------------
Status_LED_OFF();
STC_uint8_JobNum_Wait = 0; // 時間待ちの処理番号初期化
STC_uint32_Interval = (uint32_t)uint16_Time_OFF; // 待ち時間
(*puint8_JobNum)++; // 処理番号をインクリメント : 次の処理番号に移行する。 : case 3:
int16_Return = -1; // 処理中
break;
case 3:
//------------------------------------------------------
// mSec待ちシーケンス : 処理番号使用 : 複数呼び出し用
//------------------------------------------------------
// 戻り値が -1 以外になるまで、繰り返し呼び出してください。
//------------------------------------------------------
// 引数 :
// uint8_t *puint8_JobNum : 処理番号が格納される変数のポインタ
// uint32_t *puint32_tikstart : 時間待ち開始時のカウント数
// uint32_t uint32_mSec : 待ち時間(mSec)
// 戻り値 :
// -1 : 処理中 : 時間が経過していない。
// 0 : OK終了 : 時間が経過した。
// 1 : NG終了
//------------------------------------------------------
int16_Return = Wait_mSec_Seq_Multi(&STC_uint8_JobNum_Wait,
&STC_uint32_tikstart,
STC_uint32_Interval);
if(int16_Return == -1){
// 処理中 : 時間未経過
break; // 処理番号維持 : 処理継続 : case 3: をループ
}
*puint8_JobNum = 0; // 処理番号を 0 にして、case 0: に戻る。
int16_Return = 0; // OK終了 : 点滅動作が1回終了
break;
default:
*puint8_JobNum = 0; // 処理番号初期化
int16_Return = 1; // NG終了
break;
}
return(int16_Return);
}
a) case 0: ではLEDを点灯します。
b) case 1:のところでは、時間待ちをしています。
時間が経過していない場合、
*puint8_JobNumが 1 のまま抜けるので、次にモジュールが呼び出されると
switch case文で再び case 1: が実行されます。
時間が経過したとき、*puint8_JobNumがインクリメントされ、
次の処理 case 2: に進みます。
c) case 2: ではLEDを消灯し、case 3: に進みます。
d) case 3: では時間待ちをします。
時間が経過したら、処理番号を 0 にして、case 0:に戻ります。
2) Det_USW
User Switch の押下を検出します。
Det_USW のフォルダに記述されています。
以下に、Det_USWのコードを示します。
//-----------------------------------------------------------
// User Switch入力検出
//-----------------------------------------------------------
// 引数:
// uint8_t *puint8_JobNum : 処理番号が格納された変数のポインタ
// 戻り値:
// -1 : 検出なし
// 0 : 検出あり
//-----------------------------------------------------------
int16_t Det_USW(uint8_t *puint8_JobNum)
{
static uint8_t STC_uint8_JobNum_Wait; // 時間待ちの処理番号
static uint32_t STC_uint32_tikstart; // 時間待ち開始時のカウント数
static uint32_t STC_uint32_Interval; // 待ち時間
GPIO_PinState gpio_PinState;
int16_t int16_Return;
switch(*puint8_JobNum)
{
case 0:
// USER Switchの状態を入力
gpio_PinState = HAL_GPIO_ReadPin(def_GPIOx_USW, def_GPIO_PIN_x_USW);
if(gpio_PinState == GPIO_PIN_SET){
// Userスイッチは押されていない。
int16_Return = -1; // 処理継続
break; // 処理番号維持 : case 0: をループ
}
STC_uint8_JobNum_Wait = 0; // 時間待ちの処理番号初期化
STC_uint32_Interval = (uint32_t)def_Time_Cancel_Chatt; // 待ち時間
(*puint8_JobNum)++; // 処理番号をインクリメント : 次の処理番号に移行する。 : case 1:
int16_Return = -1; // 処理継続
break;
case 1: // チャタリング検出 1回目
//------------------------------------------------------
// mSec待ちシーケンス : 処理番号使用 : 複数呼び出し用
//------------------------------------------------------
// 戻り値が -1 以外になるまで、繰り返し呼び出してください。
//------------------------------------------------------
// 引数 :
// uint8_t *puint8_JobNum : 処理番号が格納される変数のポインタ
// uint32_t *puint32_tikstart : 時間待ち開始時のカウント数
// uint32_t uint32_mSec : 待ち時間(mSec)
// 戻り値 :
// -1 : 処理中 : 時間が経過していない。
// 0 : OK終了 : 時間が経過した。
// 1 : NG終了
//------------------------------------------------------
int16_Return = Wait_mSec_Seq_Multi(&STC_uint8_JobNum_Wait,
&STC_uint32_tikstart,
STC_uint32_Interval);
if(int16_Return == -1){
// 処理中 : 時間が経過していない。
break; // 処理番号維持 : 処理継続 : case 1: をループ
}
// USER Switchの状態を入力
gpio_PinState = HAL_GPIO_ReadPin(def_GPIOx_USW, def_GPIO_PIN_x_USW);
if(gpio_PinState == GPIO_PIN_SET){
// Userスイッチは押されていない。
*puint8_JobNum = 0; // 処理番号初期化 : 先頭に戻る。 : case 0:
int16_Return = -1; // 処理継続
break;
}
STC_uint8_JobNum_Wait = 0; // 時間待ちの処理番号初期化
STC_uint32_Interval = (uint32_t)def_Time_Cancel_Chatt; // 待ち時間
(*puint8_JobNum)++; // 処理番号をインクリメント : 次の処理番号に移行する。 : case 2:
int16_Return = -1; // 処理継続
break;
case 2: // チャタリング検出 2回目
//------------------------------------------------------
// mSec待ちシーケンス : 処理番号使用 : 複数呼び出し用
//------------------------------------------------------
// 戻り値が -1 以外になるまで、繰り返し呼び出してください。
//------------------------------------------------------
// 引数 :
// uint8_t *puint8_JobNum : 処理番号が格納される変数のポインタ
// uint32_t *puint32_tikstart : 時間待ち開始時のカウント数
// uint32_t uint32_mSec : 待ち時間(mSec)
// 戻り値 :
// -1 : 処理中 : 時間が経過していない。
// 0 : OK終了 : 時間が経過した。
// 1 : NG終了
//------------------------------------------------------
int16_Return = Wait_mSec_Seq_Multi(&STC_uint8_JobNum_Wait,
&STC_uint32_tikstart,
STC_uint32_Interval);
if(int16_Return == -1){
// 処理中 : 時間が経過していない。
break; // 処理番号維持 : 処理継続 : case 2: をループ
}
// USER Switchの状態を入力
gpio_PinState = HAL_GPIO_ReadPin(def_GPIOx_USW, def_GPIO_PIN_x_USW);
if(gpio_PinState == GPIO_PIN_SET){
// Userスイッチは押されていない。
*puint8_JobNum = 0; // 処理番号初期化 : 先頭に戻る。 : case 0:
int16_Return = -1; // 処理継続
break;
}
STC_uint8_JobNum_Wait = 0; // 時間待ちの処理番号初期化
STC_uint32_Interval = (uint32_t)def_Time_Cancel_Chatt; // 待ち時間
(*puint8_JobNum)++; // 処理番号をインクリメント : 次の処理番号に移行する。 : case 3:
int16_Return = -1; // 処理継続
break;
case 3: // チャタリング検出 3回目
//------------------------------------------------------
// mSec待ちシーケンス : 処理番号使用 : 複数呼び出し用
//------------------------------------------------------
// 戻り値が -1 以外になるまで、繰り返し呼び出してください。
//------------------------------------------------------
// 引数 :
// uint8_t *puint8_JobNum : 処理番号が格納される変数のポインタ
// uint32_t *puint32_tikstart : 時間待ち開始時のカウント数
// uint32_t *puint32_tikstart : 時間待ち開始時のカウント数
// uint32_t uint32_mSec : 待ち時間(mSec)
// 戻り値 :
// -1 : 処理中 : 時間が経過していない。
// 0 : OK終了 : 時間が経過した。
// 1 : NG終了
//------------------------------------------------------
int16_Return = Wait_mSec_Seq_Multi(&STC_uint8_JobNum_Wait,
&STC_uint32_tikstart,
STC_uint32_Interval);
if(int16_Return == -1){
// 処理中 : 時間が経過していない。
break; // 処理番号維持 : 処理継続 : case 3: をループ
}
// USER Switchの状態を入力
gpio_PinState = HAL_GPIO_ReadPin(def_GPIOx_USW, def_GPIO_PIN_x_USW);
if(gpio_PinState == GPIO_PIN_SET){
// Userスイッチは押されていない。
*puint8_JobNum = 0; // 処理番号初期化 : 先頭に戻る。: case 0:
int16_Return = -1; // 処理継続
break;
}
(*puint8_JobNum)++; // 処理番号をインクリメント : 次の処理番号に移行する。 : case 4:
int16_Return = -1; // 処理継続
break;
case 4:
//--------------------------------------------------------------------
// UserスイッチがOFFになるのを待つ。
//--------------------------------------------------------------------
// USER Switchの状態を入力
gpio_PinState = HAL_GPIO_ReadPin(def_GPIOx_USW, def_GPIO_PIN_x_USW);
if(gpio_PinState == GPIO_PIN_RESET){
// Userスイッチは押されている。
int16_Return = -1;
break; // 処理番号維持 : 処理継続 : case 4: をループ
}
STC_uint8_JobNum_Wait = 0; // 時間待ちの処理番号初期化
STC_uint32_Interval = (uint32_t)def_Time_Release_SW; // 待ち時間
(*puint8_JobNum)++; // 処理番号をインクリメント : 次の処理番号に移行する。 : case 5:
int16_Return = -1; // 処理継続
break;
case 5:
//--------------------------------------------------------------------
// UserスイッチがOFFになった後、少し待つ。
//--------------------------------------------------------------------
//------------------------------------------------------
// mSec待ちシーケンス : 処理番号使用 : 複数呼び出し用
//------------------------------------------------------
// 戻り値が -1 以外になるまで、繰り返し呼び出してください。
//------------------------------------------------------
// 引数 :
// uint8_t *puint8_JobNum : 処理番号が格納される変数のポインタ
// uint32_t *puint32_tikstart : 時間待ち開始時のカウント数
// uint32_t uint32_mSec : 待ち時間(mSec)
// 戻り値 :
// -1 : 処理中 : 時間が経過していない。
// 0 : OK終了 : 時間が経過した。
// 1 : NG終了
//------------------------------------------------------
int16_Return = Wait_mSec_Seq_Multi(&STC_uint8_JobNum_Wait,
&STC_uint32_tikstart,
STC_uint32_Interval);
if(int16_Return == -1){
// 処理中 : 時間が経過していない。
break; // 処理番号維持 : 処理継続 : case 5: をループ
}
*puint8_JobNum = 0; // 処理番号初期化 : 先頭の処理番号に戻す。 : case 0:
int16_Return = 0; // User Switch入力検出ありをセット
break;
default:
*puint8_JobNum = 0; // 処理番号初期化
int16_Return = -1; // 処理継続
break;
}
return(int16_Return); // 処理状態(結果)を返す。
}
Userスイッチが押下されるのを待ちます。
Userスイッチが押下されたら、チャタリング防止処理を行って、
チャタリングではないと判断した場合、User Switch入力検出ありをセットします。
3) Renew_Flag_Blk_LED
LED点滅フラグを更新します。これによりLEDの点滅間隔が変化します。
User Switch入力が検出されたときに呼び出します。
Core/Src/main.c の void SystemClock_Config(void) の下に記述されています。
以下に、Renew_Flag_Blk_LEDのコードを示します。
//---------------------------------------------------------
// LED点滅フラグ更新
//---------------------------------------------------------
// 引数:
// int16_t *pint16_Flag_Blk_LED : LED点滅フラグの変数のポインタ
//---------------------------------------------------------
void Renew_Flag_Blk_LED(int16_t *pint16_Flag_Blk_LED)
{
//-------------------------------------
// LED点滅フラグ
//-------------------------------------
// 0 : 点灯1000mSec / 消灯2000mSec
// 1 : 点灯100mSec / 消灯100mSec
// 2 : 点灯200mSec / 消灯200mSec
// 3 : 点灯300mSec / 消灯300mSec
// 4 : 点灯400mSec / 消灯400mSec
// 5 : 点灯500mSec / 消灯500mSec
//-------------------------------------
(*pint16_Flag_Blk_LED)++; // LED点滅フラグ + 1
if(*pint16_Flag_Blk_LED > 5){
// 5 を超えたら 0 にする。 : 0 ~ 5 の値を繰り返す。
*pint16_Flag_Blk_LED = 0;
}
//-----------------------------------------------------
// LED点滅フラグ : int16_Flag_Blink の値により点滅間隔を設定する。
//-----------------------------------------------------
switch(*pint16_Flag_Blk_LED)
{
case 0:
//------------------------------------------------
// LED(緑) : 点灯1000mSec / 消灯2000mSec
//------------------------------------------------
GLB_uint16_Time_LED_Stat_ON = (uint16_t)1000;
GLB_uint16_Time_LED_Stat_OFF = (uint16_t)2000;
//------------------------------------------------
break;
case 1:
//------------------------------------------------
// LED(緑) : 点灯100mSec / 消灯100mSec
//------------------------------------------------
GLB_uint16_Time_LED_Stat_ON = (uint16_t)100;
GLB_uint16_Time_LED_Stat_OFF = (uint16_t)100;
//------------------------------------------------
break;
case 2:
//------------------------------------------------
// LED(緑) : 点灯200mSec / 消灯200mSec
//------------------------------------------------
GLB_uint16_Time_LED_Stat_ON = (uint16_t)200;
GLB_uint16_Time_LED_Stat_OFF = (uint16_t)200;
//------------------------------------------------
break;
case 3:
//------------------------------------------------
// LED(緑) : 点灯300mSec / 消灯300mSec
//------------------------------------------------
GLB_uint16_Time_LED_Stat_ON = (uint16_t)300;
GLB_uint16_Time_LED_Stat_OFF = (uint16_t)300;
//------------------------------------------------
break;
case 4:
//------------------------------------------------
// LED(緑) : 点灯400mSec / 消灯400mSec
//------------------------------------------------
GLB_uint16_Time_LED_Stat_ON = (uint16_t)400;
GLB_uint16_Time_LED_Stat_OFF = (uint16_t)400;
//------------------------------------------------
break;
case 5:
//------------------------------------------------
// LED(緑) : 点灯500mSec / 消灯500mSec
//------------------------------------------------
GLB_uint16_Time_LED_Stat_ON = (uint16_t)500;
GLB_uint16_Time_LED_Stat_OFF = (uint16_t)500;
//------------------------------------------------
break;
default:
//------------------------------------------------
// LED(緑) : 点灯1000mSec / 消灯2000mSec
//------------------------------------------------
GLB_uint16_Time_LED_Stat_ON = (uint16_t)1000;
GLB_uint16_Time_LED_Stat_OFF = (uint16_t)2000;
//------------------------------------------------
break;
}
GLB_int16_Restart_LED_Stat = 1; // LED再起動フラグON
}
a) LED点滅フラグの更新
//-------------------------------------
// LED点滅フラグ
//-------------------------------------
// 0 : 点灯1000mSec / 消灯2000mSec
// 1 : 点灯100mSec / 消灯100mSec
// 2 : 点灯200mSec / 消灯200mSec
// 3 : 点灯300mSec / 消灯300mSec
// 4 : 点灯400mSec / 消灯400mSec
// 5 : 点灯500mSec / 消灯500mSec
//-------------------------------------
(*pint16_Flag_Blk_LED)++; // LED点滅フラグ + 1
if(*pint16_Flag_Blk_LED > 5){
// 5 を超えたら 0 にする。 : 0 ~ 5 の値を繰り返す。
*pint16_Flag_Blk_LED = 0;
}
LED点滅フラグをインクリメントして、5 を超えたら、0 に戻します。
LED点滅フラグを 0 - 5 の範囲で変化させます。
b) LED点滅間隔の更新
//-----------------------------------------------------
// LED点滅フラグ : int16_Flag_Blink の値により点滅間隔を設定する。
//-----------------------------------------------------
switch(*pint16_Flag_Blk_LED)
{
case 0:
//------------------------------------------------
// LED(緑) : 点灯1000mSec / 消灯2000mSec
//------------------------------------------------
GLB_uint16_Time_LED_Stat_ON = (uint16_t)1000;
GLB_uint16_Time_LED_Stat_OFF = (uint16_t)2000;
//------------------------------------------------
break;
case 1:
//------------------------------------------------
// LED(緑) : 点灯100mSec / 消灯100mSec
//------------------------------------------------
GLB_uint16_Time_LED_Stat_ON = (uint16_t)100;
GLB_uint16_Time_LED_Stat_OFF = (uint16_t)100;
//------------------------------------------------
break;
case 2:
//------------------------------------------------
// LED(緑) : 点灯200mSec / 消灯200mSec
//------------------------------------------------
GLB_uint16_Time_LED_Stat_ON = (uint16_t)200;
GLB_uint16_Time_LED_Stat_OFF = (uint16_t)200;
//------------------------------------------------
break;
case 3:
//------------------------------------------------
// LED(緑) : 点灯300mSec / 消灯300mSec
//------------------------------------------------
GLB_uint16_Time_LED_Stat_ON = (uint16_t)300;
GLB_uint16_Time_LED_Stat_OFF = (uint16_t)300;
//------------------------------------------------
break;
case 4:
//------------------------------------------------
// LED(緑) : 点灯400mSec / 消灯400mSec
//------------------------------------------------
GLB_uint16_Time_LED_Stat_ON = (uint16_t)400;
GLB_uint16_Time_LED_Stat_OFF = (uint16_t)400;
//------------------------------------------------
break;
case 5:
//------------------------------------------------
// LED(緑) : 点灯500mSec / 消灯500mSec
//------------------------------------------------
GLB_uint16_Time_LED_Stat_ON = (uint16_t)500;
GLB_uint16_Time_LED_Stat_OFF = (uint16_t)500;
//------------------------------------------------
break;
default:
//------------------------------------------------
// LED(緑) : 点灯1000mSec / 消灯2000mSec
//------------------------------------------------
GLB_uint16_Time_LED_Stat_ON = (uint16_t)1000;
GLB_uint16_Time_LED_Stat_OFF = (uint16_t)2000;
//------------------------------------------------
break;
}
LED点滅フラグの値に従って、点滅間隔を設定します。
c) LED再起動フラグON
GLB_int16_Restart_LED_Stat = 1; // LED再起動フラグON
ただちに、設定された点滅間隔で動作を開始します。
A+-2C (ええ加減にC) のページに戻る
メールアドレス: apm2c.sumi@gmail.com
なんでも、気軽に ご相談ください。
担当:おの
えがおのでんし 案内