本帖最后由 lip0201 于 2011-6-9 22:17 编辑
SysTick的时钟源频率设为SysTick_CLKSource_HCLK_Div8,即9M,假如定时1ms的话,可以这样设置
if (SysTick_Config((SystemCoreClock /8)/ 1000 ))//重装值为9000-1=8999, 定时1ms
{
/* Capture error */
while (1);
}
假如想定时1us的话,很多人想到除以1000000,即
if (SysTick_Config((SystemCoreClock /8)/ 1000000 ))//重装值为9-1=8,定时1us
{
/* Capture error */
while (1);
}
当时我也是这么做的,可是这么设置片子根本不工作,除以100000还可以,多加一个0就不行了。仿真了半天才知道其原因,原来重装的值太小,还没等SysTick配置完成,重装值已经减为0(此时没运行到Delay(nms)处),从而跳到了中断函数处,nms的值还没传到 TimingDelay_Decrement(void)函数中,所以程序就死在中断函数里了
所以用这种方法不能将重装值设的太小
} |