定时器是我们在嵌入式单片机里应用最广泛的外设。使用定时器的水平高低也决定着整个项目实施的水平高低。本次版主给大家带了使用TIM3时基定时器的示例。例程主要使用TIM3来产生前几个实验所使用的systick产生的1KHz。
实例还是比较简单的,版主就不再多多叙述,大家直接看源代码吧!
源代码:
/** * @brief tim3 base 1KHz * @param * @retval * @date 2015-03-31 * @note */ void BaseTick(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); /* Enable the TIM3 gloabal Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); TIM_TimeBaseStructure.TIM_Period = 999; TIM_TimeBaseStructure.TIM_Prescaler = 23; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); TIM_Cmd(TIM3, ENABLE); } /** * @brief TIM3_IRQHandler的中断入口函数 * @param * @retval * @date 2015-03-30 * @note */ void TIM3_IRQHandler(void) { if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM3, TIM_IT_Update); if(gCntLed[1] > 0) { gCntLed[1]--; } else { gCntLed[1] = 0; } if(gKeyCnt > 0) { gKeyCnt--; } else { gKeyCnt = 0; } } }
工程文件: