void delay_init(u8 SYSCLK)
{
// SysTick->CTRL&=0xfffffffb;//bit2清空,选择外部时钟 HCLK/8
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //bit2清空,选择外部时钟 HCLK/8
fac_us=SYSCLK/8;
fac_ms=(u16)fac_us*1000;
SysTick->VAL=0x00;
SysTick->CTRL=0x00;
}
这是初始化
void tic(void) //程序开始计时
{
SysTick->VAL=0X00; //当前数值 寄存器清零
SysTick->LOAD=0XFFFFFF; //计数器赋初值
SysTick->CTRL |= (1<<0); //开启计数器
}
float toc(void) //结束计时
{
float ElaspTime;
uint32_t ClkNum;
SysTick->CTRL &= ~(1<<0); //关闭计数器
ClkNum=SysTick->VAL; //读取 计数器的值
ElaspTime=(float)(0xffffff-ClkNum)/SystemCoreClock/8); //计算时间
return ElaspTime;
}
我发现只要一读取SysTick->VAL的值必为0,时间肯定没有那么久。。。。无解啊
那么直接返回(float)(SysTick->LOAD-SysTick->VAL)/SystemCoreClock/8)也还是0
Systick不能直接读吗?如果想要测量代码执行时间(做采样间隔),应该怎么做?
|