cancel
Showing results for 
Search instead for 
Did you mean: 

STM32f4 discovery timing problem

glory_man
Associate II
Posted on December 06, 2011 at 10:43

I tried to build examples from stm32f4discovery_fw package for stm32f4-dicovery board. And I have a incorrect CPU timing settings.

Some examples.

I tried to make TIM_PWM_Output example with 2.5kHz PWM.

  /* Compute the prescaler value */

  PWM_pulse_freq = 1680000;

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

  /* Time base configuration */

  TIM_TimeBaseStructure.TIM_Period = ( PWM_pulse_freq / 2500 ) - 1;

  TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;

  TIM_TimeBaseStructure.TIM_ClockDivision = 0;

  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

  CCR1_Val = TIM_TimeBaseStructure.TIM_Period >> 1;

  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

In this case I have 832Hz output signal.

I tried to make simple FreeRTOS example. I used task where one of leds toggled with and vTaskDelay-functions called. Configured delay time is 100ms - real time delay 311ms.

I used Eclipse IDE, project configured as described

https://sites.google.com/site/stm32discovery/open-source-development-with-the-stm32-discovery/setting-up-eclipse-for-stm32-discovery-development

.

As far as I understand problem is in HSE/HSI settings.

What kind of settings I need to change/set?

Why software examples (used default  settings) does not worked as described?

#stm32f4-discovery-hse-hsi-timing
3 REPLIES 3
raptorhal2
Lead
Posted on December 06, 2011 at 19:57

Why software examples (used default  settings) does not worked as described?

Probably because the examples are set up for the typical prototyping board with a 25 MHz HSE. The F4 Discovery has an 8 MHz HSE.

See flasch.franz post 20 Nov on this forum for more explanation and a fix.

Cheers, Hal Baird

glory_man
Associate II
Posted on December 07, 2011 at 10:58

OK

I redifined HSE_VALUE in stm32f4xx_conf.h with following code

#if defined  (HSE_VALUE)

/* Redefine the HSE value; it's equal to 8 MHz on the STM32F4-DISCOVERY Kit */

 #undef HSE_VALUE

 #define HSE_VALUE    ((uint32_t)8000000)

#endif /* HSE_VALUE */

but program doesn't work properly.

I tried to include in program part of STM32F4-Discovery_FW_V1.1.0\Project\Demonstration code

RCC_GetClocksFreq(&RCC_Clocks);

SysTick_Config(RCC_Clocks.HCLK_Frequency / 100);

but doesn't help. Where is clock initialization in demonstration programm?

Only one thing help me:

SystemCoreClockUpdate();

But I need to know right way to correct clock initialization of demo board.

Posted on December 08, 2011 at 01:23

The clocks are set up by the startup code, prior to calling main(). The routine called in Keil is SystemInit()

Generally I would recommend cloning projects so you get at the critical meta-data and options that are not always obvious when building one from scratch.

It should be possible to examine the code generated to understand what/how things are being configured.

Keil has example projects for the STM32F4-Discovery board, and the firmware library should have project files for the major tool chains.

Tips, buy me a coffee, or three.. PayPal Venmo Up vote any posts that you find helpful, it shows what's working..