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条回答
当时的
1楼-- · 2019-07-22 07:25
DAVIDl 发表于 2018-10-14 23:00
我刚才试了一下,问题出现在fac_ms ,前面算出来fac_us是9, 但是我给它乘以1000,仿真显示fac_ms 为40'( ...

数值超范围了,用short或者int
DAVIDl
2楼-- · 2019-07-22 08:28
 精彩回答 2  元偷偷看……

一周热门 更多>