1. SystemCoreClockUpdate()作用:用来更新 SystemCoreClock 变量,在时钟配置完成之后,需要调用这个函数来更新 SystemCoreClock 变量;
  2. 默认情况下:SystemCoreClock = 168000000(168MHz);
  3. 配置相关参数导致HCLK不是168MHz时,需要调用SystemCoreClockUpdate()函数来更新SystemCoreClock 的值(即HCLK的频率),否则在使用SystemCoreClock变量时可能会导致错误产生;
void SystemCoreClockUpdate(void)
{uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;/* Get SYSCLK source -------------------------------------------------------*/tmp = RCC->CFGR & RCC_CFGR_SWS; // 获得系统时钟切换状态switch (tmp){case 0x00:  /* HSI used as system clock source */SystemCoreClock = HSI_VALUE;break;case 0x04:  /* HSE used as system clock source */SystemCoreClock = HSE_VALUE;break;case 0x08:  /* PLL used as system clock source *//* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_NSYSCLK = PLL_VCO / PLL_P*/    pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; // 确定PLL的时钟源 0:HSI 1:HSEpllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; // 得到分频系数M的数值#if defined (STM32F40_41xxx) || defined (STM32F427_437xx) || defined (STM32F429_439xx) || defined (STM32F401xx)if (pllsource != 0) // PLL时钟源为HSE{/* HSE used as PLL clock source */pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); // 计算VCO时钟频率}else{/* HSI used as PLL clock source */pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); // 计算VCO时钟频率  }
#elif defined (STM32F411xE)
#if defined (USE_HSE_BYPASS)if (pllsource != 0){/* HSE used as PLL clock source */pllvco = (HSE_BYPASS_INPUT_FREQUENCY / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);}
#else  if (pllsource == 0){/* HSI used as PLL clock source */pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);}
#endif /* USE_HSE_BYPASS */
#endif /* STM32F40_41xxx || STM32F427_437xx || STM32F429_439xx || STM32F401xx */  pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; // 得到分频系数P的大小SystemCoreClock = pllvco/pllp; // 计算系统时钟频率     break;default:SystemCoreClock = HSI_VALUE; //默认为HSI作为系统时钟源break;}/* Compute HCLK frequency --------------------------------------------------*//* Get HCLK prescaler */tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; //得到AHB分频系数/* HCLK frequency */SystemCoreClock >>= tmp; //计算HCLK频率
}

STM32 SystemCoreClockUpdate()函数详解相关推荐

  1. stm32 DMA使用详解

    转自:http://www.cnblogs.com/121792730applllo/p/3154447.html STM32 DMA使用详解 DMA部分我用到的相对简单,当然,可能这是新东西,我暂时 ...

  2. STM32启动文件详解-比较清晰的一篇

    STM32启动文件详解 启动文件使用的 ARM 汇编指令汇总 启动程序源码注释(点此下载) 1. Stack-栈 Stack_Size EQU 0x00000400AREA STACK, NOINIT ...

  3. 【stm32】delay详解

    1 首先看函数: 1.1 当使用ucos时才有以下部分: 主要实现宏定义与基本函数定义. #if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS定义了,说明要支持OS了 ...

  4. STM32 CAN通信协议详解—小白入门(二)

    文章目录 (一)CAN通信协议简介 (二)CAN物理层 2.1.闭环总线网络2.2.开环总线网络2.3.通信节点2.4.差分信号2.5.CAN协议的差分信号 (三)协议层 3.1.CAN的波特率及位同 ...

  5. STM32串口通信详解以及通信异常或者卡死常见问题分析

    STM32串口通信详解以及通信异常或者卡死常见问题分析 目录 STM32串口通信详解以及通信异常或者卡死常见问题分析 一.常见的异常问题 二.STM32的串口简介 1.串口的通讯方式 ①按数据传输方向 ...

  6. STM32的定时器详解(嵌入式学习)

    STM32的定时器详解 0. 前言 1. Systick定时器 概念 工作原理 时钟基准 Systick练习 2. HAL_Delay函数分析 3. 定时器 基本概念 定时器分类 定时器组成 计数器 ...

  7. C语言网络编程:accept函数详解

    文章目录 前言 函数描述 代码实例 如何得到客户端的IP 和 端口号 前言 当使用tcp服务器使用socket创建通信文件描述符,bind绑定了文件描述符,服务器ip和端口号,listen将服务器端的 ...

  8. 【FFmpeg】函数详解(三)

    FFmpeg函数详解 14.av_write_frame 15.av_interleaved_write_frame 16.av_write_trailer 17.avio_close 18.av_i ...

  9. 【FFmpeg】函数详解(二)

    FFmpeg函数详解 9.av_dump_format 10.avio_open 11.avformat_write_header 12.avcodec_send_frame 13.avcodec_r ...

最新文章

  1. Linux下C++开发工具介绍
  2. GMM-HMM语音识别算法
  3. 量子计算机,开启中国速度
  4. 搭建本地Yum软件源安装Cloudera Manager 5
  5. Matlab:成功解决 Inner matrix dimension must agree
  6. [C++] 匿名管道的理解与实现
  7. 敏捷研发项目,我们该如何度量?
  8. python打印字符金字塔_Python教程第7篇:print打印字符串
  9. Jenkins系列之-—07 集成JIRA
  10. 黑盒测试实践进度记录(五)
  11. Extjs formpanel加载数据的两种方式
  12. 计算机硬盘转速多少比较好,电脑硬盘的转速是什么意思?越快就越好么?
  13. SpringBoot接口接收json参数
  14. 阿宇相机智能双光配置
  15. [数学建模]灵敏度分析记录
  16. GB/T28181-2022协议版本标识X-GB-Ver解读
  17. thinkphp生成guid 唯一识别码
  18. 路由dns劫持,路由器DNS劫持简单实现和防范分析
  19. 《微机原理第五版》期末知识总结(第八章---第十章)
  20. 将整数字符串转成整数值

热门文章

  1. vscode安装node.js
  2. 可爱的python下载_可爱的Python PDF 全书完整版
  3. python中使用np.array()将list转换成Array的坑
  4. 查看tomcat实时日志
  5. 关于企业战略管理的书,这些经典教材值得推荐
  6. jquery数组去重:纯数字数组去重,forEach判断数组是否含有该字段,单个数组通过某个字段名去重value值,多个数组合并同时根据某个字段进行去重
  7. Google I/O 2023 全球开发者大会 Reveal Event
  8. 品味扬州的诗画美境界
  9. Android屏幕适配,包括全面屏适配,自定义适配
  10. html表格 元素位置,HTML的表格元素