stm32 rcc 时钟

发布者:SparkCrafter最新更新时间:2017-01-03 来源: eefocus关键字:stm32  rcc  时钟 手机看文章 扫描二维码
随时随地手机看文章

STM32中在使用任何一个外设都必须打开相应的时钟,所以我从STM32的时钟学起。

RCC时钟

在STM32中有5个时钟源:①、HSI是高速内部时钟,RC震荡器,频率为 8MHz。②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。③、LSI是低速内部时钟,RC振荡器,频率为40kHz。④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HIS/2、HSE或HSE/2。倍频可选择为2~16倍,但其输出频率最大不得超过72MHz。

系统时钟SYSCLK,它是供STM32中绝大部分器件工作的时钟源,系统时钟可选择为PLL输出、HSI或者HSE。系统时钟的做大频率为72MHz,它通过AHB分频器分频后送给个模块使用,AHB分频器可选择1、2、4、8、16、32、64、128、256、512分频。AHB分频器输出的时钟送给5大模块使用:

1.       送给AHB总线、内核、内存和DMA使用的HCLK时钟。2.       通过8分频后送给Cortex的系统定时器时钟。3.       直接送给Cortex的空闲运行时钟PCLK。4.       送给APB1分频器。APB1分频器可选择1、2、4、8、16分频,其输出一路供APB1外设使用(PCLK1,最大频率36MHz),另一路送给定时器(Timer)2、3、4倍频器使用。该倍频器可选择1或者2倍频,时钟输出供定时器2、3、4使用。5.      送给APB2分频器。APB2分频器可选择1、2、4、8、16分频,其输出一路供APB2外设使用(PCLK2,最大频率72MHz),另一路送给定时器(Timer)1倍频器使用。该倍频器可选择1或者2倍频,时钟输出供定时器1使用。另外,APB2分频器还有一路输出供ADC分频器使用,分频后送给ADC模块使用。ADC分频器可选择为2、4、6、8分频。连接在APB1(低速外设)上的设备有:电源接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3、SPI2、窗口看门狗、Timer2、Timer3、Timer4。连接在APB2(高速外设)上的设备有:UART1、SPI1、Timer1、ADC1、ADC2、所有普通IO口、第二功能IO口。寄存器描述:typedef struct 

vu32 CR;                  //HSI,HSE,CSS,PLL等的使能 
vu32 CFGR;              //PLL等的时钟源选择以及分频系数设定
vu32 CIR;                //清除/使能时钟就绪中断
vu32 APB2RSTR;      //APB2线上外设复位寄存器
vu32 APB1RSTR;      //APB1线上外设复位寄存器
vu32 AHBENR;         //DMA,SDIO等时钟使能
vu32 APB2ENR;       //APB2线上外设时钟使能
vu32 APB1ENR;      //APB1线上外设时钟使能
vu32 BDCR;           //备份域控制寄存器
vu32 CSR;            
} RCC_TypeDef;

时钟控制寄存器(RCC_CR)

 

31~26

25

24

23~20

19

18

17

16

保留

PLLRDY

PLLON

保留

CSSON

HSEBYP

HSERDY

HSEON

 

eg:RCC->CR|=0x00010000;   //外部高速时钟使能HSEON

 RCC->CR|=0x01000000;   //使能PLLON

 RCC->CR>>25;     //等待PLL锁定

时钟配置寄存器(RCC_CFGR)

 

31:27

26:24

23

22

21:18

17

16

保留

MCO[2:0]

保留

USBPRE

PLLMUL[3:0]

PLLXTPRE

PLLSRC

15:14

13:11

10:8

7:4

3:2

1:0

ADCPRE[1:0]

PPRE2[2:0]

PPRE1[2:0]

HPRE[3:0]

SWS[1:0]

SW[1:0]

 

 

 

位26:24

MCO: 微控制器时钟输出 (Microcontroller clock output)

由软件置’1’或清零。

0xx:没有时钟输出;

100:系统时钟(SYSCLK)输出;

101:内部RC振荡器时钟(HSI)输出;

