stm32的超频实验

发布者:万童洁最新更新时间:2022-05-07 来源: eefocus关键字:stm32  频率 手机看文章 扫描二维码
随时随地手机看文章

这里写图片描述

从时钟树中可以看出外接晶振可以接4-16Mhz,经过PLL倍频,最高可以达到16倍晶振的频率。笔者自己是外接的8Mhz晶振,所以说理论上可以达到8*16=128Mhz的频率。


所用芯片:stm32f103 编译工具:keil5


时钟配置子函数如下:


void HSE_Init(uint32_t RCC_PLLMul_x)//范围2-16

{

    ErrorStatus HSEStatus;//定义

    //重置RCC,否则不会有效果

    RCC_DeInit();


    //打开HSE

    RCC_HSEConfig(RCC_HSE_ON);

    HSEStatus=RCC_WaitForHSEStartUp();


    //判断HSE的状态

    if(HSEStatus==SUCCESS)

    {

        //库里面直接抄的,针对flash

        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

        FLASH_SetLatency(FLASH_Latency_2);


        //对AHB APB1APB2分频

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

        //使能PLL

        RCC_PLLCmd(ENABLE);


        //检测PLL状态,等待稳定跳出语句

        while( RCC_GetFlagStatus( RCC_FLAG_PLLRDY) == RESET);

        //系统时钟选为PLL

        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK );

        while(RCC_GetSYSCLKSource()!=0x08);

    }

    else

    {

    //如果配置失败,亮红灯。

    LED_R_ON();

    }

}


参考官方库中 static void SetSysClockTo72(void);
看出效果可以设置运算,延时亮灯,或者用示波器接PA8。
这里写图片描述
可以通过接PA8,配置MCO进行显示PLL,HSI,HSE以及系统时钟。
大概程序如下:


void MCO_Init()

{

    GPIO_InitTypeDef  GPIO_InitStruct;


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);


    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;

    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;

    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;


    GPIO_Init(GPIOA, &GPIO_InitStruct); 

}


主程序中加一句


RCC_MCOConfig(RCC_MCO_SYSCLK);


选择输出系统时钟
可通过改变形参RCC_PLLMul_x(名字不要改,属于官方库中定义),改变系统时钟,sysclk=外接晶振频率*RCC_PLLMul_x.
笔者通过示波器测试如下:

官方推荐的72Mhz
这里写图片描述

16倍频后的频率128Mhz
这里写图片描述

超频测试中时间久会出现芯片发热,鉴于学习板贵重,没有继续试验。既然官方推荐72Mhz,还是老老实实用72Mhz。这里作为可作为时钟配置进行练习也是可以的。

关键字:stm32  频率 引用地址:stm32的超频实验

上一篇:一个关于STM32内部USART的波特率配置话题
下一篇:STM32串口发送数据第一个字节丢失问题

推荐阅读最新更新时间:2024-11-11 12:23

