stm32f103zet6时钟

stm32f103zet6时钟


voidRCC_HSE_Configuration(void) //HSE作为PLL时钟,PLL作为SYSCLK
{
RCC_DeInit(); /*将外设RCC寄存器重设为缺省值 */
RCC_HSEConfig(RCC_HSE_ON);
/*设置外部高速晶振(HSE) HSE晶振打开(ON)*/
  if(RCC_WaitForHSEStartUp() == SUCCESS)
   { 
/*等待HSE起振,  SUCCESS:HSE晶振稳定且就绪*/ 
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/*设置AHB时钟(HCLK)RCC_SYSCLK_Div1——AHB时钟 = 系统时*/ 
RCC_PCLK2Config(RCC_HCLK_Div1);
/*设置高速AHB时钟(PCLK2)RCC_HCLK_Div1——APB2时钟 = HCLK*/    
RCC_PCLK1Config(RCC_HCLK_Div2);
/*设置低速AHB时钟(PCLK1)RCC_HCLK_Div2——APB1时钟 = HCLK / 2*/
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
/*设置PLL时钟源及倍频系数*/   
RCC_PLLCmd(ENABLE);    /*使能PLL */
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) ==RESET) ;
/*检查指定的RCC标志位(PLL准备好标志)设置与否*/
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); 
/*设置系统时钟(SYSCLK) */ 
while(RCC_GetSYSCLKSource() != 0x08);    
/*0x08:PLL作为系统时钟 */ 
 }
}


stm32f103zet6时钟
  
stm32f103zet6时钟stm32f103zet6时钟




























首先设置好系统时钟源与频率等问题后,设置计数器。

void delay_ms(u32 i)
{
u32 temp;
SysTick->LOAD=9000*i;  //设置重装数值, 72MHZ时
SysTick->CTRL=0X01; //使能,减到零是无动作,采用外部时钟源
SysTick->VAL=0; //清零计数器
do
{
temp=SysTick->CTRL;   //读取当前倒计数值
}
while((temp&0x01)&&(!(temp&(1<<16)))); //等待时间到达
SysTick->CTRL=0; //关闭计数器
SysTick->VAL=0; //清空计数器
}