STM32F407 高级定时器TIM1 定时配置

因为在网上很难找到高级定时器TIM1 的配置,而且高级定时器的配置跟普通定时器不太一样,所以记录一下。
实验板子:正点原子探索者STM32F407ZGT6

TIM1、TIM8至TIM11的时钟为APB2时钟的两倍即168M,TIM2至TIM7、TIM12~TIM14的时钟为APB1的时钟的两倍即84M。

//初始化配置
void Timer1_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStrecture;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);/*使能定时器1的时钟*/


NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_TIM10_IRQn;/*定时器1的中断通道使能*/
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;/*定时器1的中断通道使能*/
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;/*抢占优先级*/
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;/*响应优先级*/
NVIC_Init(&NVIC_InitStructure);/*配置中断分组,并使能中断*/

TIM_TimeBaseInitStrecture.TIM_Period = arr;/*重装载寄存器*/
TIM_TimeBaseInitStrecture.TIM_Prescaler = psc;/*预分配*/
TIM_TimeBaseInitStrecture.TIM_ClockDivision = TIM_CKD_DIV1;/*时钟分频*/
TIM_TimeBaseInitStrecture.TIM_CounterMode = TIM_CounterMode_Up;/*向上计数*/
TIM_TimeBaseInitStrecture.TIM_RepetitionCounter = 0;/*重复计数寄存器*/
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStrecture);/*初始化*/

TIM_ClearFlag(TIM1,TIM_FLAG_Update);/*清更新标志位*/
TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);/*使能中断*/
TIM_Cmd(TIM1,ENABLE);/*使能计数*/

}

中断函数

//中断函数
void TIM1_UP_TIM10_IRQHandler(void)
{
	if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET)//检查指定的TIM中断发生与否:TIM 中断源 
	{
		TIM_ClearITPendingBit(TIM1, TIM_IT_Update);//清除TIMx的中断待处理位:TIM 中断源 
/***************在此处添加中断执行内容******************/
		LED1 = ~LED1;
		printf("定时器1定时器1定时器1定时器1定时器1定时器1");
}
	}

主函数测试

int main(void)
{ 
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
	delay_init(168);  //初始化延时函数
	uart_init(115200);//PA9 PA10 初始化串口波特率为115200
	//LED_Init(); //PF9 PF10	
	Timer1_Init(10000-1,8400-1);// (10000 x 8400) / 168M = 0.5s.
  
   while(1) 
	{	
	}
}

你可能感兴趣的:(STM32F407 高级定时器TIM1 定时配置)