STM32之寄存器开发
首先克服心理作用,不要总是默认寄存器开发难,其实寄存器开发和库函数开发所用的方法和难度是一样的, 并不难,下面用以stm32为例解释。 : 1.明确自己需要的功能(库函数开发也需要) 2.查看手册,找到功能对应的单片机资源 3.找到功能所需寄存器(库函数开发需要找到相应的功能函数) 4.根据地址每位对应的功能赋值(库函数开发需要找到相应的入口函数) 5.调试结束。 而且寄存器开发不难但是麻烦,有很多没接触过的名词(有可能是一些英文缩写),所以需要耐心,慢慢品味。如果这些名词弄清楚了,寄存器开发反而会比库函数开发简单、方便。 注:名词或需要整理的步骤太多可以手动记一下,既有利于理清思路,也方便回看时
[单片机]
详解STM32的位带操作
正在准备做毕业设计,配置LED_Config()的时候,又看到了位带操作的宏定义,我又嘀咕了,什么是位带操作,一年前在使用位带操作的时候,就查阅过好多资料,Core-M3也看过,但是对于博主这种“低能儿”来说,你不把它说的白一点,就是感觉理解的不够透彻,于是今天又一次,查阅了各种手册,也算是基本弄懂了,鉴于博主的个人特点,所以本人的介绍也会十分浅显易懂,希望能帮到各位! 首先,抛砖引玉,来两个问题: 1)为什么STM32里面会有位带操作? 2)STM32里面的位带操作是什么意思? 我也不想去弄什么官方定义了,来两个例子,相信各位心里即使不能给出一个确切的定义,也不会再去纠结这个问题, 答: 1)51单片机相信各位都用过,假设P
[单片机]
详解<font color='red'>STM32</font>的位带操作
STM32中数据类型定义 U8 U16 U32解释说明
stdint.h 这里放着C语言的标准表达方式 typedef signed char int8_t; typedef signed short int int16_t; typedef signed int int32_t; typedef signed __int64 int64_t; typedef unsigned char uint8_t; typedef unsigned short int uint16_t; typedef unsigned int uint32_t; typedef unsigned __int
[单片机]
<font color='red'>STM32</font>中数据类型定义 U8 U16 U32解释说明
STM32向量表详细分析
预备知识: DCD指令:用于分配一片连续的字存储单元(32bit),并将表达式的值初始化给该字存储单元,类似于C中定义数组并初始化。比如: DCD 0 的意思是:分配一个字存储单元,并将该单元初始化为0。 分析: 在STM32的启动文件中可以看到有如下代码: EXPORT __Vectors __Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler DCD NMIException DCD HardFaultException DCD MemManageException DCD BusFaultException DCD
[单片机]
STM32的CAN总线中继器设计及应用
引言 CAN总线是一种多主方式的串行通信总线,具有优良的稳定性、实时性、远程通信能力以及超强的硬件CRC纠错等特性;CAN总线技术的应用不再仅限于汽车行业,而是扩展到了机械、纺织、控制等行业,并被公认为是最有前途的现场总线之一。然而由于受制于CAN收发器,CAN总线通信距离和网络中节点数被分别限制在10 km和110个之内。但是在稍大型的CAN总线系统中,这往往是不够的,这时就需要用CAN总线中继器对CAN总线网络进行扩展。 CAN中继器是系统组网的关键技术设备之一,使用中继器可以提高网络设计的灵活性,并且通过中继器还可以连接两个不同波特率的CAN总线网络;在两个网络间进行数据转发,极大地扩展其使用范围。基于此,本文设计出一款
[单片机]
<font color='red'>STM32</font>的CAN总线中继器设计及应用
STM32闹钟的一个进阶使用
概述: 在使用STM32的过程中,我们在项目中可能经常会用到它的闹钟功能,但是对于刚开始接触STM32闹钟时,我就是直接设置一个闹钟,然后等待中断,有时候如果有两个闹钟,我们可以用ALARM A和B,但是有4个5个或者更多的闹钟设置,这时就不知道怎么办了。我就根据我的使用需求想了一个办法(只涉及几点几分,不考虑年月日及周几),如果你也有这样的需求,可以直接使用,如果不是,也希望可以给你留下一个思考的方向。 思路: 因为我的需求是每天的几点几分有一个闹钟,然后去处理,所以我的思路也很简单,就是将所有闹钟都注册到一个数组里面,然后换算为分钟从小到大进行排序,再根据当前时间去选择我下一个要设置的闹钟是哪一个,比如我已经注册了3个闹
[单片机]
STM32——pwm控制LED
pwm.c #include pwm.h /******************************************************************************* * 函 数 名 : TIM3_CH1_PWM_Init * 函数功能 : TIM3通道1 PWM初始化函数 * 输 入 : per:重装载值 psc:分频系数 * 输 出 : 无 *******************************************************************************/ void TIM3_CH1_PWM_Init(u1
[单片机]
STM32串口通信基础:单片机串口与PC串口通信的连接方式
按照数据传送方向分类 单工:数据传输只支持数据在一个方向上传输 半双工:允许数据在两个方向上传输。但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;它不需要独立的接收端和发送端,两者可以合并一起使用一个端口 全双工:允许数据同时在两个方向上传输。因此,全双工通信是两个单工通信方式的结合,需要独立的接收端和发送端 分别如下图中的a、b、c所示。 按照通信方式分类 同步通信:带时钟同步信号传输。比如:SPI,IIC通信接口 异步通信:不带时钟同步信号。比如:UART(通用异步收发器),单总线 在同步通讯中,收发设备上方会使用一根信号线传输信号,在时钟信号的驱动下双方进行协调,同步数据。例如,通讯中
[单片机]
<font color='red'>STM32</font>串口通信基础:单片机串口与PC串口通信的连接方式
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved