Cálculo del tiempo de temporizador STM32

  
 

temporizador STM32 tiene una gran cantidad de uso:

(a) el reloj del sistema (SysTick)

La configuración es sencilla, los siguientes 1ms se genera valores de interrupción, y generar retardo de 10 ms función:

vacío RCC_Configuration (void) {RCC_ClocksTypeDef RCC_ClockFreq; SystemInit (); //archivo desde system_stm32f10x.c, sólo tiene que llamar a esta función puede estar dispuesto para completar el RCC .RCC_GetClocksFreq (&RCC_ClockFreq);

//SYSTICK --1ms dividiendo el reloj del sistema de interrupción si (SysTick_Config (SystemFrequency /1000)) {while (1); //error Capture}}

void SysTick_Handler (void) //función de procesamiento de interrupción en el {while (TIM) {tim--;}}

//llamada de programa: Delay_ms (10);

por supuesto, se establece la premisa variable de tim para configurar tipo volátil.

(b) implica un tiempo de segundo recuento de temporizador (TIMX)

TIM_TimeBaseStructure.TIM_Prescaler = 2; //prescaler (frecuencia de reloj de división) 72M /(2 + 1) = 24MTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //contar hasta TIM_TimeBaseStructure.TIM_Period = 65535; //valores de carga de 18k /144 = 125hzTIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0; TIM_TimeBaseInit (TIM3, &TIM_TimeBaseStructure);

hora regular calcula: TIM_TimeBaseStructure.TIM_Prescaler = 2; //divisor 2 72M //2=24MHzTIM_TimeBaseStructure.TIM_Period = 65,535 (2 + 1); //valor de recuento 65535 ((1 + TIM_Prescaler) /72M) * (1 + TIM_Period) = ((1 + 2) /72M) * (1 + 65 535) = 0.00273 segundos = 366.2Hz * /

dos puntos (de red de gambas, no probado) (1) TIMX (1-8), en la biblioteca proporcionada por defecto, el reloj es 72M; (2) TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; Número de repeticiones se repite muchas veces antes de un rebosadero a un desbordamiento de interrupción que darle el correspondiente registro TIM1 llamada RCR. Si este valor no está configurado, Cuando el valor del registro de la electricidad, pero al azar, interrumpida una vez tuvo un segundo, N segundos pueden llegar a ser interrumpida una vez, deje que su cabeza super grande!

supone que el reloj del sistema es 72Mhz, TIM1 se deriva de PCLK2 (72MHz), TIM2-7 era

son fijados por una clave de reloj PCLK1 número de pre-escalador, auto-recarga periodo valor del registro

se proporciona sustancialmente temporizador

1, TIM_TimeBaseStructure .TIM_Prescaler = 7,199; //número de ejemplo reloj prescaler:

frecuencia de reloj = 72 /(reloj prescaler 1)

2, TIM_TimeBaseStructure.TIM_Period = 9,999; //valor automático (temporización

tiempo) registrar ciclo de recarga generado por la acumulación de una 0xFFFF frecuencia actualizado o interrumpir (también dicho tiempo regular)

3, TIM_TimeBaseStructure.TIM_CounterMode = TIM1_CounterMode_Up; //temporizador

patrón de contar hasta

4, TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //valor por división de tiempo

5, TIM_TimeBaseInit (TIM2, &TIM_TimeBaseStructure); //inicializar temporizador 2

6, TIM_ITConfig (TIM2, TIM_IT_Update, ENABLE); //abrir el desbordamiento de interrupción de interrupción

7, TIM_Cmd ( TIM2, ENABLE); //temporizador abierto

o:

TIM_TimeBaseStructure.TIM_Prescaler = 35999; //división 35,999 72M /

(35999 + 1) /2 = 1 Hz 1 segundo de tiempo de interrupción de desbordamiento

TIM_TimeBaseStructure.TIM_Period = 2,000; //valor de recuento 2000

((1 + TIM_Prescaler) /72M) * (1 + TIM_Period) = ((1+ 35999) /72M) * (1 + 2,000) = 1 segundo * /

STM32 función de temporizador básica común implementado temporizador parpadea

# include " stm32f10x.h " # include " misc.h "

void RCC_Configuration (void); void NVIC_Configuration (void); GPIO_Configuration void (void); TIM3_Configuration void (void);

int main (void) {RCC_Configuration ( ); NVIC_Configuration (); GPIO_Configuration (); TIM3_Configuration ();

TIM_ClearFlag (TIM3, TIM_FLAG_Update); TIM_ARRPreloadConfig (TIM3, DISABLE);

TIM_ITConfig (TIM3, TIM_IT_Update, ENABLE); TIM_Cmd (TIM3, ENABLE);

while (1) {;}}

TIM3_Configuration void (void) {

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseStructure.TIM_Period = 9,999; TIM_TimeBaseStructure.TIM_Presca ler = 7199; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit (TIM3, &TIM_TimeBaseStructure);}

RCC_Configuration (void) {SystemInit ();

RCC_APB1PeriphClockCmd ( RCC_APB1Periph_TIM3, ENABLE);

RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOC, habilitar);

}


vacío NVIC_Configuration (void) {NVIC_InitTypeDef NVIC_InitStructure;

NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ACT; NVIC_Init (&NVIC_InitStructure);}

vacío GPIO_Configuration (void) {GPIO_InitTypeDef GPIO_InitStructure;
; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed ​​= GPIO_Speed_50MHz; GPIO_Init (GPIOC, &GPIO_InitStructure);

}

# include " stm32f10x_it .h "

TIM3_IRQHan vacío dler (void) {if (TIM_GetITStatus (TIM3, TIM_IT_Update) = REINICIAR!) {

TIM_ClearITPendingBit (TIM3, TIM_IT_Update); GPIO_WriteBit (GPIOC, GPIO_Pin_7, (BitAction) (1 - GPIO_ReadOutputDataBit (GPIOC, GPIO_Pin_7)) );}}

Copyright © Conocimiento de Windows All Rights Reserved