共享一把我的代码吧(有点复杂,但是可以用): /******************************************************************************* * Function Name  : SysTick_Config_MAX * Description    : Configure a SysTick Base time to MAX timeout. * Input          : None * Output         : None * Return         : None * Author         : www.mcuisp.com void SysTick_Config_MAX(void) {   /* Configure HCLK/8 clock as SysTick clock source */   SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
    /* SysTick Reload By Max Value */   SysTick_SetReload(0x00ffffff);
    /* Disable the SysTick Interrupt, use for free count */   SysTick_ITConfig(DISABLE);
    /* Enable the SysTick Counter */   SysTick_CounterCmd(SysTick_Counter_Enable); } //-- /******************************************************************************* * Function Name  : DelayCyclesBySysTick * Description    : delay N SysTicks. * Input          : u32 ticks,the number of ticks desired to delay * Output         : None * Return         : None * Author         : www.mcuisp.com *******************************************************************************/ void DelayCyclesBySysTick(u32 ticks) {   u32 ui32,ui32a,systickprescale;   if((SysTick->CTRL&SysTick_Counter_Enable)==0)return;//没开SysTic,返回避免死循环   systickprescale=SysTick->LOAD;   if(systickprescale<250)return;//SysTick的Load值太小,误差很大,返回。   for(;ticks>=systickprescale;)   {     ticks=ticks-systickprescale-200;     ui32=SysTick_GetCounter();     for(;;)     {       ui32a=SysTick_GetCounter();       if(ui32a>ui32)       {         ui32a=ui32+systickprescale-ui32a;       }       else       {         ui32a=ui32-ui32a;       }       if(ui32a>=(systickprescale-200))break;     }   }   ui32=SysTick_GetCounter();   for(;;)   {     ui32a=SysTick_GetCounter();     if(ui32a>ui32)     {       ui32a=ui32+systickprescale-ui32a;     }     else     {       ui32a=ui32-ui32a;     }     if(ui32a>=ticks)break;   } } //--  
 |