*割込みは長いので必要部分のみ切り出し。

その他の所はMXの出力のまま。

/* USER CODE BEGIN Header */

/**

******************************************************************************

* @file stm32f3xx_it.c

* @brief Interrupt Service Routines.

******************************************************************************

*

*

******************************************************************************

*/

/* USER CODE END Header */


/* Includes ------------------------------------------------------------------*/

#include "main.h"

#include "stm32f3xx_it.h"

/* Private includes ----------------------------------------------------------*/


/* Private user code ---------------------------------------------------------*/

/* USER CODE BEGIN 0 */

extern uint8_t flag_ignition;

extern uint32_t tim2_value;

extern uint8_t flag_run; //連続回転

extern uint8_t flag_stat;

extern uint8_t flag_ADC_chek;

extern uint8_t ADC_value[3];

extern uint8_t COMP2_flag; //COMP2 = 1 割込み停止

extern uint8_t COMP4_flag; //COMP4 = 1 割込み停止

//extern uint8_t flag_lowrpm;

/* USER CODE END 0 */


/* External variables --------------------------------------------------------*/

extern COMP_HandleTypeDef hcomp2;

extern COMP_HandleTypeDef hcomp4;

extern DAC_HandleTypeDef hdac1;

extern DAC_HandleTypeDef hdac2;

/* USER CODE BEGIN EV */


/* USER CODE END EV */


/**

* @brief This function handles TIM2 global interrupt.

* TIM2回転数検出

*/

void TIM2_IRQHandler(void)

{

/* USER CODE BEGIN TIM2_IRQn 0 */


if(LL_TIM_IsActiveFlag_CC1(TIM2) == 1){

LL_TIM_ClearFlag_CC1(TIM2);

HAL_COMP_Start_IT(&hcomp4);

}

if(LL_TIM_IsActiveFlag_UPDATE(TIM2) == 1){ //TIM2UP 回転停止

LL_TIM_ClearFlag_UPDATE(TIM2);

//フラグ初期

flag_run = 0;

flag_ignition = 0;

flag_stat = 0;


}

/* USER CODE END TIM2_IRQn 0 */

/* USER CODE BEGIN TIM2_IRQn 1 */


/* USER CODE END TIM2_IRQn 1 */

}


/**

* @brief This function handles TIM3 global interrupt.

* TIM3 SCRトリガーパルス

*/

void TIM3_IRQHandler(void)

{

/* USER CODE BEGIN TIM3_IRQn 0 */

if(LL_TIM_IsActiveFlag_CC1(TIM3) == 1)

{

/* Clear the update interrupt flag*/

LL_TIM_ClearFlag_CC1(TIM3);

LL_GPIO_SetOutputPin(GPIOB, LL_GPIO_PIN_4); //IG ON

LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_2); //P_OUT


}

if(LL_TIM_IsActiveFlag_UPDATE(TIM3) == 1)

{

/* Clear the update interrupt flag*/

LL_TIM_ClearFlag_UPDATE(TIM3);

LL_GPIO_ResetOutputPin(GPIOB, LL_GPIO_PIN_4); //IG ON

LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_2); //P_OUT

}

/* USER CODE END TIM3_IRQn 0 */

/* USER CODE BEGIN TIM3_IRQn 1 */


/* USER CODE END TIM3_IRQn 1 */

}


/**

* @brief This function handles TIM6 global and DAC1 underrun error interrupts.

* TIM6 COMP2割込み停止時間

*/

void TIM6_DAC1_IRQHandler(void)

{

/* USER CODE BEGIN TIM6_DAC1_IRQn 0 */

if(LL_TIM_IsActiveFlag_UPDATE(TIM6) == 1){

LL_TIM_ClearFlag_UPDATE(TIM6);

COMP2_flag = 0;

}

/* USER CODE END TIM6_DAC1_IRQn 0 */

HAL_DAC_IRQHandler(&hdac1);

/* USER CODE BEGIN TIM6_DAC1_IRQn 1 */



/* USER CODE END TIM6_DAC1_IRQn 1 */

}


/**

* @brief This function handles TIM7 global and DAC2 underrun error interrupts.

* TIM7 COMP4割込み停止時間

*/

void TIM7_DAC2_IRQHandler(void)

{

/* USER CODE BEGIN TIM7_DAC2_IRQn 0 */


/* USER CODE END TIM7_DAC2_IRQn 0 */

HAL_DAC_IRQHandler(&hdac2);

/* USER CODE BEGIN TIM7_DAC2_IRQn 1 */

if(LL_TIM_IsActiveFlag_UPDATE(TIM7) == 1){

LL_TIM_ClearFlag_UPDATE(TIM7);

COMP4_flag = 0;

}

/* USER CODE END TIM7_DAC2_IRQn 1 */

}


/**

* @brief This function handles COMP2 global interrupt through EXTI line 22.

* COMP2 低速ピックアップパルス入力コンパレーター

*/

void COMP2_IRQHandler(void)

{

/* USER CODE BEGIN COMP2_IRQn 0 */


/* USER CODE END COMP2_IRQn 0 */

HAL_COMP_IRQHandler(&hcomp2);

/* USER CODE BEGIN COMP2_IRQn 1 */

if(COMP2_flag == 0){

COMP2_flag = 1;

if(flag_run != 1){ //エンジンスタート時点火処理

LL_TIM_EnableCounter(TIM3); //点火パルス

flag_stat++;

if(flag_stat == 10){

flag_run = 1;

flag_stat = 0;

}

}

/* 低速時処理取りやめ 21/5/16*/

/* else{ //アイドリング中12.5点火

if( flag_lowrpm == 1){

flag_lowrpm = 0;

LL_TIM_EnableCounter(TIM3); //点火パルス

}

}

*/

}


LL_TIM_EnableCounter(TIM6); //TIM6 COMP2キャンセル時間

LL_TIM_EnableCounter(TIM7); //TIM7 COMP4キャンセル時間

flag_ADC_chek = 1; //ADC

ADC_value[1] =0;

}

/* USER CODE END COMP2_IRQn 1 */




/**

* @brief This function handles COMP4 and COMP6 interrupts through EXTI lines 30 and 32.

* COMP4 高速ピックアップパルス入力コンパレーター

*/

void COMP4_6_IRQHandler(void)

{

/* USER CODE BEGIN COMP4_6_IRQn 0 */


/* USER CODE END COMP4_6_IRQn 0 */

HAL_COMP_IRQHandler(&hcomp4);

/* USER CODE BEGIN COMP4_6_IRQn 1 */

if(COMP4_flag == 0){

LL_TIM_DisableCounter(TIM2); //TIM2停止

tim2_value = LL_TIM_GetCounter(TIM2); //TIM2

LL_TIM_SetCounter(TIM2, 0);//TIM2=0

LL_TIM_EnableCounter(TIM2); //TIM2

COMP4_flag = 1;

flag_ADC_chek = 0; //ADC停止

if(flag_run == 1){

if(tim2_value > 295383){ // 6500rpm以上即時点火

flag_ignition = 1; //計算後点火フラッグ

}

else

{

LL_TIM_EnableCounter(TIM3); //点火パルス 即時点火


}


}


}

/* USER CODE END COMP4_6_IRQn 1 */

}


/* USER CODE BEGIN 1 */


/* USER CODE END 1 */