cancel
Showing results for 
Search instead for 
Did you mean: 

SystemCoreClock vs HCLK vs APB1

xuraax
Associate III

I am learning to use the PWM Input mode to measure input frequency. I am using examples from the internet to help me along.

In my .ioc file SYSCLK is set to 8MHz and with a prescaler set to /8 my HCLK and APB1 are set 1Mhz

xuraax_0-1752765749639.png

In the examples I studied in the callback routine Frequency is calculated either:

1:   1000000 / capture_value

while another uses this method

2:  SystemCoreClock / capture_value

Method 1: works but in case you eventually need to change the prescaler you also need to change the constant.

Method 2: sounds more robust but when I hover over "SystemCoreClock" in main.c a window comes up stating that SystemCoreClock is set to 8000000 anyway. What variable do I need to use to ensure that the value used in the calculation is in fact HCLK or APB1?

1 REPLY 1
TDK
Super User

Since it's a timer, you want to get the timer tick rate, which is either APB1 or APB1 * 2. You can get this using HAL_RCC_GetPCLK1Freq and HAL_RCC_GetClockConfig.

If you feel a post has answered your question, please click "Accept as Solution".