STM32L073RZ congelar debido a un InterruptIn

0

Tengo un problema, uso un InterruptIn en una clase para generar una interrupción cuando se presiona un botón. En esta clase solo tengo constructor, destructor y devolución de llamada para el ascenso y la caída. Cuando uso esta clase en mi main, si hago algo como printf o llamo a algunas funciones mi congelación Nucleo. No hay nada escrito en mi terminal y no puedo hacer nada. Pero si solo comento una línea el script funciona bien. No tengo ni idea de cuál es el problema.

¿Alguien puede ayudarme para esto?

Mi clase se parece a esto

//*********************************************************************************//
//                                                                                 //
//                                    GLOBAL VARIABLES                             //
//                                                                                 //
//*********************************************************************************//
int nbRise;
int nbFall;

//*********************************************************************************//
//                                                                                 //
//                                  UART        Debug                              //
//                                                                                 //
//*********************************************************************************//
#ifdef DEBUG
Serial pcTOR(USBTX, USBRX);  // TX ( D8 ), RX ( D2 )
#endif


//*********************************************************************************//
//                                                                                 //
//                                        FLAG                                     //
//                                                                                 //
//*********************************************************************************//
bool FlagBTN = false;


//*********************************************************************************//
//                                                                                 //
//                                  PUBLIC FONCTIONS                               //
//                                                                                 //
//*********************************************************************************//

/***************************************************************************//**
 * @fn Snef_TOR(PinName Pin): _interruptin(Pin)
 * @brief Constructor of the TOR object
 * @param PIN ex: PA_1
 * @return void
 * @author Simon NOWAK
 *
 ******************************************************************************/
Snef_TOR::Snef_TOR(PinName Pin): _interruptin(Pin){
    //Evite la section critique (Taches parallèles)
    _interruptin.disable_irq();
#ifdef DEBUG
    pcTOR.printf("TOR: Initialisation\r\n");
    wait(0.1);
#endif
    _interruptin.mode(PullUp);
    nbRise = 0;
    nbFall = 0;
    _interruptin.rise(this, &Snef_TOR::Snef_TOR_IncrementRise);
    //Desactivation de ce qui evite la section critique (Taches parallèles)
    _interruptin.enable_irq();
}

/***************************************************************************//**
 * @fn Snef_TOR(PinName Pin): _interruptin(Pin)
 * @brief Constructor of the TOR object
 * @param PIN ex: PA_1
 * @param Front ex: Snef_ENUM_RISE
 * @return void
 * @author Simon NOWAK
 *
 ******************************************************************************/
Snef_TOR::Snef_TOR(PinName Pin, uint32_t Front): _interruptin(Pin){
    //Evite la section critique (Taches parallèles)
#ifdef DEBUG
    pcTOR.printf("TOR: Initialisation\r\n");
    wait(0.1);
#endif
    _interruptin.mode(PullUp);
    nbRise = 0;
    nbFall = 0;
    if((Front&Snef_ENUM_RISE) == Snef_ENUM_RISE){
        _interruptin.rise(this, &Snef_TOR::Snef_TOR_IncrementRise);
    }
    else if((Front&Snef_ENUM_FALL) == Snef_ENUM_FALL){
        _interruptin.fall(this, &Snef_TOR::Snef_TOR_IncrementFall);
    }
    //Desactivation de ce qui evite la section critique (Taches parallèles)
}


/***************************************************************************//**
 * @fn Snef_TOR_IncrementRise(void)
 * @brief Increment the rise value
 * @param void
 * @return void
 * @author Simon NOWAK
 *
 ******************************************************************************/
void Snef_TOR::Snef_TOR_IncrementRise(void){
    nbRise++;
    //Change the flag to true. This allow to know if the wakeUp come from RTC or this sensor
    FlagBTN = true;
}


/***************************************************************************//**
 * @fn Snef_TOR_IncrementFall(void)
 * @brief Increment the fall value
 * @param void
 * @return void
 * @author Simon NOWAK
 *
 ******************************************************************************/
void Snef_TOR::Snef_TOR_IncrementFall(void){
    nbFall++;
    //Change the flag to true. This allow to know if the wakeUp come from RTC or this sensor
    FlagBTN = true;
}


/***************************************************************************//**
 * @fn Snef_TOR_GetRise(void)
 * @brief Return the rise value
 * @param void
 * @return int
 * @author Simon NOWAK
 *
 ******************************************************************************/
int Snef_TOR::Snef_TOR_GetRise(void){
    return nbRise;
}


/***************************************************************************//**
 * @fn Snef_TOR_GetFall(void)
 * @brief Return the fall value
 * @param void
 * @return int
 * @author Simon NOWAK
 *
 ******************************************************************************/
int Snef_TOR::Snef_TOR_GetFall(void){
    return nbFall;
}


/***************************************************************************//**
 * @fn Snef_TOR_ClearFlagBtn(void)
 * @brief Clear the flag associate with the ZCMD21 button
 * @param void
 * @return void
 * @author Simon NOWAK
 *
 ******************************************************************************/
void Snef_TOR::Snef_TOR_ClearFlagBtn(void){
    FlagBTN = false;
}


/***************************************************************************//**
 * @fn Snef_TOR_GetFlagBtn(void)
 * @brief Allow to get the Flag associate with the ZCMD21 button
 * @param void
 * @return bool
 * @author Simon NOWAK
 *
 ******************************************************************************/
bool Snef_TOR::Snef_TOR_GetFlagBtn(void){
    return FlagBTN;
}

Muchas gracias por tu tiempo.

    
pregunta Simon NOWAK

0 respuestas

Lea otras preguntas en las etiquetas