在前一节分析了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. LoadRunner SQL 2008
  2. java threas.jion_Java Thread.join详解
  3. Java-Java I/O 字节流之BufferedReader/BufferedWriter
  4. 微服务部署:蓝绿部署、滚动部署、灰度发布、金丝雀发布
  5. 单片机 原子性操作_一款深藏功与名的国产单片机——F1C100A
  6. SQL Server中的Image数据类型的操作
  7. android java 面试题,Android java 高级面试题库
  8. svg载入html,SVG系列教程:SVG简介与嵌入HTML页面的方式
  9. 软考(2)——看图心想编译原理
  10. mycat核心配置详解(schema.xml配置)
  11. linux系统在物流公司的z作用,【项目案例】基于RFID的智能物流仓储系统
  12. Linux - vim安装 配置与使用
  13. Python UI自动化报错汇总2
  14. window系统怎么解压tar.bz2文件
  15. Misra-C编码规范全解读 - Misra C 概述
  16. 色彩配色基础泛谈《第一天》到底说了麻?
  17. 设备报废鉴定怎么做?
  18. uniapp微信小程序的各种弹框提示(轻提示)
  19. 找出数组中第k大和第m大的数字之和
  20. Mybatis Mybatis-plus使用问题全记录

热门文章

  1. java+jsp+mysql新生报到系统开题报告
  2. 六边形 蜂巢样式 svg方式 写法 初见
  3. Word合并表格回车删除不掉的解决方法
  4. Android官方开发文档Training系列课程中文版:打印内容之HTML文档打印
  5. 《K8S进阶》(上)
  6. 2024计算机专业考研规划
  7. 周边软件产业 - 拉私活的黑车该不该取缔?
  8. 中国航天发展历程(转载)
  9. 深度学习(7):Mini-batch梯度下降法
  10. S4 demo系统里面查哪个用户有开发部署Fiori的权限