历史上的今天

今天是:2024年10月15日(星期二)

正在发生

2021年10月15日 | stm32专题五:时钟树(二)系统配置时钟函数分析

发布者:码字狂人 来源: eefocus关键字:stm32  时钟树  系统配置 手机看文章 扫描二维码
随时随地手机看文章

分析stm32的系统时钟函数,对于我们实现自定义时钟配置非常重要,以下是标准库函数中的时钟配置函数。


static void SetSysClockTo72(void)

{

    __IO uint32_t StartUpCounter = 0, HSEStatus = 0;

 

    /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/

    /* Enable HSE */

    // 使能HSE

    RCC->CR |= ((uint32_t)RCC_CR_HSEON);

 

    /* Wait till HSE is ready and if Time out is reached exit */

    // 等待HSE就绪并做超时处理

    do

    {

        HSEStatus = RCC->CR & RCC_CR_HSERDY;

        StartUpCounter++;

    } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

    /* 分析:当不超过超时时间时,后面这部分一直为1;因此,只要HSERDY了,立马跳出循环

       如果HSE故障,则会一直等到设定的超时时间,然后跳出 */

 

    // 上面只是跳出循环,这里判断HSE是否真正启动成功

    if ((RCC->CR & RCC_CR_HSERDY) != RESET)

    {

        HSEStatus = (uint32_t)0x01;

    }

    else

    {

        HSEStatus = (uint32_t)0x00;

    }

 

    // HSE启动成功,程序继续往下执行

    if (HSEStatus == (uint32_t)0x01)

    {

        /* Enable Prefetch Buffer */

        // 使能预取指,CPU运行过程:取指令-执行指令-取指令-执行指令

        // 预取指类似于8086的指令队列,会取出当前和接下来要执行的多条指令,送入指令队列缓冲

        FLASH->ACR |= FLASH_ACR_PRFTBE;

 

        /* Flash 2 wait state */

        /* CPU从Flash取指令的时间间隔,72MHz时要等待两个时钟周期

           等待的原因时,flash运行速度慢,CPU如果一直等待flash就绪,则会浪费很多时间效率低下

           因此等待两个时钟周期,待flash就绪然后读取指令到预取指缓存 */

        FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);

        FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;

 

 

        // 配置AHB APB1 APB2总线的分频因子

        /* HCLK = SYSCLK = 72M*/

        RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;

 

        /* PCLK2 = HCLK = 72M */

        RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;

 

        /* PCLK1 = HCLK = 36M */

        RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;

 

        /*  PLL configuration: PLLCLK = HSE * 9 = 72 MHz */

// 配置锁相环输入为HSE不分频

        RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |

                                            RCC_CFGR_PLLMULL));

// 配置PLL倍频因子为9

        RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);

 

        /* Enable PLL */

        // 使能PLL锁相环

        RCC->CR |= RCC_CR_PLLON;

 

        /* Wait till PLL is ready */

// 等待锁相环准备就绪

        while((RCC->CR & RCC_CR_PLLRDY) == 0)

        {

        }

 

        /* Select PLL as system clock source */

// 选择PLLCLK作为系统时钟

        RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));

        RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;

 

        /* Wait till PLL is used as system clock source */

// 等待PLLCLK切换成功

        while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)

        {

        }

    }

 

    // 如果HSE启动失败,在这里填入错误处理代码

    else

    {   /* If HSE fails to start-up, the application will have wrong clock

             configuration. User can add here some code to deal with this error */

    }

}

关键字:stm32  时钟树  系统配置 引用地址:stm32专题五:时钟树(二)系统配置时钟函数分析

上一篇:STM32时钟树解析
下一篇:STM32系统时钟树分析

推荐阅读

专注于引入新品并提供海量库存的电子元器件分销商贸泽电子 (Mouser Electronics) 即日起备货SanDisk的 iNAND® 8521嵌入式闪存 (EFD)。iNAND 8521 EFD采用3D NAND技术和UFS 2.1快速接口,具有出众的读写性能,可为大多数轻薄型计算设备和数据密集型移动设备提供存储解决方案。 贸泽电子供应的SanDisk iNAND 8521 EFD是尺寸为11.5 × 1...
  服务机器人的主要应用领域   服务机器人是一类用以辅助人们日常工作、生活、休闲,以及帮助残疾人与老年人的机器人系统。在工业机器人系统中,机器人的任务是完成高质量、高一致性的生产任务。服务机器人与之不同的是,工业机器人通常工作在有人的空间或者会直接同人类协作工作,服务机器人通常从事专业服务和个人服务两种工作。   专业服务机...
