[STM32L1] STM32L151延时问题

[复制链接]
1856|1
 楼主| windit 发表于 2014-9-12 09:35 | 显示全部楼层 |阅读模式
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上面就不准确了!求大神帮忙解释下啊,或者给份能精确延时的示例呀。。。
mmuuss586 发表于 2014-9-12 12:34 | 显示全部楼层
SysTick_Config(RCC_Clocks.HCLK_Frequency /1000);//延时1mS
SysTick_Config(RCC_Clocks.HCLK_Frequency /10000);//延时100uS
自己再简单修改下;

L151不准,比如延时1mS,你测试出来是差多少啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

20

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部