STM32初练总结(TIM)

STM32初练总结(TIM)

总结下最近学习STM32 中定时器的一些心得。STM32有三种类型的TIM,基本型,通用型和高级TIM,这里只针对通用型TIM,其他类型的定时器可以参考datasheet。

TIM定时器应用

1、用在程序中需要设置定时的地方,比如某些需要等待一定周期的时间后再执行的代码。
2、可以用于产生PWM波形,控制占空比。
3、可以用于产生单脉冲,作为触发信号输出。
5、可以作为内部程序的中断触发源。
。。。还有其他能用到的地方,用到了再总结。

TIM定时器使用

TIM定时器的时钟源来自内部时钟CLK_INT,在这一时钟的基础上可以通过配置 预分频器寄存器 (TIMx_PSC)进行二次分频,得到需要的频率。
另外一个重要的寄存器是计数器寄存器(TIMx_CNT),是TIM的计数器,可以递增或者递减,通过配置寄存器实现控制。
还有一个重要的寄存器是自动装载寄存器 (TIMx_ARR),这个寄存器配置了TIM每次累加达到的阈值或者递减的起始值,由用户配置。
除此之外,还有一些辅助的寄存器来控制中断使能和产生中断等,以及TIM输入输出的模式等。
STM32初练总结(TIM)_第1张图片

TIM代码

用TIM2实现1s定时的代码如下:

void Time2_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

TIM_TimeBaseStructure.TIM_Prescaler = 7199; 		//·ÖƵϵÊý
TIM_TimeBaseStructure.TIM_ClockDivision = 0; 	//ʱÖÓ·ÖƵ
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Period = 9999; 			//¼ÆÊýÒç³öÖµ
TIM_TimeBaseInit(TIM2 , &TIM_TimeBaseStructure);
///////////////////////////////////////////////////////////////
TIM_ClearFlag(TIM2, TIM_FLAG_Update); 				//Çå³ýÖжϱê־λ
TIM_ITConfig(TIM2, TIM_IT_Update,ENABLE); 		//¿ªÆôTIM2µÄÖжÏ
TIM_Cmd(TIM2, ENABLE); 											//open ¶¨Ê±Æ÷
///////////////////////////////////////////////////////////////
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

}

//TIM2中断服务函数
void TIM2_IRQHandler(void)
{
//自定义
}

你可能感兴趣的:(嵌入式)