stm32专题五:时钟树(二)系统配置时钟函数分析

发布者:码字狂人最新更新时间:2021-10-15 来源: 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系统时钟树分析

推荐阅读最新更新时间:2024-11-10 11:45

STM32内存分布学习
1.STM32内存分布 下图是一张stm32的内存映射图,其中代码区是从0x0800 0000开始的,他的结束地址是0x0800 0000加上实际芯片的flash大小,他的ram的起始地址是0x2000 0000,然后结束地址依然是加上芯片实际的ram大小。 2.单片机中RAM\ROM\FLASH区别 1.RAM(Random Access Memory) 特点: 1. 掉电丢失数据; 2. 随机存取; 分类: 静态RAM/(SRAM) :不需要刷新电路保持数据,贵快,cpu的一级二级缓存; 动态RAM/(DRAM):需要刷新电路保持数据,比SRAM慢,比任何ROM快,计算机内存; 2.ROM(Read Onl
[单片机]
STM32外部中断易出错总结
前言:这些问题都是我之前在工作中遇到的,后来觉得需要总结,自己记忆不好,所以在这个给自己打个mark。 一:触发方式 STM32 的外部中断是通过边沿来触发的,不支持电平触发; 二:外部中断分组 STM32 的每一个GPIO都能配置成一个外部中断触发源,STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB0,PC0,PD0,PE0,PF0,PG0为第一组,那么依此类推,我们能得出一共有16 组,STM32 规定,每一组中同时只能有一个中断触发源工作,那么,最多工作的也就是16个外部中断。 STM32 分组和对应中断处理函数分配: 管脚 中断标志 中断处理函
[单片机]
STM32之3路ADC同步转换
初识ADC有一种茫然的状态同时又会觉得它的功能强大,在stm32中有3个ADC,每个ADC都有16个转换通道,由此可知它的强大。首先通过它的引脚功能图可以看出每个引脚所对应的ADC转换通道。这样在编写程序的时候就不会把通道搞错。 有了上述的了解之后呢,还要记住ADC所能检测的电压范围是0~3.3V,如果检测的电压值大于3.3V就会把ADC烧坏,还有就是ADC转换的时钟频率,在72M的主控CPU中它的转换频率不能大于14M也就是6分频否则检测的值会不准确。采样周期为1.5个时钟周期。stm32的ADC转换有两种通道,规则通道和注入通道,注入通道可以抢占式地打断规则通道的采样,执行注入通道采样后,再执行之前的规则通道采样,和中断类
[单片机]
<font color='red'>STM32</font>之3路ADC同步转换
STM32的IO口输入输出模式的理解
最近在看数据手册的时候,发现在Cortex-M3里,对于GPIO的配置种类有8种之多: (1)GPIO_Mode_AIN 模拟输入 (2)GPIO_Mode_IN_FLOATING 浮空输入 (3)GPIO_Mode_IPD 下拉输入 (4)GPIO_Mode_IPU 上拉输入 (5)GPIO_Mode_Out_OD 开漏输出 (6)GPIO_Mode_Out_PP 推挽输出 (7)GPIO_Mode_AF_OD 复用开漏输出 (8)GPIO_Mode_AF_PP 复用推挽输出 一、推挽输出:可以输出高、低电平,连接数字器件;推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止。高
[单片机]
<font color='red'>STM32</font>的IO口输入输出模式的理解
C语言基础知识科普
C语言是单片机开发中的必备基础知识,本文列举了部分STM32学习中比较常见的一些C语言基础知识。 1 位操作 下面我们先讲解几种位操作符,然后讲解位操作使用技巧。C语言支持以下六种位操作:79c55d0c-080b-11ed-ba43-dac502259ad0.png 下面,重点讲解一下位操作在单片机开发中的一些实用技巧。1.1 在不改变其他位的值的状况下,对某几个位进行设值 这个场景在单片机开发中经常使用,方法就是我们先对需要设置的位用&操作符进行清零操作,然后用 | 操作符设值。 比如,我要改变GPIOA的状态,可以先对寄存器的值进行&清零操作:79dc505c-080b-11ed-ba43-dac5
[单片机]
stm32之定时器运用———呼吸灯
呼吸灯原理 1.在模拟电路中,呼吸灯的实现可以通过一个呈现正弦的电压控制,这个电压是连续变化的,所以肉眼看上去就是逐渐变暗,逐渐变亮。 2.而在数字电路中如何实现这种效果呢?就需要通过pwm,也就是脉冲宽度调制,将模拟量转换为数字量。只要能够用连续电压控制的东西都是可以通过pwm方式来驱动,效果是一样的。 3. 上面一块区域的面积等于对应下来的矩形的面积,当然,取得块的间隔越小(即pwm的周期越小),效果越好。这时,如果周期定了,就可以通过改变占空比来实现面积的改变,从而模拟出上面那张图的电压的连续变化。 注意:pwm波的高度是一定的,所以只能通过改变宽度(占空比)来实现面积的改变 4.说明:观察这张图,会发现
[单片机]
<font color='red'>stm32</font>之定时器运用———呼吸灯
一种STM32微控制器处理电机控制的设计和实现
变频器是利用电力半导体器件的通断作用将工频电源变换为另一频率的电能控制装置,能实现对交流异步电机的软起动、变频调速、提高运转精度、改变功率因数、过流/过压/过载保护等功能。变频器集成了高压大功率晶体管技术和电子控制技术,得到广泛应用。变频器的作用是改变交流电机供电的频率和幅值,因而改变其运动磁场的周期,达到平滑控制电动机转速的目的。变频器的出现,使得复杂的调速控制简单化,用变频器+交流鼠笼式感应电动机组合替代了大部分原先只能用直流电机完成的工作,缩小了体积,降低了维修率,使传动技术发展到新阶段。本文将探讨基于ARM的标准微控制器如何在一个被DSP和FPGA长期垄断的市场上打破复杂的控制模式,我们将以意法半导体的基于Cortex-M
[单片机]
一种<font color='red'>STM32</font>微控制器处理电机控制的设计和实现
keil环境下IAP使用中 stm32中M0 M3中断偏移对比
M3中断偏移: 当加入IAP 程序之后,程序运行流程如图所示:默认情况下,main flash memory(0x0800 0000) is selected boot space,即映射为 0x0000 0000。相当于从物理地址0x0800 0000启动程序。 00 在main函数的执行过程中如果出现中断请求,PC指针扔强制跳转到地址0x0800 0004的中断向量表处,而不是新程序的中断向量表,如图标号4所示。在通过VTOR的偏移地址再跳到新的偏移向量处(即APP的中断向量),执行APP的中断程序,如图标号5所示。中断程序执行完成后,返回main函数继续运行,如图标号6所示。 我们知道 IAP 程序必须满足两个要求:
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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