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;                                               //?????                      
}


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