STM32F401滴答定时器延时问题

2019-07-20 01:29发布

HCLK时钟为84MHz,滴答定时器8分频后的时钟就就是84/8=10.5。延时不准,怎么计算my_us和my_ms 啊


u8  my_us = 11;
u32 my_ms = 10500;
void Delay_Init(void)
{
        //设置为8分频  //84/8=10.5
        SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
}
void delay_us(u32 nus)
{
        u32 temp;
       
        SysTick->LOAD = my_us*nus - 1;  //重装值
        SysTick->VAL  = 0x00;                   //保证计数为0
       
        //使能定时器
        //SysTick->CTRL |= (1<<0);
        SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
       
        do
        {
                temp = SysTick->CTRL;
        }while(!(temp & (1<<16)));
       
        SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;  //关闭定时器
        SysTick->VAL  = 0x00;                                           //保证计数为0
}


//nus最大值798  也就是延时最大值798ms
void delay_ms(u32 nms)
{
        u32 temp;
       
        SysTick->LOAD = my_ms*nms - 1;  //重装值
        SysTick->VAL  = 0x00;                   //保证计数为0
       
        //使能定时器
        //SysTick->CTRL |= (1<<0);
        SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
       
        do
        {
                temp = SysTick->CTRL;
        }while(!(temp & (1<<16)));
       
        SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;  //关闭定时器
        SysTick->VAL  = 0x00;                                           //保证计数为0
}


谢谢大佬帮忙看看?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。