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
}


谢谢大佬帮忙看看?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
正点原子
1楼-- · 2019-07-20 03:42
 精彩回答 2  元偷偷看……
peng1554
2楼-- · 2019-07-20 09:40
F401最大主频多少?10.5不大好设置延时
洋春白雪
3楼-- · 2019-07-20 14:24
peng1554 发表于 2019-6-5 20:17
F401最大主频多少?10.5不大好设置延时

最大主频84MHz
洋春白雪
4楼-- · 2019-07-20 18:57
 精彩回答 2  元偷偷看……

一周热门 更多>