110:外部振荡器时钟(HSE)输出;

111:PLL时钟2分频后输出。

位22

USBPRE:USB预分频 (USB prescaler)

由软件置’1’或清’0’来产生48MHz的USB时钟。在RCC_APB1ENR寄存器中使能USB时钟之前,必须保证该位已经有效。如果USB时钟被使能,该位不能被清零。

0:PLL时钟1.5倍分频作为USB时钟

1:PLL时钟直接作为USB时钟

位21:18

PLLMUL:PLL倍频系数 (PLL multiplication factor)

由软件设置来确定PLL倍频系数。只有在PLL关闭的情况下才可被写入。

注意:PLL的输出频率不能超过72MHz

0000:PLL 2倍频输出 1000:PLL 10倍频输出

0001:PLL 3倍频输出 1001:PLL 11倍频输出

0010:PLL 4倍频输出 1010:PLL 12倍频输出

0011:PLL 5倍频输出 1011:PLL 13倍频输出

0100:PLL 6倍频输出 1100:PLL 14倍频输出

0101:PLL 7倍频输出 1101:PLL 15倍频输出

0110:PLL 8倍频输出 1110:PLL 16倍频输出

0111:PLL 9倍频输出 1111:PLL 16倍频输出

位17

PLLXTPRE:HSE分频器作为PLL输入 (HSE divider for PLL entry)

由软件置’1’或清’0’来分频HSE后作为PLL输入时钟。只能在关闭PLL时才能写入此位。

0:HSE不分频

1:HSE 2分频

位16

PLLSRC:PLL输入时钟源 (PLL entry clock source)

由软件置’1’或清’0’来选择PLL输入时钟源。只能在关闭PLL时才能写入此位。

0:HSI振荡器时钟经2分频后作为PLL输入时钟

1:HSE时钟作为PLL输入时钟。

位15:14

ADCPRE[1:0]:ADC预分频 (ADC prescaler)

由软件置’1’或清’0’来确定ADC时钟频率

00:PCLK2 2分频后作为ADC时钟

01:PCLK2 4分频后作为ADC时钟

10:PCLK2 6分频后作为ADC时钟

11:PCLK2 8分频后作为ADC时钟

位13:11

PPRE2[2:0]:高速APB预分频(APB2) (APB high-speed prescaler (APB2))

由软件置’1’或清’0’来控制高速APB2时钟(PCLK2)的预分频系数。

0xx:HCLK不分频

100:HCLK 2分频

101:HCLK 4分频

110:HCLK 8分频

111:HCLK 16分频

位10:8

PPRE1[2:0]:低速APB预分频(APB1) (APB low-speed prescaler (APB1))

由软件置’1’或清’0’来控制低速APB1时钟(PCLK1)的预分频系数。

警告:软件必须保证APB1时钟频率不超过36MHz。

0xx:HCLK不分频

100:HCLK 2分频

101:HCLK 4分频

110:HCLK 8分频

111:HCLK 16分频

位7:4

HPRE[3:0]: AHB预分频 (AHB Prescaler)

由软件置’1’或清’0’来控制AHB时钟的预分频系数。

0xxx:SYSCLK不分频

1000:SYSCLK 2分频  1100:SYSCLK 64分频

1001:SYSCLK 4分频  1101:SYSCLK 128分频

1010:SYSCLK 8分频  1110:SYSCLK 256分频

1011:SYSCLK 16分频 1111:SYSCLK 512分频

位3:2

SWS[1:0]:系统时钟切换状态 (System clock switch status)

由硬件置’1’或清’0’来指示哪一个时钟源被作为系统时钟。

00:HSI作为系统时钟;

01:HSE作为系统时钟;

10:PLL输出作为系统时钟;

11:不可用。

位1:0

SW[1:0]:系统时钟切换 (System clock switch)

由软件置’1’或清’0’来选择系统时钟源。

00:HSI作为系统时钟;

01:HSE作为系统时钟;

10:PLL输出作为系统时钟;

11:不可用

 

eg: RCC->CFGR=0x00000400;   //APB1=DIV2;APB2=DIV1(不分频);AHB=DIV1(不分频);

