在前一节分析了stm32系统默认时钟配置的过程,现在想自己实现一个自定义修改时钟配置的函数。其实原理很简单,因为系统在上电复位时就会按照默认完成时钟配置。因此,要先复位时钟,然后按照流程来配置就ok,我们通过修改PLL锁相环的倍频因子,就可以实现超频。用到的所有函数,都可以在rcc.h和flash.h中找到。

bsp_rccclkconfig.c

/* RCC时钟配置函数 */#include "bsp_rccclkconfig.h"// 自定义时钟配置函数
void HSE_SetSysClk(uint32_t RCC_PLLMul_x)
{ErrorStatus HSEStatus;// 把RCC时钟复位成复位值RCC_DeInit();/* @arg RCC_HSE_OFF: HSE oscillator OFF@arg RCC_HSE_ON: HSE oscillator ON@arg RCC_HSE_Bypass: HSE oscillator bypassed with external clock*/// 传入参数有3个可选项,其中RCC_HSE_Bypass是使用外部有源晶振时,// 由外电路提供时钟,此时外部时钟只接OSC_IN,而OSC_OUT引脚悬空// 使用外部无源晶振时,晶体 + 起振电容配合内部电路来产生时钟信号RCC_HSEConfig(RCC_HSE_ON);// 等待获取HSE启动状态HSEStatus = RCC_WaitForHSEStartUp();// HSE启动成功if (HSEStatus == SUCCESS){// 使能预取指,这个函数直接去stm32f10x_flash.h中找到FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);// 设置延时,latency表示“延迟”,同样在stm32f10x_flash.h中找到FLASH_SetLatency(FLASH_Latency_2);// 配置三条总线的分频因子RCC_HCLKConfig(RCC_SYSCLK_Div1);RCC_PCLK1Config(RCC_HCLK_Div2);RCC_PCLK2Config(RCC_HCLK_Div1);// 配置PLL锁相环的输入源和倍频因子,使能PLLRCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_x);RCC_PLLCmd(ENABLE);// 等待PLL准备就绪while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);// 选择PLLCLK作为系统时钟RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);// 等待系统时钟切换成功并稳定while (RCC_GetSYSCLKSource() != 0x08);}// HSE启动失败else{// 添加错误处理代码}}// MCO引脚配置函数,用于检测时钟,包括HSE PLLCLK LSE等
void MCO_GPIO_Config(void)
{GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOA, &GPIO_InitStruct);
}

这里我们还配置了MCO引脚(PA8复用得到),根据要求配置为复用推挽输出,通过MCO可以监测系统时钟(HSE、LSE、SYSCLK)等,用于测量我们配置的超频时钟。

bsp_rccclkconfig.h

#ifndef __BSP_RCCCLKCONFIG_H
#define __BSP_RCCCLKCONFIG_H#include "stm32f10x.h"void HSE_SetSysClk(uint32_t RCC_PLLMul_x);
void MCO_GPIO_Config(void);#endif /* __BSP_RCCCLKCONFIG_H */

然后在主函数中调用,进行测试,观察led的闪烁速度,并利用示波器实际测量PA8引脚输出的时钟频率。

main.c

#include "stm32f10x.h"
#include "bsp_led.h"
#include "bsp_rccclkconfig.h"void delay(uint32_t count);int main(void)
{// 来到这里时,系统时钟已经被配置成72MHz// 必须要先复位时钟,因为系统上电就会执行systeminit函数配置时钟// 此函数已经放在HSE_SetSysClk函数内// RCC_DeInit();// 16倍频,此时超频到128MHzHSE_SetSysClk(RCC_PLLMul_16);// 初始化MCO的GPIOMCO_GPIO_Config();// 选择系统时钟输出(检测sysclk)RCC_MCOConfig(RCC_MCO_SYSCLK);LED_GPIO_Config();while (1){LED_YELLOW;delay(0XFFFFF);LED_ALL_OFF;delay(0XFFFFF);}
}void delay(uint32_t count)
{for (; count != 0; count--);
}

