新手问题,关于systick的

2019-07-20 07:18发布

自己写了个程序,但调用的delay函数一直是死循环,经过debug发现是systick->load时钟为0造成的,求问这是什么原因?

systick.png


初始化的时候已经做了:
HAL_Init();                     
Stm32_Clock_Init(360,25,2,8);
delay_init(180);  
__HAL_RCC_GPIOB_CLK_ENABLE();   

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
szczyb1314
2019-07-21 09:52
//nus为要延时的us数.                                                                                      
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;       //清空计数器         
}
这个才是非操作系统用的延时

一周热门 更多>