根据STM32库函数设置时钟流程:

RCC_DeInit();     //设置RCC寄存器重新设置为默认值

RCC_HSEConfig(RCC_HSE_ON);   //打开外部高速时钟晶振

HSEStartUpStatus = RCC_WaitForHSEStartUp();   //等待外部高速时钟晶振工作

if(HSEStartUpStatus == SUCCESS)        //外部就绪

{

       //Add here PLL ans system clock config

       RCC_HCLKConfig(RCC_SYSCLK_Div1);     //设置AHB时钟不分频

       RCC_PCLK2Config(RCC_HCLK_Div1);       //设置APB2时钟不分频

       RCC_PCLK1Config(RCC_HCLK_Div2);       //设置APB1时钟二分频

       RCC_ADCCLKConfig(RCC_PCLK2_Div6);    //设置ADC时钟六分频

       //设置PLL时钟将8M时钟9倍频到72M

RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);

RCC_PLLCmd(ENABLE); //使能PLL

 

FlagStatus Status;

Status = RCC_GetFlagStatus(RCC_FLAG_PLLRDY);

if(Status == RESET)

{

       ……

}

RCC_SYSCLKConfig(RCC-SYSCLKSource_PLLCLK);   //将PLL输出设置为系统时钟

while(RCC_GetSYSCLKSource()!=0x08) //测试PLL是否被用作系统时钟等待校验完成

{}

}

else

{

       //Add here some code to deal with this error

}

//使能外围接口总线时钟

RCC_APB2PeriphClockCmd() / RCC_APB1PeriphClockCmd()


关键字:stm32  rcc  时钟 引用地址:stm32 rcc 时钟

上一篇:STM32使用之GPIO
下一篇:STM32 printf重定向

推荐阅读最新更新时间:2024-03-16 15:28

