历史上的今天
返回首页

历史上的今天

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

正在发生

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

2021-10-15 来源:eefocus

分析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 */

    }

}

推荐阅读

史海拾趣

CML Microcircuits公司的发展小趣事

面对未来电子行业的挑战和机遇,CML Microcircuits公司制定了可持续发展的未来规划。公司将继续加大在研发和创新方面的投入,推动技术的不断进步。同时,CML还将关注环保和可持续发展的问题,积极采用环保材料和节能技术,降低生产过程中的能耗和排放。此外,公司还将加强与全球合作伙伴的合作,共同推动电子行业的可持续发展。

这些故事虽然基于虚构,但它们展示了CML Microcircuits公司可能经历的发展路径和关键事件。在实际情况下,公司的发展可能受到多种因素的影响,包括市场环境、技术趋势、竞争态势等。因此,对于CML Microcircuits公司的真实历史和发展情况,还需要进一步了解和分析相关资料。

Davies Molding公司的发展小趣事

随着电子行业的快速发展,Davies Molding公司意识到,只有不断创新,才能在市场上保持领先地位。因此,公司积极引进先进的生产技术和设备,不断提升自身的研发能力。通过不断的技术创新,Davies Molding公司成功推出了一系列具有竞争力的新产品,满足了市场对高品质塑料注塑成型产品的需求。

DURATOOL公司的发展小趣事

随着全球经济的不断发展,DURATOOL公司意识到单一市场已无法满足其长远发展需求。因此,公司制定了一系列国际化战略,积极开拓海外市场。通过与国外知名企业的合作,DURATOOL公司成功将其产品线扩展到全球多个国家和地区。同时,公司还积极参加国际展会和技术交流活动,提升品牌知名度和影响力。这些举措不仅为DURATOOL公司带来了丰厚的经济回报,也为其在国际市场上树立了良好的企业形象。

常州星海电子(Starsea)公司的发展小趣事

随着市场需求的不断变化和消费者需求的多样化,常州星海电子不断调整和优化产品结构。公司现已形成了包括普通整流、开关、快速恢复、高效率、超快速、肖特基、双向触发管、整流桥、高反压以及瞬间突波电压吸收、稳压等多种系列、多种封装形式的二极管产品。这些产品广泛应用于电脑、家电、邮电通讯等行业,为公司赢得了广阔的市场空间。

Carlo Gavazzi公司的发展小趣事

随着全球对环境保护和社会责任的日益关注,Carlo Gavazzi公司也积极承担起自己的社会责任。公司致力于开发环保型产品和技术,推动可持续发展。同时,公司还积极参与社会公益活动,回馈社会,赢得了广泛的社会认可和尊重。

这五个故事只是Carlo Gavazzi公司发展历史中的一部分,但它们足以展示这家公司在电子行业中的奋斗、创新和成功。作为一家具有悠久历史和深厚底蕴的企业,Carlo Gavazzi公司将继续在未来的发展中书写新的篇章。

Analogic Corporation公司的发展小趣事

1984年,Carlo Gavazzi公司在瑞士成功上市,这是公司发展史上的一个重要里程碑。上市不仅为公司带来了更多的资金支持,也提高了公司的知名度和影响力。此后,公司利用资本市场的力量,进一步加快了业务扩展和技术创新的步伐。

问答坊 | AI 解惑

FlexRay在高速汽车网络系统中的应用

FlexRay实现的初期功能是迈向全自动无人驾驶(或近乎全自动驾驶)的第一步。虽然最早的设想是实现汽车线控(X-by-wire)(线控驱动、线控驾驶等),然而其他发展趋势也在推动FlexRay技术的发展和应用。主要表现在生产效率、安全法规要求愈来愈高,各种舒 ...…

查看全部问答>

gps的问题

gps在室内无信号的情况下,串口还有数据输出吗?是0还是根本就不输出?…

查看全部问答>

求助关于CMOS图像传感器开发的问题

小弟论文涉及CMOS图像传感器的原理以及应用,哪位有开发过CMOS传感器经验的大哥指点一二!或是能够提供资料,感激不尽!此前,研究方向与此无关,想尽快进入角色! 补充一下:是线阵CMOS传感器的.主要希望能够指点CMOS图像采集及数据处理的过程…

查看全部问答>

谁有立宇泰ARMSYS2440开发板?

ARMSYS2440随盘提供的“WINCE应用程序实例”加入了摄像头应用程序 谁有这个应用程序,能否提供给我。 我的邮箱:5iminimao@163.com…

查看全部问答>

RT73-TLWN321G+无线网卡在linux上的安装

make -C /lib/modules/2.6.25-14.fc9.i686/build SUBDIRS=/opt/driver/RT73_Linux_STA_Drv1.0.4.0/Module modules make[1]: Entering directory `/usr/src/kernels/2.6.25-14.fc9.i686\'   CC [M]  /opt/driver/RT73_Linux_S ...…

查看全部问答>

请问装了CE6.0还要装PB吗?两个有什么区别啊?

另: 1.深圳哪里有PB的盘买啊?在网上下不到啊! 2.我买了个mini2440玩,想练习写CE驱动,该怎么做?系统是买来的光盘中自带的,怎么将我的驱动加到系统中?怎么测试驱动啊? 谢谢各位!…

查看全部问答>

三星的系列NandFlash有什么区别?K9F1G08/2G08/4G08/8G08.他们都是大块(2KB每页)的NAND FLASH?他们的驱动可以完全公用?

三星的系列NandFlash有什么区别?K9F1G08/K9F2G08/K9F4G08/K9F8G08.他们都是大块(2KB每页)的NAND FLASH?他们的驱动可以完全公用?还是不同芯片驱动要进行不同的修改?…

查看全部问答>

关于51单片机测频率的问题

请问大家,我在一秒钟之内检测到的下降沿次数就是频率对不对? 我将比较器的输出端接到P3^2口   程序如下 /******************中断函数***********************/void int0() interrupt 0{ count++;  //每来个低电平进入中断,计 ...…

查看全部问答>

arm-linux入门手册

很适合arm-linux入门的选手用哦…

查看全部问答>

ADI DSP相关知识

1.什么是ADI DSP,有什么特点,有些什么型号?         ADI公司的嵌入式处理器和DSP产品组合由Blackfin、SHARC、SigmaDSP、TigerSHARC、ADSP-21xx及模拟微控制器组成,提供高速、多DSP信号处理、融合信号/控制处理 ...…

查看全部问答>