在配置RCC之前一定要将RCC复位,APB1总线是36MHz;APB2总线是72MHz;
单片机有四个时钟源:
1,高速外部时钟(HSE):以外部晶振作为时钟源,我们可以采纳4-16MHz的频率,我接的外部晶振为8MHz;
2,低速外部时钟(LSE);以外部晶振作为时钟源,主要是为给实时时钟做时钟源,所以外接一个32.768KHz晶振。
3,高速内部时钟(HSI);由内部RC振荡器产生,频率为8MHz,不稳定,不使用,以防止引起程序出错;
4,低速内部时钟(LSI);由内部RC振荡器产生,频率为32.768KHz给实时时钟做时钟源.。
当我们使用时直接设置为时钟源为外部晶振HSE,除非需要实时时钟显示再加入LSE;在OSC_OUT和OSC_IN端接入外部8MHZ晶振;
所以复位完成之后开启HSE时钟;
接着程序开始等待响应,和检测是否成功,成功进入设置;
1,设置HCLK时钟为SYSCLK时钟的一分频,其中SYSCLK时钟为8MHz;所以一分频同样为8MHz;
,2,设置PCLK1的时钟频率为HCLK的2分频,即PCLK1时钟频率为4MHz;
3,设置PCLK2的时钟频率为HCLK的1分频,即PCLK2时钟频率为8MHz;
4,设置FLASH延时周期为2,
一般情况 0<SYSCLK<24MHz,FLASH设置为0个延时周期
24MHz<SYSCLK<48MHz,FLASH设置为1个时钟周期
48MHz<SYSCLK<72MHz,FLASH设置为2个时钟周期
此时SYSCLK看的是CPU中运行的最高时钟
5,设置使用预取缓存;
6,设置PLL时钟源为HSE,且经过倍频9,即PLL频率为72MHz;
7,使能pll
8 ,等待未定
9,设置系统时钟源为pll
,10,等待成为时钟源;注:0x00代表HSI作为系统时钟;
0x04代表HSE作为系统时钟;
0x08代表PLL作为系统时钟;
11,打开APB2总线上的GPIOA时钟
注:APB2总线上包含了,AFIO,GPIOA,GPIOB,GPIOC,GPIOD,GPIOE,ADC1,ADC2,TIM1,
有设计思路可以知道,我们将GPIOA引脚2,3设置为高电平时可以使灯亮,设置为低电平时灯灭;
GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_3);//高电平,灯亮
GPIO_ResetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_3);//低电平,灯灭
GPIO_WriteBit(GPIOA,GPIO_Pin_2,(BitAction)((1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_2))));//为电平翻转
如果你在开头#define Delay(n) while((n)–)
那么在程序里Delay(n);//延时,当n=72000000时延时1秒
STM32自学笔记 第三篇,单片机走起来,走马灯3
最新推荐文章于 2023-06-02 10:40:05 发布