configuración del temporizador en STM32F4

0

Estoy intentando configurar el timer3 para que tenga una frecuencia de 1KHz, sin éxito.

Aquí están mis configuraciones:

Reloj del sistema:

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 4;
RCC_OscInitStruct.PLL.PLLN = 64;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 7;

Entonces SYSCLK = 64MHz

Timer3:

htim3.Instance = TIM3;
htim3.Init.Prescaler = 480;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 66;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
{
    Error_Handler();
}

sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)
{
    Error_Handler();
}

sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
{
    Error_Handler();
}

if(HAL_TIM_Base_Start_IT(&htim3) != HAL_OK)
{
    /* Starting Error */
    Error_Handler();
}

Entonces, el reloj temporizador APB1 = 32MHz.

Por lo tanto, la frecuencia de reloj del Timer3 debería ser (1 / (32MHz / 480)) * 66, que es de aproximadamente 1Khz, pero por alguna razón estoy obteniendo 500Hz.

Cualquier ayuda será muy apreciada.

EDITAR:

Mi función de interrupción:

/*check if interrupt is from TIMER 3*/
    if (htim->Instance!=TIM3)
        return;

    timer_counter++;

    if (timer_counter == 65500)
        timer_counter=0;

    if(timer_counter%1000==0)
    {
        uint16_t test[4];

        Send_CAN(&CanHandle2, 8, test);
    }

Recibo el mensaje CAN cada 2 segundos en lugar de cada segundo.

    
pregunta tsuo euoy

2 respuestas

1

No veo que estés borrando la marca de interrupción. Quizás lo estés haciendo en otro lugar en tu ISR?

Si no, el ISR volverá a aparecer tan pronto como finalice.

    
respondido por el bitsmack
0
  

Estoy intentando configurar el timer3 para que tenga una frecuencia de 1KHz, sin éxito.

paso a través de su código, y asegúrese de que el reloj esté configurado correctamente y el temporizador esté configurado correctamente, a través del depurador.

también puede consultar la hoja de datos y asegurarse de que se proporcionan los parámetros correctos.

  

que es aproximadamente 1Khz, pero por alguna razón estoy obteniendo 500KHz.

1Khz vs. 500Khz es una diferencia demasiado grande. Algo está seriamente mal.

    
respondido por el dannyf

Lea otras preguntas en las etiquetas