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);
}
}
|