F429共有14个定时器
2个高级 TIM1、TIM8
10个通用 TIM2~TIM5 TIM9~TIM14
2个基本 TM6 、TIM7 只有TIM_Prescaler和TIM_Period
1.配置优先级
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); 中断组为0
NVIC_InitStructure.NVIC_IRQChannel = TIM6_DAC_IRQn; 中断来源
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; 抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; 子优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
2.TIM初始化
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); 初始化时钟
TIM_TimeBaseStructure.TIM_Period = 5000-1; 自动重装载值(即定时时间)
TIM_TimeBaseStructure.TIM_Prescaler = 9000-1; 分频系数
以下在通用和高级定时器中才有
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 计数方式向上计数
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; 分频因子
TIM_TimeBaseStructure.TIM_RepetitionCounter=1;重复计数
TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure); 初始化定时器
TIM_ClearFlag(TIM6, TIM_FLAG_Update);清除定时器中断标志位
TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);开启定时器更新中断
TIM_Cmd(BASIC_TIM, ENABLE); 使能定时器
3.编写中断服务函数
void TIM6_DAC_IRQHandler (void)
{
if ( TIM_GetITStatus( TIM6, TIM_IT_Update) != RESET )
{
LED1_TOGGLE;
TIM_ClearITPendingBit(TIM6 , TIM_IT_Update);
}
}
服务函数名在stsrtup_stm32f429_439xx.s内