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输入输出的模式等。
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)
{
//自定义
}
来源:CSDN
作者:whr&redstone
链接:https://blog.csdn.net/weixin_43872184/article/details/103989754