systick 延时函数 移植于原子哥 无法延时

2019-07-21 09:03发布

哪位大神帮我看看哪里有不妥之处,之前直接按着这个思路写了一个,不行,然后直接移植原子哥的还是不行,我觉得
可能是时钟设置上的问题,但是我又找不到具体原因

u8 fac_us;
u8 fac_ms;


void delay_init()
{
       
        SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
        fac_us=SystemCoreClock/8000000;
        fac_ms=(u16)fac_us*1000;       
       
}

void delay_us(u32 nus)
{               
        u32 temp;                     
        SysTick->LOAD=nus*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 delay_ms(u16 nms)
{                                     
        u32 temp;                  
        SysTick->LOAD=(u32)nms*fac_ms;                                //????(SysTick->LOAD?24bit)
        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;                                               //?????                      
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
warship
1楼-- · 2019-07-21 12:50
不知道你想干什么?
原子的例程是有缺陷的,看我的代码
https://github.com/ShuifaHe/STM32/blob/delay/delay.c
正点原子
2楼-- · 2019-07-21 17:07
仿真看看,看看寄存器的变化
正点原子
3楼-- · 2019-07-21 21:39
 精彩回答 2  元偷偷看……
DAVIDl
4楼-- · 2019-07-21 23:32
正点原子 发表于 2018-10-14 01:51
我们例程,你直接下载就可以验证

恩恩是的,但是我想通过这样的方法学习一下systick
DAVIDl
5楼-- · 2019-07-22 02:12
正点原子 发表于 2018-10-14 01:51
仿真看看,看看寄存器的变化

我刚才试了一下,问题出现在fac_ms ,前面算出来fac_us是9, 但是我给它乘以1000,仿真显示fac_ms 为40'(',这是为什么?以前没有遇到过这样的情况
DAVIDl
6楼-- · 2019-07-22 04:04
warship 发表于 2018-10-14 10:24
不知道你想干什么?
原子的例程是有缺陷的,看我的代码
https://github.com/ShuifaHe/STM32/blob/delay/ ...

好的,谢谢

一周热门 更多>