STM32有三种不同的时钟源可被用来驱动系统时钟(SYSCLK):
1:HSI振荡器时钟(内部时钟)
2:HSE振荡器时钟 (外部时钟,即晶振所提供)
3:PLL时钟(锁相环时钟)
这些设备有以下2种二级时钟源:
(1)40kHz低速内部RC,可以用于驱动独立看门狗和通过程序选择驱动RTC。RTC用于从停机/待机模式下自动唤醒系统。
(2)32.768kHz低速外部晶体也可用来通过程序选择驱动RTC(RTCCLK)。
当不被使用时,任一个时钟源都可被独立地启动或关闭,由此优化系统功耗。
1:常用配置如下
使用HSE作为PLL的输入源,将PLL的输出配置为72MHZ,然后将PLL作为系统时钟,最后将其他时钟配置为系统时钟的分频输出。
2:配置过程
-将所有和时钟相关的寄存器进行复位;
-启动HSE并等待其稳定;
-配置HCLK和SYSCLK相等;
-配置PCLK1为HCLK的2分频;(由参考手册上的时钟树得知PCLK1为低速外设时钟,最大不超过36MHZ,所以,PLL倍频不建议超过72MHZ)
-配置PCLK2和HCLK相等;(PCLK2为高速外设时钟,最大不超过72MHZ)
-根据是否使用AD及其输入信号的频率配置ADCLK为PCLK2的若干分频;
-根据是否使用USB设备接口,配置USB的时钟为48MHZ;
-配置HSE为PLL的输入,并设置两个分频比使PLL输出72MHZ频率,等待其稳定;
-将PLL输出作为系统时钟;
-根据需要来决定是否启用时钟安全系统。
在写系统时钟初始化代码之前可以先看《STM32参考手册》的系统时钟树:
STM32PLL时钟配置函数:
void Stm32_Clock_Init(u8 PLL)
{
unsigned char temp=0; //当前系统时钟状态标志
MYRCC_DeInit(); //复位并配置向量表
RCC->CR|=0x00010000; //外部高速时钟使能HSEON
while(!(RCC->CR>>17));//等待外部时钟就绪
RCC->CFGR=0X00000400; //APB1=DIV2;APB2=DIV1;AHB=DIV1;
PLL-=2;//抵消2个单位 //这里PLL减去2是因为倍频系数从2开始,但倍频寄存器值从 0000开始,即如果是9倍频,则倍频寄存器应写0111。
RCC->CFGR|=PLL<<18; //设置PLL值 2~16
RCC->CFGR|=1<<16; //由软件置’1’或清’0’来选择PLL输入时钟源。该位只有在PLL关闭时才 可以被写入。
FLASH->ACR|=0x32; //FLASH 2个延时周期
RCC->CR|=0x01000000; //PLLON
while(!(RCC->CR>>25));//等待PLL锁定
RCC->CFGR|=0x00000002;//PLL作为系统时钟
while(temp!=0x02) //等待PLL作为系统时钟设置成功
{
temp=RCC->CFGR>>2;
temp&=0x03;
}
}
MYRCC_DeInit函数原型:
void MYRCC_DeInit(void)
{
RCC->APB1RSTR = 0x00000000;//复位结束
RCC->APB2RSTR = 0x00000000;
RCC->AHBENR = 0x00000014; //睡眠模式闪存和SRAM时钟使能.其他关闭.
RCC->APB2ENR = 0x00000000; //外设时钟关闭.
RCC->APB1ENR = 0x00000000;
RCC->CR |= 0x00000001; //使能内部高速时钟HSION
RCC->CFGR &= 0xF8FF0000; //复位SW[1:0],HPRE[3:0],PPRE1[2:0],PPRE2[2:0],ADCPRE[1:0],MCO[2:0]
RCC->CR &= 0xFEF6FFFF; //复位HSEON,CSSON,PLLON
RCC->CR &= 0xFFFBFFFF; //复位HSEBYP
RCC->CFGR &= 0xFF80FFFF; //复位PLLSRC, PLLXTPRE, PLLMUL[3:0] and USBPRE
RCC->CIR = 0x00000000; //关闭所有中断
//配置向量表
#ifdef VECT_TAB_RAM
MY_NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else
MY_NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
}
时钟控制寄存器:
时钟控制寄存器:
上一篇:STM32、ESP8266与MQTT连接阿里云物联网的串口通信异常解析
下一篇:2、STM32学习笔记——定时器
推荐阅读最新更新时间:2024-11-12 22:44
设计资源 培训 开发板 精华推荐
- 极限MP26028充电模块
- MC34074ADR2G 运算放大器用作 LED 驱动器的典型应用
- NCV8570B 200 mA、超低噪声、高 PSRR、LDO、线性稳压器的典型应用
- DC500A-B,使用 LTC3406ES5-1.5 的演示板,2.7V 至 5.5Vin,1.5Vout @ 600mA max 同步降压稳压器
- LTC3407、单片式 1.5V/600mA 和 2.5V/600mA 稳压器
- SRT-96B-MEZ-LTE-A、Shiratech LTE 和传感器夹层板
- LT1460 的典型应用 - 微功率精密系列参考系列
- NCV896530 2.1 MHz 低压双输出降压转换器的典型应用
- ArmorM:适用于RoboMaster裁判系统AM02、AM12替代的击打检测装置
- FEBFOD8316-GEVB:2.5 A 输出电流、IGBT 驱动光电耦合器,具有去饱和检测和隔离式故障检测功能