历史上的今天

今天是:2024年12月26日(星期四)

正在发生

2018年12月26日 | STM32中通过固件库自己编写系统时钟配置文件

发布者:码农创想家 来源: eefocus关键字:STM3  固件库  系统时钟  配置文件 手机看文章 扫描二维码
随时随地手机看文章

使用HSE配置系统时钟

因为STM工程使用固件库,进入main函数时都已配置好时钟,所以我们自己编写时钟配置文件首先需要复位RCC寄存器

使能HSE

判断HSE是否启动成功

使能预取指

设置FLASH等待周期

配置3条总线的倍频因子

配置锁相环,使能锁相环

等待锁相环稳定

选择锁相环输出为系统时钟,并等待其稳定

void HSE_sysclock_config( uint32_t  RCC_PLLMul_x )

{

    //先复位RCC寄存器

    RCC_DeInit();


    /*使用HSE配置系统时钟*/


    //使能HSE

    RCC_HSEConfig( RCC_HSE_ON );


    //检测HSE是否启动成功

    if ( SUCCESS == RCC_WaitForHSEStartUp() )

    {

        //使能预取指,这是FLASH固件中的函数

        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);


        //设置FLASH等待周期。  因为倍频成72M 所以等待两个周期。

        FLASH_SetLatency(FLASH_Latency_2);  


        //配置三个总线的倍频因子

        //HCLK --> AHB 最大为72M,所以只需要1分频

        RCC_HCLKConfig(RCC_SYSCLK_Div1);

        //PCLK1 --> APB1 最大为36M,所以要2分频

    RCC_PCLK1Config(RCC_HCLK_Div2);

        //PCLK2 --> APB2 最大为72M,所以只需要1分频

    RCC_PCLK2Config(RCC_HCLK_Div1);


        //先配置锁相环 PLLCLK = HSE * 倍频因子

        RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_x);


        //使能PLL

        RCC_PLLCmd(ENABLE);


        //等待PLL稳定

        while ( RESET == RCC_GetFlagStatus(RCC_FLAG_PLLRDY) );


        //选择系统时钟(选择锁相环输出)

        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

        //等待选择稳定

        while ( 0x08 != RCC_GetSYSCLKSource() );

    }

    else

    {

        //HSE启动失败,用户自己编写补救措施

    }


}



使用HSI配置系统时钟

因为STM工程使用固件库,进入main函数时都已配置好时钟,所以我们自己编写时钟配置文件首先需要复位RCC寄存器!

使能HSI

判断HSI是否启动成功

使能预取指

设置FLASH等待周期

配置3条总线的倍频因子

配置锁相环,使能锁相环

等待锁相环稳定

选择锁相环输出为系统时钟,并等待其稳定

void HSI_sysclock_config( uint32_t  RCC_PLLMul_x )

{

    __IO uint32_t HSIStatus = 0;


    //先复位RCC寄存器

    RCC_DeInit();


    /*使用HSI配置系统时钟*/


    //使能HSI

    RCC_HSICmd(ENABLE);


    //检测HSE是否启动成功

    HSIStatus = RCC->CR & RCC_CR_HSIRDY;

    if ( RCC_CR_HSIRDY == HSIStatus )

    {

        //使能预取指,这是FLASH固件中的函数

        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);


        //设置FLASH等待周期。  因为倍频成72M 所以等待两个周期。

        FLASH_SetLatency(FLASH_Latency_2);  


        //配置三个总线的倍频因子

        //HCLK --> AHB 最大为72M,所以只需要1分频

        RCC_HCLKConfig(RCC_SYSCLK_Div1);

        //PCLK1 --> APB1 最大为36M,所以要2分频

    RCC_PCLK1Config(RCC_HCLK_Div2);

        //PCLK2 --> APB2 最大为72M,所以只需要1分频

    RCC_PCLK2Config(RCC_HCLK_Div1);


        //先配置锁相环 PLLCLK = HSE * 倍频因子

        RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_x);


        //使能PLL

        RCC_PLLCmd(ENABLE);


        //等待PLL稳定

        while ( RESET == RCC_GetFlagStatus(RCC_FLAG_PLLRDY) );


        //选择系统时钟(选择锁相环输出)

        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

        //等待选择稳定

        while ( 0x08 != RCC_GetSYSCLKSource() );

    }

    else

    {

        //HSI启动失败,用户自己编写补救措施

    }


}

关键字:STM3  固件库  系统时钟  配置文件 引用地址:STM32中通过固件库自己编写系统时钟配置文件

上一篇:STM32—RCC时钟
下一篇:STM32 RTC 读写不正确

推荐阅读

OLED面板凭借在色彩、对比度、功耗等方面的优势,已经逐渐在高端手机、电视上普及,碾压传统LCD,但却一直无法进入PC显示器市场。  虽然也有一些笔记本用上了OLED屏幕,但无奈产品稀少,价格也偏贵,而且OLED固有特性也决定了它很难满足游戏、设计等用户的需求,诸如烧屏、色彩偏差、寿命短等。  戴尔曾在2016年推出过一款OLED面板的UltraSharp UP301...
摘 要本系统是采用单片机AT89C51作为本设计的核心元件。利用7段共阳LED作为显示器件。在此设计中共接入了2个7段共阳LED显示器,用于记录该队的分数, 2个LED显示器显示范围可达到0~99分,基本满足赛程需要。当比赛队得1分时,按下S1键加1分,得2分时按S2键加2分,得3分时按下S3键加3分。如分数计错需减分时,每按一次S4键减1分。采用单片机控制是这个系...
12月25日,上交所正式受理浙江博蓝特半导体科技股份有限公司(简称“博蓝特”)的科创板IPO申请。据悉,博蓝特成立于2012年,是一家快速成长的国家高新技术企业。天眼查显示,博蓝特主营业务包括半导体照明衬底、外延片和芯片、抛光片、激光晶体、半导体器件、电子元器件、光电子器件、半导体照明检测设备、自动化设备和工业机器人的研发、生产、销售。客...
12月24日,浙江凯芯微电子有限公司获得“乌镇之光”超算中心南侧35.6亩地块,将用于建设高性能集成电路测试设备和集成电路测试服务项目。嘉兴在线消息显示,凯芯微相关负责人介绍,企业近年来聚焦于集成电路测试领域,一方面自行研发集成电路检测技术和设备,另一方面则购置进口集成电路测试设备,用于给国内集成电路厂家提供测试服务,逐步形成国产替代,...

史海拾趣

问答坊 | AI 解惑

信号处理单片机及应用 上册 PDF

信号处理单片机及应用 上册 这本书还是不错,分享一下…

查看全部问答∨

ds18b20

本帖最后由 paulhyde 于 2014-9-15 09:18 编辑 ds18b20 ds18b20  …

查看全部问答∨

单片机驱动继电器问题,加光耦是否多余

用单片机一个口接一个光耦TLP521,然后光耦接三极管,三极管驱动继电器,继电器和光耦的右端都是一个电源,单片机和光耦的左端是一个电源。 问题1:这样的设计对提高系统稳定性有效果么 问题2:其中光耦是不是多此一举,可以去掉呢 这里ZC0是接 ...…

查看全部问答∨

有偿寻找wince高手

目前手头有个项目使用omap3530做了一个显示器,采用wince系统,使用的是广州英码的核心板,本来厂家给定制内核但是不知为什么系统总是不稳定,现在想找一个熟悉wince的高手(要求人在北京)帮忙搞清楚什么原因,或者重新裁剪一下bsp,系统功能很简 ...…

查看全部问答∨

Linux下的camera驱动开发

哪位在Linux下有做过camera的驱动开放,请进来指点一下! 我是用开源的Moto 代码做的,始终会出现这个问题,I2C-CAMERA in fun:i2c_ov9640_read i2c write error code =-121,请帮忙分析一下是什么原因!…

查看全部问答∨

变频器整流回路中泵升电压是什么?

目前使用的电压型变频器,当所带电动机减速制动时,电动机进入发电制动状态,其能量通过逆变电路中的反馈二极管流入整流回路输出的直流中间回路,使直流电压升高产生过电压(泵升电压),而导致器件击穿。为了限制泵升电压,在直流侧电容两端并接功 ...…

查看全部问答∨

【为C2000做贡献】各种电机的DSP控制程序

涵盖不同电机的DSP程序。不过里面好多都是2407的代码,大家要修改下才能给2812用。 …

查看全部问答∨

有没有这样的DC-DC芯片?

输入能够承受比较大的电流,输入电压大概是在90V以上,要求能够降压到12V(加上滤波电容后这个电压用来作为电源) 我查到了好几本书,都没有发发现合适的集成芯片。…

查看全部问答∨

绑定机制(转自天运科技)

一、绑定(Binding)绑定是一种控制两个或者多个设备应用层之间信息流传递的机制。在ZigBee2006发布版本中,它被称为源绑定,所有的设备都可以执行绑定机制。绑定允许应用程序发送一个数据包而不需要知道目标设备的短地址(此时将目标设备的短地址设 ...…

查看全部问答∨

菜鸟求教,如何判断一个gpio口状态

一个自学的菜鸟,在程序中加入了controlsuit里面sample的一些片段(前面的设置没有列出来)     GPIO_setPullUp(myGpio, GPIO_Number_6, GPIO_PullUp_Enable);     GPIO_setHigh(myGpio, GPIO_Number_6);     GPIO_ ...…

查看全部问答∨
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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