Skip to main content
SWoon
Associate II
February 11, 2019
Solved

System clock is abnormal during stm32f401 using TIM2.

  • February 11, 2019
  • 4 replies
  • 1128 views

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.
    Best answer by Tesla DeLorean

    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

    4 replies

    Tesla DeLorean
    Tesla DeLoreanBest answer
    Guru
    February 11, 2019

    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
    February 11, 2019

    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
    February 11, 2019

    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
    February 11, 2019

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