STM32标准库通用定时器计数

STM32标准库通用定时器计数

1. 定时器初始化

void TIM2_Init()
{
	TIM_TimeBaseInitTypeDef TIM2_Initstructure;                 //定义结构体
	NVIC_InitTypeDef NVIC_InitStructure;                        //定义结构体
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);         //使能定时器2时钟
	TIM2_Initstructure.TIM_Period = 1000;                       //设置计数器自动重装值
	TIM2_Initstructure.TIM_Prescaler = 72 - 1;                  //设置预分频值
	TIM2_Initstructure.TIM_ClockDivision = TIM_CKD_DIV1;        //设置时钟分割
	TIM2_Initstructure.TIM_CounterMode = TIM_CounterMode_Up;    //设置计数器模式
	TIM_TimeBaseInit(TIM2,&TIM2_Initstructure);                 //初始化定时器2
	
	TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);                    //使能定时器2更新中断
	
	NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;             //定时器2中断通道
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;   //设置中断优先级
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;          //设置中断子优先级
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;             //使能中断通道
	
	NVIC_Init(&NVIC_InitStructure);                             //初始化NVIC
	
	TIM_Cmd(TIM2,ENABLE);                                       //使能定时器2
}

其中TIM_TimeBaseInitTypeDef结构体配置比起基本定时器多了2个选项。基本定时器只需要配置TIM_Period和TIM_Prescaler的值便可以使用。

  • TIM_ClockDivision:设置定时器时钟分割.

    • TIM_CKD_DIV1:定时器时钟 = 输入频率。
    • TIM_CKD_DIV2:定时器时钟 = 输入频率/2。
    • TIM_CKD_DIV4:定时器时钟 = 输入频率/4。
  • TIM_CounterMode:设置计数器模式。

    • TIM_CounterMode_Up:向上计数。
    • TIM_CounterMode_Down:向下计数。
    • TIM_CounterMode_CenterAligned1:中心对齐向下计数。
    • TIM_CounterMode_CenterAligned2:中心对齐向上计数。
    • TIM_CounterMode_CenterAligned3:中心对齐双向计数。

2.定时器中断服务函数

void TIM2_IRQHandler()                                  //定时器2中断服务函数
{
	if(TIM_GetITStatus(TIM2,TIM_IT_Update) != RESET)    //定时器2中断发生
	{
		TIM_ClearITPendingBit(TIM2,TIM_IT_Update);      //清除中断标志位
		led_turn();                                     //调用led翻转函数
	}
}
posted @ 2024-03-06 21:11  T7H  阅读(61)  评论(0编辑  收藏  举报