哪位大神帮我看看哪里有不妥之处,之前直接按着这个思路写了一个,不行,然后直接移植原子哥的还是不行,我觉得
可能是时钟设置上的问题,但是我又找不到具体原因
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; //?????
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
数值超范围了,用short或者int
一周热门 更多>