SystemCoreClock Reading incorrect value?
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2013-10-25 1:54 AM
Posted on October 25, 2013 at 10:54
Hi, I am working with STM32F401 discovery board.
I set up the system_stm32f4xx.c file so that the system clock becomes 84MHz(I used Excel based stm32 clock generator tool to get PLL values). void Delay(uint32_t dlyTicks){ msTicks = 0; while(msTicks<dlyTicks); } SystemInit(); SystemCoreClockUpdate();//Update variable SystemCoreClock //SysTick_Config(SystemCoreClock/1000); SysTick_Config(84000); If i do switch to the code that is commented out above, I get in accuracte timing for delay. The problem is that SystemCoreClock is read as 262500000. I don't understand why. Shouldn't it read 84000000 or 10500000? The un-commented code works fine and the SysTick seems to be operating at 84MHz clock. When I generated system_stm32f4xx.c file, I set up the Excel Wizard so that Systick runs at 10.5MHz. Why is it running at 84MHz? and how can I change it correctly?? Thank you.
This discussion is locked. Please start a new topic to ask your question.
3 REPLIES 3
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2013-10-25 3:58 AM
Posted on October 25, 2013 at 12:58
I'd just edit the file manually and understand the relationship between the clock settings.
Perhaps you have HSE_VALUE wrong? The DISCOVERY boards have an 8 MHz crystal, whereas the EVAL boards typically have an 25 MHz one. The relationship between the clocks is hardly complex.#if defined (PLL_SOURCE_HSI)
uint32_t SystemCoreClock = ((HSI_VALUE / PLL_M) * PLL_N) / PLL_P;
#else
uint32_t SystemCoreClock = ((HSE_VALUE / PLL_M) * PLL_N) / PLL_P;
#endif
If this gives the wrong answer, then some of the input variables are wrong.
Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
Up vote any posts that you find helpful, it shows what's working..
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2013-10-27 6:15 PM
Posted on October 28, 2013 at 02:15the ''system_stm32f4xx.c'' file generated by stm32f4xx clock configuration tool seems to make the Systick run at 48MHz( SysTick_Config(48000) makes interrupt occur every 1ms)). However, on the tool, it shows Cortex Timer(Systick) = 6. In the ''system_stm32f4xx.c'' file, I inserted a little code defining #define HSE_VALUE 8000000. Otherwise it is unchanged.I don't know what's wrong. I am not even sure that the core is running at 48MHz.below are my Dropbox link to relevent files.Thank you.
https://www.dropbox.com/s/frna2zgdblnjbns/Clock%20Configuration%20Tool%20for%20STM32F40x%2c41x.xls
https://www.dropbox.com/s/7h698fbpy490xut/system_stm32f4xx.c
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2013-10-28 4:50 AM
Posted on October 28, 2013 at 12:50
Consider using
STM32F401-Discovery_FW_V1.0.0\Projects\Template\system_stm32f4xx.c Make sure you define STM32F401xx for the project Alternatively consider #define PLL_N 336 #define PLL_P 4 #define PLL_M 8 #define PLL_Q 7uint32_t SystemCoreClock = ((HSE_VALUE / PLL_M) * PLL_N) / PLL_P;
This would run the part at 84 MHz, and also allow 48 MHz for the USB clock
Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
Up vote any posts that you find helpful, it shows what's working..
