学习计划第二篇:STM32F103关于时钟的设置

好了,终于可以写第二篇了。
本学习计划关于STM32103计划写5篇。都是平时用的比较多,而且每次都需要注意的。
1.BOOT0和BOOT1
2.时钟设置
3.USART和UART
4.关于按键和屏的设置,以及设计程序的结构。
5.UCOS系统
基本上这5个就够了。之后再写一写FPGA 和 STM32F407的。ヾ(◍°∇°◍)ノ゙

之前都是用库函数来设置RCC,如下:

void RCC_Configuration(void)
{
  RCC_DeInit();//RCC寄存器重置
 
  RCC_HSICmd(ENABLE);//使能内部时钟
  while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET)//等待HSI使能成功
  {
  }
 
  if(1)
  {
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
    FLASH_SetLatency(FLASH_Latency_2);
   
    RCC_HCLKConfig(RCC_SYSCLK_Div1);   
    RCC_PCLK1Config(RCC_HCLK_Div1);//很多人喜欢用这个:  RCC_PCLK1Config(RCC_HCLK_Div2);
    RCC_PCLK2Config(RCC_HCLK_Div1);
    
    //设置PLL 时钟源及倍频系数
    RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16);                
    //使能或者失能PLL,这个参数可以取:ENABLE或者DISABLE
    RCC_PLLCmd(ENABLE);//如果PLL被用作系统时钟,那么他不能被失能
    //等待指定的标志位RCC 设置成功 等待PLL设置成功
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    {
    } 
    //设置系统时钟(SYSCLK) 设置PLL为系统时钟源
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);  
   //等待PLL成功作用于系统时钟的时钟源
  // 0x00:HSI 作为系统时钟
  // 0x04:HSE 作为系统时钟
  // 0x08:PLL 作为系统时钟
    while(RCC_GetSYSCLKSource() != 0x08)
    {
    }
  }
	
  
//	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);  //SPI2   GPIOB-12,13,14,15
	//RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);	  //SPI2
}

也是之前在网上down的,属于内部时钟。当需要使用外部时钟时,修改
“//设置PLL 时钟源及倍频系数
RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16); ”
这部分即可。
后来有网友说可以使用SystemInit()函数(位于文件“system_stm32f10x.c”)。
如果定义了这个宏(#define SYSCLK_FREQ_72MHz 72000000),则会将时钟系统初始化为如下状态:
SYSCLK:72MHz / AHB:72MHz / PCLK1:36MHz / PCLK2:72MHz / PLL:72MHz。
如此一来便大大简化了编程,只需在设置中预先DEFINE这个宏(SYSCLK_FREQ_72MHz)即可。
这一点,我试过几次,先定义宏(#define SYSCLK_FREQ_72MHz 72000000),然后RCC函数里写SystemInit();也没出过别的问题。但是为什么能用还是有点不明觉厉。现在都是先后一种方式,如果不行,再用第一种方式对时钟进行配置。
另外据说初始化以后可以通过SystemCoreClock变量来获取系统时钟(SYSCLK)的状态,例如,SYSCLK为72MHz,那么SystemCoreClock的值为72000000。这个还没有试过,下次试试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

紫光倾城2020

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值