#include "delay.h" #include "stdint.h" #include "stm32f10x.h" static uint8_t fac_us=0; //us延时倍乘数 static uint16_t fac_ms=0; //ms延时倍乘数 void DelayInit() { //选择外部时钟 SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); fac_us=SystemCoreClock/8000000; //设置为系统时钟的1/8 fac_ms=(u16)fac_us*1000; } void DelayUs(unsigned int us) { u32 temp; SysTick->LOAD=us*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 DelayMs(unsigned int ms) { u32 temp; SysTick->LOAD=ms*fac_ms; 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 DelayS(unsigned int s) { unsigned char i; for(i=0;i<s;i++) { DelayMs(1000); } }