2025-07-17 8:36 AM
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
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?
2025-07-17 10:05 AM
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.