电池只有处于最佳温度时,才能以最大功率充电。据外媒报道,保时捷工程技术公司开发可以预测行程的热管理功能,从而确保储能装置在充电时处于最佳温度范围,以便更快、更安全地充电。(图片来源:保时捷)保时捷运用新技术,通过软件和基于人工智能的算法,来预测整个行程并控制热量组件,以使电池处于最佳温度,还可以防止不必要的加热或冷却,从而节省能...
贸泽备货Analog Devices LTC2688 16通道DAC 助力光纤网络和自动化应用2021年10月15日 – 专注于引入新品并提供海量库存的电子元器件分销商贸泽电子 (Mouser Electronics) 即日起开始供应Analog Devices (ADI) 的LTC2688 SoftSpan™数模转换器 (DAC)。LTC2688为工程师提供了各种光纤网络、自动化和电信应用所需的高级功能、效率和可编程性。 ...

史海拾趣

问答坊 | AI 解惑

收集的各省试题,相当不错

本帖最后由 paulhyde 于 2014-9-15 09:25 编辑 好不容易收集的各省试题,相当不错  …

查看全部问答∨

ce6.0 r3 + s3c2450 运行 coreplayer ,串口输出报错信息

Exception \'Undefined Instruction\' (1): Thread-Id=04c80006(pth=82b474d4), Proc-Id=04c70006(pprc=87ac0bac) \'PLAYER.EXE\', VM-active=04c70006(pprc=87ac0bac) \'PLAYER.EXE\' PC=00079ba0(PLAYER.EXE+0x00069ba0) RA=000797c4(PLAYER.EXE ...…

查看全部问答∨

SMDK2440bsp for WINDOW MOBILE移植问题?

    我是wince菜鸟经过几个月的潜水修炼中自觉可以出来提些问题。最近公司将上马window mobile所以我先找公司借了块扬创的开发板来移植练手。     我所用的开发板配置: (1)S3C2440A:32bit ARM920T 内核,标称工作频率:400 ...…

查看全部问答∨

急求专家解决!从计算机体系结构的角度比较Dell PowerEdge R200和HP ProLiant DL 145 G3 411596-AA1两台服务器

急求牛人协助!!! 从计算机体系结构的角度比较Dell PowerEdge R200和HP ProLiant DL 145 G3 411596-AA1两台服务器 网上很少有比较专业的资料,希望高手能出手帮忙。 分析越详尽越好,小弟不甚感激! …

查看全部问答∨

wince 时间问题

更改2410的BSP,具体为: 在文件Platform\\SMDK2410\\kernel\\hal\\oemioctl.c中将     case IOCTL_HAL_INIT_RTC:      // The kernel has detected a cold-boot.           ...…

查看全部问答∨

AVRMEGA8 串口求救

串口求救 #include <avr/io.h> #include <util/delay.h> #include <iom8v.h> #include "IPGA204.h" #define fosc 8000000//晶振8M #define baud 9600//波特率9600 void putchar(unsigned char c); unsigned char getchar(v ...…

查看全部问答∨

【TI学习】从入门到熟悉lm3s6911(新增加中文资料)

关于lm3s6911的学习笔记          我所使用的板子是之前做一个“基于ARM的RFID读卡器”项目留下来的,当时对于ARM,cortex-M3,TI都了解甚少,可以说是就听过这个名字。 当时就只是看文档,看着那些英文头都 ...…

查看全部问答∨

昨天见到了4558的发明者

背后的故事很多,梳理下给大家发布。首先我得调查下用过4558的童鞋多么?…

查看全部问答∨

9B92不能中断;

中断已经在中断向量表中注册。 代码如下: void UART1IntHandler(void); void uartInit(void); //  UART1初始化 void uartInit(void) {     SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1);      &n ...…

查看全部问答∨

LED驱动电源的隔离与非隔离之分

     目前在一般的LED照明市场上,存在非隔离设计和隔离型驱动电源之分。非隔离设计仅限于双绝缘产品,例如灯泡的替代产品,其中LED和整个产品都集 成并密封在非导电塑料中,因此,最终用户并没有任何触电的危险。二级产品都 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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