1602液晶显示DS1302+S51时钟+温度显示
/*============================================================ 使用1602液晶显示DS1302+S51时钟+温度显示 zhaojun 2007/06/29 ============================================================== 声明:1. 1602驱动程序照搬 明皓 的,非常好用 2. DS1302驱动程序是参考网友修改而来 NS1602R(16*2)模拟口线接线方式 连接线图: --------------------------------------------------- | LCM--
[单片机]
STM32系列可通过FMSC接口外扩并口SRAM
STM32MCU一般情况下配置有1~2MB双块Flash存储器和256KB SRAM,在某些应用设计中会出现内置RAM不足的情况,需要对STM32单片机进行外扩RAM的处理,可以选择更换更高RAM容量的单片机,除了价格贵还需要涉及其他被动器件的更改,STM32系列可以通过FMSC接口外扩并口SRAM,比如采用ISSI的IS62WV51216, IS62WV51216 SRAM芯片是一个8M容量,组织结构为512K*16的高速率低功耗静态随机存储器。IS62WV51216高性能CMOS工艺制造。高度可靠的工艺水准再加创新的电路设计技术,造就了这款高性能,低功耗的器件。使用IS62WV51216的片选引脚和输出使能引脚,可以简单
[单片机]
<font color='red'>STM32</font>系列可通过FMSC接口外扩并口SRAM
STM32编码器接口,以及应用编程
Ⅰ 关于编码器 编码器的种类有很多,什么增量式编码器、绝对值编码器,有轴或者无轴编码器,电压输出、推拉输出、集电极开路输出等等。但不管什么类型的编码器,其目的都类似,得到转动的角度,角速度、位移等。 本文讲述常见的增量式编码器,增量式编码器也可以叫正交编码器,也就是说可以通过其A、B的相位知道编码器是正转,还是反转,还可以根据编码器参数得出旋转了多少角度等。 常见的增量式编码器A、B、Z三根线代表什么意思呢?使用过编码器的人不难理解,这里简单给初学者讲述一下: A、B两线提供相位相差90度的脉冲信号,用其来计算旋转的角度;Z线为过零点线,也就是说每转一转,经过某一点都会输出一个脉冲信号,主要用于“过零校正”,三
[单片机]
<font color='red'>STM32</font>编码器接口,以及应用编程
STM32-串口通讯工作原理
STM32 USART 简介 STM32芯片具有多个USART外设用于串口通讯,USART(通用同步异步收发器)能够灵活地与外部设备进行全双工通讯。USART的全称“通用同步异步收发器”,也就是说他可以同步通信也可以异步通信。但是我们实现串口打印调试信息到电脑,其实只用到了他的异步通信的功能。 USART除了有串口功能,它满足外部设备对工业标准NRZ 异步串行数据格式的要求,并且使用了小数波特率发生器提供了多种波特率,使得它的应用更加广泛。它还支持同步单向通信和半双工单线通信;还支持 LIN(局域互连网络)、智能卡协议与 IrDA(红外线数据协会) SIR ENDEC 规范,以及调制解调器操作 (CTS/RTS)。而且,它还支
[单片机]
STM32-串口通讯工作原理
STM32平衡小车】电磁巡线归一化算法(二)
一、归一化的概念 归一化处理,由于各个电感的性能特性存在很大差异特别是电压波动范围相差较大。因此为了给算法制定统一的标准给数据处理带来方便须对 A/D传感器采集来的信号做归一化处理。此设计中的具体方法是通过公式将各传感器电压值都处理成相对该传感器最大电压和最小电压使得传感器输出电压值都保持在 0到 100之间。 归一化之后的传感器数据如图所示横坐标表示距离中心线的距离单位是毫米,纵轴是电压值。 二、归一化的原因 假设不用归一化处理时,距离中线零偏差时,电感A的值是1000,偏离赛道20厘米时,电感A值是200.当赛道电源不准时,比如输出电流由100ma变成了120ma,这时,电感A在零偏差的值和偏离赛道20厘米时候的值都会
[单片机]
【<font color='red'>STM32</font>平衡小车】电磁巡线归一化算法(二)
实战经验 | 如何在用户应用中开启 LoRa CAD
01 LoRa CAD 应用场景举例 在 STM32WL LoRa 某些应用中,尤其是电池供电的设备上,需要按需发送数据,如下发指令,让 STM32WL LoRa 发送数据,或做相应的操作。为了降低功耗,STM32WL不能一直处于接收状态,这样功耗会很高。我们可以开启 LoRa CAD(信道活动检测)功能,STM32WL 通过开启 CAD 功能,检测前导码的前 1/2/4/8/16 个码元,当检测到 LoRa(唤醒)信号后再开启接收,否则系统进入低功耗,这样会极大的降低系统的整体功耗。 02 STM32WL LoRa CAD 原理和驱动 LoRa 信号可以在低于噪声强度的情况下被正确解调。所以,仅
[单片机]
实战经验 | 如何在用户应用中开启 LoRa CAD
stm32用外部时钟的时候注意事项
使用外部时钟的时候,要根据实际用的外部晶振大小,来修改stm32f4xx_hal_conf.h里吗的默认配置: #if !defined (HSE_VALUE) #define HSE_VALUE ((uint32_t)24000000U) #endif
[单片机]
STM32 RTC实时时钟(二)
上次实验完成了对实时时钟的基本功能——计时的实验,这次在计时的基础上对RTC的可编程闹钟的功能进行测试。 RTC 单元提供两个可编程闹钟,即闹钟 A 和闹钟 B。 可通过将 RTC_CR 寄存器中的 ALRAE 和 ALRBE 位置 1 来使能可编程闹钟功能。如果日历亚秒、秒、分钟、小时、日期或日分别与闹钟寄存器RTC_ALRMASSR/RTC_ALRMAR 和RTC_ALRMBSSR/RTC_ALRMBR 中编程的值相匹配,则 ALRAF 和 ALRBF 标志会被置为1。可通过 RTC_ALRMAR 和 RTC_ALRMBR 寄存器的 MSKx 位以及 RTC_ALRMASSR 和RTC_ALRMBSSR 寄
[单片机]
<font color='red'>STM32</font> RTC实时<font color='red'>时钟</font>(二)
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved