我把定时器设配置100us产生一个中断,程序如下:
void TIM_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period = 720; /* 自动重装载寄存器周期的值(计数值) */
/* 累计 TIM_Period个频率后产生一个更新或者中断 */
TIM_TimeBaseStructure.TIM_Prescaler= (10 - 1); /* 时钟预分频数 例如:时钟频率=72MHZ/(时钟预分频+1) */
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; /* 采样分频 */
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /* 向上计数模式 */
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_ClearFlag(TIM2, TIM_FLAG_Update); /* 清除溢出中断标志 */
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
TIM_Cmd(TIM2, ENABLE); /* 开启时钟 */
}
我在定时器中断函数里面设个断点,在调试模式下可以看到每次运行到断点的时间。按照定时器的配置应该是每100us进一次中断,但是实际调试中,进入中断的周期偏差极大,甚至根本没有一个固定的周期,我根据记录算出来的时间间隔为:60us、80us、50us、66us、40us、24us、41us、95us...浮动极大。问题在哪呢?请大家指点下。
在“Target options”中我也对相关的参数进行了设置:
设置第二项“Target”中,晶振选72MHz;
“Debug”选项,点击“Settings”:
选项debug下:选择“SW”模式,速率可选“500khz”;
选项“Trace”下:芯片工作频率选择“72MHZ”,”SW0
Settings”的选项“Autodetect max SW0 C1”打勾选中,然后“Enable”选项打勾选中。
|