STM32时钟配置主要是通过两个寄存器PCC-CR(时钟控制寄存器)和RCC-CFGR(时钟配置寄存器)完成的。 系统主频配置思路:1 选择PLL 分支的输入时钟 ;2 设置外部晶振的分频数 ;3 选择PLL倍频时钟源; 4 设置PLL倍频数 ;5 选择系统时钟 ;6 对 AHB 总线分频(继续 APB1/APB2 总线分频)
int main(void)
{
unsigned char sws = 0;
RCC->CR |= 0X00010000;
while(!(RCC->CR>>17));
RCC->CFGR = 0x00000400;
/* 寄存器CFGR的18-21四个bit位配置成以下值,则PLL就会设置成对应的值:
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倍频输出
*/
RCC->CFGR |= 2<<18;
RCC->CFGR |= 1<<16;
RCC->CR |= 1<<24;
while(!(RCC->CR>>25));
RCC->CFGR |= 1<<1;
while(sws != 0x2)
{
sws = RCC->CFGR>>2;
sws &= 0x3;
}
其中PLL的输入时钟配置由 RCC->CR |=0x00010000 完成,将RCC-CR寄存器第16位置1,选择外部晶振时钟输入;外部晶振分频则由RCC-CFGR 的第17位决定,默认状态为0,不分频,1为2分频;选择PLL倍频时钟源 RCC->CFGR |=1<<16 ,选择外部晶振为时钟源;配置PLL倍频数 RCC->CFGR |=2<<18 ,得到4倍频 ,选择系统时钟 RCC--CFGR | 1>>1 选择PLL为系统时钟。若是对GPIO操作可继续选择对APB2进行分频。
上面的程序假设外部晶振8M,经过4倍频得到32M的主频,想要得到其他频率的主频,修改倍频倍数就可以了。 |