*割込みは長いので必要部分のみ切り出し。
その他の所は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 */