1.代码
Time.c
- #include "stm32f10x.h" // Device header
- void Timer_Init(void)
- {
- //1.开启时钟,通用定时器TIM2是APB1总线的外设
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
-
- //选择时基单元的时钟为内部时钟
- TIM_InternalClockConfig(TIM2);//上电默认就是内部时钟,不写亦可以
-
- TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
- TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;//时钟分频,1分频
- TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//计数器模式 向上计数
- TIM_TimeBaseInitStructure.TIM_Period=10000 - 1 ;//周期,ARR自动重装器的值
- TIM_TimeBaseInitStructure.TIM_Prescaler= 14400-1;//PSC预分频器的值
- //T = (PSC*ARR)/72MHz
- TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;//重复计数器的值 高级计数器使用的,这里不需要
- //2.配置时基单元
- TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
-
- //3.使能更新中断,开启更新中断到NVIC的通路
- TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
-
- //4.NVIC优先级分组
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- NVIC_InitTypeDef NVIC_InitStructure;
- NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级
- NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;//响应优先级
- NVIC_Init(&NVIC_InitStructure);
-
- //5.启动定时器
- TIM_Cmd(TIM2,ENABLE);
- }
- //定时器2的中断函数
- void TIM2_IRQHandler(void)
- {
- if(TIM_GetITStatus(TIM2,TIM_IT_Update)==SET)
- {
- GPIOA->ODR ^= GPIO_Pin_0;//把GPIO口A的第0位的输出电平取反
-
- //清除标志位
- TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
- }
-
-
- }
|