HI.

Now I'm trying to implement TIM into the STM32F429i-DISCO kit.

But I need to help how to calculate the prescaler and period value for user?

As I know currently I used 180Mhz as system clock. and I want to set TIM work every 1 's single second.

What am I suppose to do? the below snippet code I found from google.

But I can't understand what does 6000000 mean?

/* Compute the prescaler value */

PrescalerValue = (uint16_t) ((SystemCoreClock / 2) / 6000000) - 1;

/* Time base configuration */

TIM_TimeBaseStructure.TIM_Period = (6000-1); //Autoreload value (ARR) -> 1ms

TIM_TimeBaseStructure.TIM_Prescaler = (6000-1);

TIM_TimeBaseStructure.TIM_ClockDivision = 0;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

I found some explain from google as the below.

*TIM_Prescaler = N - 1; Divides the Bus/TIM clock down by N**TIM_Period = N - 1; Divide that clock down by N, ie the *period* is N ticks.*

*So assume your TIMCLK is ticking at 72 MHz, the *external* clock*

*If TIM_Prescaler = 71; the timers *internal* clock will be 1 MHz*

*If TIM_Period = 999; the 1MHz is divided by a 1000, so it becomes 1KHz*

*Your update interrupt with fire every 1ms*

*Now if you want to play with the channels, say in a PWM mode you can play with the output pins.*

*If TIM_Pulse = 500; the channel will out a frequency of 1 KHz, with a 50/50 duty cycle. ie TIM_Pulse = N / 2*

How to calculate and know ?

*If TIM_Prescaler = 71; the timers *internal* clock will be 1 MHz*

*If TIM_Period = 999; the 1MHz is divided by a 1000, so it becomes 1KHz*

How to calculate and know ?

What if

*If TIM_Prescaler = 63; the timers *internal* clock will be ?? MHz*

*If TIM_Period = 123; the it becomes ?? KHz*

Would you please help me for understanding how to calculate ?

When I set with the following setting, I've got the below waveform.

TIM_TimeBaseStructure.TIM_Period = 71;

TIM_TimeBaseStructure.TIM_Prescaler = 999;

TIM_TimeBaseStructure.TIM_ClockDivision = 0;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

/* TIM Interrupts enable */

TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);

/* TIM2 enable counter */

TIM_Cmd(TIM2, ENABLE);

Hello!

In terms of frequency:

HandleTimer.Init.Prescaler = Timer'sClockFrequency/DesiredFrequency -1;

and in terms of period

HandleTimer.Init.Prescaler = Timer'sClockFrequency*DesiredPeriod -1;

Frequency is in Hz and Period in Seconds.

Example to get a counter period 1 sec (1HZ)

HandleTimer.Init.Prescaler = Timer'sClockFrequency -1;

Example to get a counter frequency 100 Hz (10 msec period)

HandleTimer.Init.Prescaler = Timer'sClockFrequency/100 -1;

Regards

vf