Cómo contar hasta un número con un temporizador periférico

0

Estoy tratando de usar el periférico TIM para contar pulsos externos hasta un número y lanzar una interrupción. Estoy usando STM32F429 y la biblioteca HAL. Estoy inicializando el TIM2 con este código:

void InitializeTimer2()
{

    TIM_SlaveConfigTypeDef sSlaveConfig;
    TIM_MasterConfigTypeDef sMasterConfig;


    htim2.Instance = TIM2;
    htim2.Init.Prescaler = 0;
    htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim2.Init.Period = 5;
    htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    if(HAL_TIM_Base_Init(&htim2) != HAL_OK)
    {
        /* Initialization Error */
        Error_Mensage("TIM2");
    }


    sSlaveConfig.SlaveMode = TIM_SLAVEMODE_EXTERNAL1;
    sSlaveConfig.InputTrigger = TIM_TS_TI1FP1;
    sSlaveConfig.TriggerPolarity = TIM_TRIGGERPOLARITY_RISING;
    sSlaveConfig.TriggerFilter = 15;
    HAL_TIM_SlaveConfigSynchronization(&htim2, &sSlaveConfig);

    sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
    sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
    HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig);

    HAL_TIM_Base_Start_IT(&htim2);
}

Pero probé muchas funciones HAL_TIM para obtener la interrupción pero sin éxito.

Será un placer proporcionar cualquier otro código útil ...

    
pregunta Leandro Lima

1 respuesta

2

la respuesta es usar la función HAL_TIM_PeriodElapsedCallback :

/* TIM5 init function */
void MX_TIM5_Init(void)
{

    TIM_SlaveConfigTypeDef sSlaveConfig;
    TIM_MasterConfigTypeDef sMasterConfig;

    htim5.Instance = TIM5;
    htim5.Init.Prescaler = 0;
    htim5.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim5.Init.Period = 10;
    htim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    HAL_TIM_Base_Init(&htim5);

    sSlaveConfig.SlaveMode = TIM_SLAVEMODE_EXTERNAL1;
    sSlaveConfig.InputTrigger = TIM_TS_TI1FP1;
    sSlaveConfig.TriggerPolarity = TIM_TRIGGERPOLARITY_RISING;
    sSlaveConfig.TriggerFilter = 15;
    HAL_TIM_SlaveConfigSynchronization(&htim5, &sSlaveConfig);

    sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
    sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
    HAL_TIMEx_MasterConfigSynchronization(&htim5, &sMasterConfig);
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == TIM5)
    {
        count2++;
    }
}

Inicialicé el temporizador con esto: HAL_TIM_Base_Start_IT(&htim5) .

Este código permite contar pulsos externos y lanzar una interrupción cada 10 pulsos.

¡Saludos!

    
respondido por el Leandro Lima

Lea otras preguntas en las etiquetas