历史上的今天
返回首页

历史上的今天

今天是:2024年10月19日(星期六)

正在发生

2021年10月19日 | stm32专题五:时钟树(三)自定义配置HSE时钟 超频

2021-10-19 来源:eefocus

在前一节分析了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锁相环的输入源和倍频因子,使能PLL

        RCC_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倍频,此时超频到128MHz

HSE_SetSysClk(RCC_PLLMul_16);

// 初始化MCO的GPIO

MCO_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--);

}

推荐阅读

史海拾趣

E. Dold & Söhne KG公司的发展小趣事

在E. Dold & Söhne KG公司的发展历程中,品质始终是公司最重视的方面之一。公司严格把控原材料采购、生产过程和产品检验等环节,确保每一件产品都符合高标准的质量要求。这种对品质的执着追求使得E. Dold & Söhne KG公司的产品在市场上赢得了广泛的认可和信任。

Gold Peak Group公司的发展小趣事
对操作人员进行必要的培训,使其了解控制电路的工作原理、操作方法和安全注意事项。
Afero公司的发展小趣事

Afero公司成立于XXXX年,当时的市场中物联网平台技术正处于探索和发展阶段。Afero的创始团队凭借对物联网技术的深刻理解和前瞻性的视野,决定专注于物联网平台即服务(PaaS)的研发。他们投入大量资源,成功开发出一种具有创新性的物联网平台,该平台在安全性、易用性和可扩展性等方面表现出色,吸引了业界的广泛关注。

川土(Chipanalog)公司的发展小趣事

2022年,川土微电子的CA-IS3062W产品荣获了中国IC设计成就奖之“年度最佳隔离器”。这一荣誉的获得不仅是对川土微电子技术实力的肯定,也进一步提升了公司在行业内的知名度。同时,这也为川土微电子未来的发展奠定了坚实的基础。

Evans Capacitor Company公司的发展小趣事

在国内市场取得成功后,ECC开始将目光投向国际市场。公司积极参加国际展会,与海外客户建立联系。同时,ECC还在海外设立了研发中心和生产基地,以便更好地了解当地市场需求并提供定制化服务。通过不懈的努力,ECC的产品成功打入国际市场,实现了全球化布局。

FTDI公司的发展小趣事

随着环保意识的日益提高,ECC积极响应国家号召,致力于绿色环保产品的研发和生产。公司投入大量资金研发环保型电容器,采用环保材料和工艺,减少生产过程中的污染排放。此外,ECC还积极参与公益事业,捐款支持环保组织和慈善机构。

问答坊 | AI 解惑

NCR新系统及解决方案亮相中国

      日前,全球著名的商店零售自动化解决方案供应商———NCR公司以鲜明的技术理念和完备的产品阵容在第七届中国连锁店展览会上展示了崭新的形象。其中NCR享誉全球的FastLaneTM自助结账系统、“RFID结账通道”及“ ...…

查看全部问答>

FPGA价格比较

问:我想用FPGA做数字信号处理,不知道altera,xilinx,lattice的芯片, 谁的便宜?max 9000 400元,FLEX 10K 240 元,大家认为价格是否合理? lattice 的芯片是不是更便宜?xilinx 的芯片价格是不是贵些? 另外,这三家的 ...…

查看全部问答>

基于单片机的数控直流电压源

基于单片机的数控直流电源 1.基本要求   (1)输出电压:范围0~+12V,步进0.1V,纹波不大于10mV;   (2)输出电流:500mA;   (3)输出电压值由数码管显示;   (4)由“+”、“-”两键分别控制输出电压步进增减; 请 ...…

查看全部问答>

硬件工程师必读网站

本帖最后由 paulhyde 于 2014-9-15 08:56 编辑 硬件工程师必读网站  …

查看全部问答>

今年搞不好小车题会是走迷宫哦

本帖最后由 paulhyde 于 2014-9-15 08:58 编辑 今年搞不好小车题会是走迷宫哦,根据所给材料分析,小车走迷宫的可能性比较大。  …

查看全部问答>

我是嵌入式初学者,请问需要学习那些只是,顺便推荐几本好书谢谢!

我是嵌入式初学者,请问需要学习那些只是,顺便推荐几本好书谢谢!  …

查看全部问答>

如何用c8051f410单片机制作可控电源???急!!!!

哪位高手可以帮帮我!!??我刚上班接的第一个任务就是这个:用c8051f410单片机制作可控电源。由于没经验,不知从何下手。 大家帮我想想办法,简单的说下思路,只字片语也成啊,谢谢大家拉! 具体要求如下: 1定时开关机,并通知主板 2红外控 ...…

查看全部问答>

用DNW通过USB下载NK。BIN,有些可以成功下载下去,有些NK。BIN不管下载多少次都下不下去,进度条老是停在中间就没动静了,怎么一回事啊?

用DNW通过USB下载NK。BIN,有些可以成功下载下去,有些NK。BIN不管下载多少次都下不下去,进度条老是停在中间就没动静了,怎么一回事啊? 这些NK没什么区别,也就大小差个0。1MB的样子,好奇怪。你说不能下就都不能下,为什么有的可以有的又不行 ...…

查看全部问答>

交流伺服电机损坏的原因分析

三相交流伺服 电动机 应用广泛,但通过长期运行后,会发生各种故障,及时判断故障原因,进行相应处理 ,是防止故障扩大,保证设备正常运行的一项重要的工作。 一、通电后电动机不能转动,但无异响,也无异味和冒烟。 1.故障原因①电源未通(至少两 ...…

查看全部问答>

DSP6713 EDMA例程的问题

DSP6713例程里面EDMA  数据传送 Ping pong哪儿    就是那个例程数据时怎么传送的呢?在哪里看呢?传的什么数据呢?…

查看全部问答>