以stm32f103为例:
1.代码实现步骤简述:
1.使能定时器时钟 RCC_APB1PeriphClockCmd();
2.初始化定时器,配置per,psc TIM_TimeBaseInit();
3.开启定时器中断,配置NVIC
void TIM_ITConfig();
NVIC_Init();
4.使能外设TIMx TIM_Cmd();
5.编写中断服务函数 TIMx_IRQHandler();
2.代码:
void TIM3_Init(uint32_t per,uint32_t psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //在stm32f10x_tim.h中
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
//定时器中断初始化
TIM_TimeBaseStructure.TIM_Period = per; //per计数
TIM_TimeBaseStructure.TIM_Prescaler = psc; //分频
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //模式
TIM_TimeBaseInit(TIM3, & TIM_TimeBaseStructure);
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );//使能TIM_IT_Update中断,TIM_IT_Update为中断源
TIM_Cmd(TIM3, ENABLE);//使能TIM3
NVIC_InitStructure.NVIC_IRQChannel =TIM3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void TIM3_IRQHandler(void)//中断服务函数
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update) == SET)
{
GPIOC->ODR^=GPIO_Pin_13;//每隔500ms翻转GPIOC的13管脚
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
}
}