这个部分包括定时器的基本配置,然后就是开始定时了,通过中断标志等待定时的结束,然后清除中断标志,然后再关闭定时器,我觉得存在一个bug,就是没有对计数的寄存器清空,这个是我没有意识到的,如果有人已经发过了,那就请版主把这帖子删了!
void Delay_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period = 7199; //计数上限
TIM_TimeBaseStructure.TIM_Prescaler = 0; //分频 (TIMPeriod+1)*(TIMPrescaler+1)/72000000 = x s
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);
}
void delay100us(unsigned int count)
{
unsigned int i;
TIM_Cmd(TIM2,ENABLE);
for(i=0;i<count;i++)
{
while(TIM_GetITStatus(TIM2,TIM_FLAG_Update)==RESET);
TIM_ClearFlag(TIM2,TIM_FLAG_Update);
}
TIM_Cmd(TIM2,DISABLE);
}
这个算是第一篇文档 求支持 和 求 围观
[
本帖最后由 STM32F103 于 2012-5-27 10:58 编辑 ]