stm32专题五:时钟树(三)自定义配置HSE时钟 超频相关推荐

  1. 【STM32】STM32 F4系列时钟树与RCC寄存器

    STM32 5个时钟源 HSI(High Speed Internal)是高速内部时钟,RC振荡器,频率为16MHz,精度不高.可以直接作为系统时钟或者用作PLL时钟输入 HSE(High Speed ...

  2. STM32单片机学习笔记(七)-RCC时钟控制:简单了解时钟树(一)

    写在前面:本系列内容均为自学笔记,参考资料为野火指南者开发板资料及芯片参考手册等,使用野火指南者开发板进行学习,该系列内容仅用于记录笔记,不做其他用途,笔记的内容可能会存在不准确或者错误等,如有大佬看 ...

  3. STM32时钟树分析

    对于刚接触STM32的时钟树,对时钟树的理解,可以重点先思考两个问题: 1.时钟从哪里来:时钟源. 2.时钟怎么供给STM32的系统工作:时钟的流向(输入-->处理-->输出) 下面以ST ...

  4. GD32系列总结 - 时钟树总结及CubeMX生成代码

    GD32系列总结 - 时钟树总结及CubeMX生成代码 写在前面 时钟树 HSE振荡器时钟(高速外部时钟信号) HSE用户外部时钟(旁路模式) HSE外部晶体/陶瓷谐振器 HSI振荡器时钟 PLL时钟 ...

  5. 时钟树综合CTS技术经验分享(高薪必备)

    时钟树综合CTS技术经验分享(高薪必备!) 文章右侧广告为官方硬广告,与吾爱IC社区无关,用户勿点.点击进去后出现任何损失与社区无关. 说到时钟树综合,需要大家紧紧围绕 3W 和 1H 来思考,即 W ...

  6. SpringSecurity权限管理框架系列(六)-Spring Security框架自定义配置类详解(二)之authorizeRequests配置详解

    1.预置演示环境 这个演示环境继续沿用 SpringSecurit权限管理框架系列(五)-Spring Security框架自定义配置类详解(一)之formLogin配置详解的环境. 2.自定义配置类 ...

  7. 数字后端——时钟树综合

    在数字集成电路设计中,时钟信号是数据传输的基准,它对于同步数字系统的功能.性能和稳定性起决定性作用,所以时钟信号的特性及其分配网络尤被人们关注.时钟信号通常是整个芯片中有最大扇出.通过最长距离.以最高 ...

  8. 4--STM32RCC时钟树

    STM32RCC时钟树 一.时钟系统结构 1--简述 1.1 总线时钟 2时钟源 3--HSE时钟 4-- PLL配置 **1.主PLL:** **2.专用PLL(PLLI2S)** 4---LSE时 ...

  9. 数字IC后端流程——(四)时钟树综合Clock Tree Synthesis

    参考原博地址:https://blog.csdn.net/weixin_46752319/article/details/107387584 ICC时钟树综合 时钟树综合就是指从某个clock的roo ...

最新文章

  1. 高并发场景下创建多少线程才合适?一条公式帮你搞定!!
  2. 2021年春季学期-信号与系统-第三次作业参考答案-第五道题
  3. 计算机专业只考408吗,关于计算机考研408的那些事儿
  4. 软件项目开发计划书【申明:来源于网络】
  5. 笔记本电脑按开机键没反应怎么办?(先记得长按开机键,大约10秒钟看看可以吗)
  6. 使用Python解析nginx日志文件
  7. 【12】 全国外电音DJ 3000首 32G
  8. Tesseract 3 语言数据的训练方法【转】http://blog.csdn.net/dragoo1/article/details/8439373
  9. 金鳞化龙——AMD处理器“开核”大测试(图)
  10. Redis-使用场景
  11. 鲁大师2022半年报显卡排行,NVIDIA霸榜,七彩虹成最大赢家!
  12. java web欢迎页 主页 设置为servlet的方法
  13. 2021-2027全球与中国11-氨基十一烷市场深度研究分析报告
  14. 插座断电提醒(测试阶段)
  15. 机器学习入门——加州房价问题
  16. Ubuntu14.04 64位网易云播放器
  17. python计算协方差矩阵_在Python中构建协方差矩阵
  18. matlab环境下的yalmip+cplex的安装过程
  19. paddlepaddle学习
  20. 一个宝藏开源软件,跨平台终端神器 Tabby

热门文章

  1. matlab如何寻找波谷,波峰波谷法计算信号的周期及其Matlab程序
  2. Mac下idea配置文件乱码
  3. 存储器空间或者桌面堆_手机桌面太杂乱?不知道如何管理自己的桌面,身为强迫症的我来教你!...
  4. 如何解决UE5动态模糊问题
  5. 图片识别技巧,OCR文字识别软件了解下
  6. Mysql去重查询---DISTINCT、group by
  7. C++知识进阶之#defines使用优化
  8. python 换算美分的小功能
  9. 图像锐化一:几个常见的滤波核
  10. 循环读取目录下的文件,使用poi读取excel的xlsx,使用jxl读取xls文件