STM32关于systick计时器时间不对的一点问题

STM32关于systick计时器时间不对的一点问题

我是新手刚接触STM32,我设定的时间总是实际时间的一半,检查许久也不知道是哪里出了问题

下面是延时函数和计时器的配置

void SysTick_Init(u8 SYSCLK)
{
	SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); 
	fac_us=SYSCLK/8;					
	fac_ms=(u16)fac_us*1000;				   
}			

void delay_us(u32 nus)
{		
	u32 temp;	    	 
	SysTick->LOAD=nus*fac_us; 					//时间加载	  		 
	SysTick->VAL=0x00;        					//清空计数器
	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;	//开始倒数	  
	do
	{
		temp=SysTick->CTRL;
	}while((temp&0x01)&&!(temp&(1<<16)));		//等待时间到达   
	SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;	//关闭计数器
	SysTick->VAL =0X00;      					 //清空计数器	 
}
void delay_ms(u16 nms)
{	 		  	  
	u32 temp;		   
	SysTick->LOAD=(u32)nms*fac_ms;				//时间加载(SysTick->LOAD为24bit)
	SysTick->VAL =0x00;							//清空计数器
	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;	//开始倒数  
	do
	{
		temp=SysTick->CTRL;
	}while((temp&0x01)&&!(temp&(1<<16)));		//等待时间到达   
	SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;	//关闭计数器
	SysTick->VAL =0X00;       					//清空计数器	  	    
} 

下面是系统时钟的设置

void RCC_HSE_Config(u32 div,u32 pllm)//自定义系统时钟
 {
   RCC_DeInit();
	 RCC_HSEConfig(RCC_HSE_ON);//设置为外部高速晶振
	 if(RCC_WaitForHSEStartUp()==SUCCESS)
	 {
		  RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置AHB时钟
		  RCC_PCLK1Config(RCC_SYSCLK_Div2);//设置低速AHB时钟(PCLK1 最大36M)
		  RCC_PCLK2Config(RCC_SYSCLK_Div1);//设置高速AHB时钟(PCLK1 最大72M)
		  RCC_PLLConfig(div,pllm);//设置时钟源及倍频系数
		  RCC_PLLCmd(ENABLE);//使能PLL
		  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);//检查指定的RCC标志位设定
		  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//设置系统时钟
		  while(RCC_GetSYSCLKSource()!=0x08);//返回用作系统时钟的时钟源,0x08,PLL用作时钟源
	 }
 }

下面是主函数

int main()
{
	  RCC_HSE_Config(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
      LED_Init();
	  SysTick_Init(72);
      while(1)
      {
           delay_ms(1500);
           delay_ms(1500);
           LED_OFF();
           delay_ms(1500);
           delay_ms(1500);
           LED_ON();
	  } 	
	    	
}

按照我的想法应该是3s亮灯,3s灭灯
但是实际上我粗略测量大概这个间隔是6s
到底是为什么

我的板子是C8T6,外部晶振是8M

你可能感兴趣的:(STM32关于systick计时器时间不对的一点问题)