硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1816|回复: 3
收起左侧

[STM32H7] 系统时钟SystemCoreClock读取出来是64Mhz

[复制链接]

1

主题

2

回帖

5

积分

新手上路

积分
5
发表于 2021-10-30 19:27:28 | 显示全部楼层 |阅读模式
        /* 使能HSE,并选择HSE作为PLL时钟源 */
        RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
        RCC_OscInitStruct.HSEState = RCC_HSE_ON;
        RCC_OscInitStruct.HSIState = RCC_HSI_OFF;
        RCC_OscInitStruct.CSIState = RCC_CSI_OFF;
        RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
        RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
               
        RCC_OscInitStruct.PLL.PLLM = 5;                                //PLL_VCO_IN=HSE/PLL_M,25/5=5
        RCC_OscInitStruct.PLL.PLLN = 160;                        //PLL_VCO_OUT=PLL_VCO_IN*PLL_N,5*160=800
        RCC_OscInitStruct.PLL.PLLP = 2;                                //SYS_CLK=PLL_VCO_OUT/PLL_P,800/2=400
        RCC_OscInitStruct.PLL.PLLR = 2;                                //
        RCC_OscInitStruct.PLL.PLLQ = 40;                        //OTHER_CLK=PLL_VCO_OUT/PLL_Q,800/40=20
               
        RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
        RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;       
        ret = HAL_RCC_OscConfig(&RCC_OscInitStruct);

时钟配置是这样的,但是读取SystemCoreClock = 64000000,用HAL_RCC_GetSysClockFreq()获得也是64000000.
不应该是400Mhz吗?

有大侠帮忙解答,谢谢!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106938
QQ
发表于 2021-10-31 09:26:59 | 显示全部楼层
下面这个函数才会更新SystemCoreClock ,是执行下面函数后调用的SystemCoreClock查看吧

ret = HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4);
        if(ret != HAL_OK)
        {
        Error_Handler(__FILE__, __LINE__);
        }
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2021-10-31 11:12:55 | 显示全部楼层
eric2013 发表于 2021-10-31 09:26
下面这个函数才会更新SystemCoreClock ,是执行下面函数后调用的SystemCoreClock查看吧

ret = HAL_RCC_C ...

        /* 此函数会更新SystemCoreClock,并重新配置HAL_InitTick */
        ret = HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4);
        if(ret != HAL_OK)
        {
        Error_Handler(__FILE__, __LINE__);
        }

       
        PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART3|RCC_PERIPHCLK_FDCAN;
        PeriphClkInitStruct.FdcanClockSelection = RCC_FDCANCLKSOURCE_PLL;
        PeriphClkInitStruct.Usart234578ClockSelection = RCC_USART234578CLKSOURCE_D2PCLK1;
        if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
        {
                Error_Handler(__FILE__, __LINE__);
        }
    /*
      使用IO的高速模式,要使能IO补偿,即调用下面三个函数
      (1)使能CSI clock
      (2)使能SYSCFG clock
      (3)使能I/O补偿单元, 设置SYSCFG_CCCSR寄存器的bit0
    */
        __HAL_RCC_CSI_ENABLE() ;

        __HAL_RCC_SYSCFG_CLK_ENABLE() ;

        HAL_EnableCompensationCell();

有这个部分的代码,但是读取的数值一直都是64000000
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2021-10-31 11:26:46 | 显示全部楼层
eric2013 发表于 2021-10-31 09:26
下面这个函数才会更新SystemCoreClock ,是执行下面函数后调用的SystemCoreClock查看吧

ret = HAL_RCC_C ...

/*
*********************************************************************************************************
*
*        模块名称 : BSP模块(For STM32H7)
*        文件名称 : bsp.c
*        版    本 : V1.0
*        说    明 : 这是硬件底层驱动程序的主文件。每个c文件可以 #include "bsp.h" 来包含所有的外设驱动模块。
*                           bsp = Borad surport packet 板级支持包
*        修改记录 :
*                版本号  日期         作者       说明
*                V1.0    2018-07-29  Eric2013   正式发布
*
*        Copyright (C), 2018-2030, formission digital tech.
*
*********************************************************************************************************
*/

void System_Init(void)
{
       
        /* 配置MPU */
        MPU_Config();
       
        /* 使能L1 Cache */
        CPU_CACHE_Enable();     //关闭cache,否则DMA-ADC数据采集不正常

        /*
       STM32H7xx HAL 库初始化,此时系统用的还是H7自带的64MHz,HSI时钟:
           - 调用函数HAL_InitTick,初始化滴答时钟中断1ms。
           - 设置NVIV优先级分组为4。
         */
        HAL_Init();

        /*
       配置系统时钟到400MHz
       - 切换使用HSE。
       - 此函数会更新全局变量SystemCoreClock,并重新配置HAL_InitTick。
    */
        SystemClock_Config();
        /*
           Event Recorder:
           - 可用于代码执行时间测量,MDK5.25及其以上版本才支持,IAR不支持。
           - 默认不开启,如果要使能此选项,务必看V7开发板用户手册第8章
        */       
#if Enable_EventRecorder == 1  
        /* 初始化EventRecorder并开启 */
        EventRecorderInitialize(EventRecordAll, 1U);
        EventRecorderStart();
#endif

}
按照上面的说明,HAL采用了H7内置64Mhz,后面的时钟初始化,更新为400Mhz。
但是读取的数值的确还是64Mhz

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-11 02:02 , Processed in 0.218689 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表