Skip to main content
SWoon
Associate II
Feb 11, 2019 3:27 AM UTC
Solved

System clock is abnormal during stm32f401 using TIM2.

Hello,

I am using timer as stm32f401.

​

However, the clock set in CubeMx is different from the actual clock. (I set it to 48Mhz, but I get 2Mhz when measuring with an oscilloscope.)

​

I used the MCO pin to measure the PLLCLK clock, but my set clock does not come out.

​

Where should I look for a solution?

    This topic has been closed for replies.
    Tesla DeLorean
    Tesla DeLoreanBest answer
    Guru
    Feb 11, 2019 4:23 AM UTC

    Perhaps by looking at the code in SystemClock_Config(), and printing out the speeds

     printf("Core=%d, %d MHz\n", SystemCoreClock, SystemCoreClock / 1000000);

     printf("HCLK=%d\n", HAL_RCC_GetHCLKFreq());

     printf("APB1=%d\n", HAL_RCC_GetPCLK1Freq());

     printf("APB2=%d\n", HAL_RCC_GetPCLK2Freq());

    Look at the TIM2 setup code.

    Check your input clock if using HSE

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

    4 replies

    Tesla DeLorean
    Tesla DeLoreanBest answer
    Guru
    Feb 11, 2019 4:23 AM UTC

    Perhaps by looking at the code in SystemClock_Config(), and printing out the speeds

     printf("Core=%d, %d MHz\n", SystemCoreClock, SystemCoreClock / 1000000);

     printf("HCLK=%d\n", HAL_RCC_GetHCLKFreq());

     printf("APB1=%d\n", HAL_RCC_GetPCLK1Freq());

     printf("APB2=%d\n", HAL_RCC_GetPCLK2Freq());

    Look at the TIM2 setup code.

    Check your input clock if using HSE

    Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
    SWoon
    SWoonAuthor
    Associate II
    Feb 11, 2019 5:05 AM UTC

    I checked as you told me.

    The settings are out of order. However, checking the SystemClock_Config () created by cubemx did not find any problems.​

    The output of the compiler is shown below.

    Core = 16000000, 16 MHz

    HCLK = 16000000

    APB1 = 1000000

    APB2 = 1000000

    ​

    Below is the configuration code generated by CubeMx.

    void SystemClock_Config(void)

    {

     RCC_OscInitTypeDef RCC_OscInitStruct = {0};

     RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

     RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};

    ​

     /**Configure the main internal regulator output voltage 

     */

     __HAL_RCC_PWR_CLK_ENABLE();

     __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2);

     /**Initializes the CPU, AHB and APB busses clocks 

     */

     RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE|RCC_OSCILLATORTYPE_LSE;

     RCC_OscInitStruct.HSEState = RCC_HSE_ON;

     RCC_OscInitStruct.LSEState = RCC_LSE_ON;

     RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;

     RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;

     RCC_OscInitStruct.PLL.PLLM = 4;

     RCC_OscInitStruct.PLL.PLLN = 96;

     RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4;

     RCC_OscInitStruct.PLL.PLLQ = 4;

     if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

     {

      Error_Handler();

     }

     /**Initializes the CPU, AHB and APB busses clocks 

     */

     RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

                   |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;

     RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;

     RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

     RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;

     RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

    ​

     if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)

     {

      Error_Handler();

     }

     PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;

     PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;

     if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)

     {

      Error_Handler();

     }

    }

    ​​

    Please let me know if there are any misconfigurations (HSE clock is good).

    Tesla DeLorean
    Guru
    Feb 11, 2019 5:19 AM UTC

    You should use the debugger, break point the SystemClock_Config() and check that it is actually being called.

    Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
    SWoon
    SWoonAuthor
    Associate II
    Feb 11, 2019 5:40 AM UTC

    Debugging at the start and end breakpoints of SystemClock_Config (). It seems to work correctly by entering a function.