void delay_init(uint16_t SYSCLK)
{
// SysTick->CTRL&=0xfffffffb;//bit2清空,选择外部时钟 HCLK/8
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
//fac_us=SYSCLK/8; //SYSTICK 的时钟固定为HCLK 时钟的1/8
fac_us=SYSCLK/8;
fac_ms=(uint16_t)fac_us*1000;
}
void delay_us(uint16_t nus)
{
uint32_t temp;
SysTick->LOAD=nus*fac_us; //时间加载
SysTick->VAL=0x00; //清空计数器
SysTick->CTRL=0x01 ; //开始倒数
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待时间到达
SysTick->CTRL=0x00; //关闭计数器
SysTick->VAL =0X00; //清空计数器
}
void delay_ms(uint16_t nms)
{
uint32_t temp;
SysTick->LOAD=(uint32_t)nms*fac_ms;//时间加载(SysTick->LOAD为24bit)
SysTick->VAL =0x00; //清空计数器
SysTick->CTRL=0x01 ; //开始倒数
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待时间到达
SysTick->CTRL=0x00; //关闭计数器
SysTick->VAL =0X00; //清空计数器
}
这是STM32f4上面的延时函数,是可以用的!但是移到STM32L151上面就不准确了!求大神帮忙解释下啊,或者给份能精确延时的示例呀。。。 |