STM32通用定时器配置步骤

通用定时器配置步骤TIM2-TIM5

  • (1)使能定时器时钟
  • (2)初始化定时器参数,包含自动重装值,分频系数,计数方式等
  • (3)设置定时器中断类型,并使能
  • (4)设置定时器中断优先级,使能定时器中断通道
  • (5)开启定时器
  • (6)编写定时器中断服务函数
  • 应用
  • (7)实验训练

(1)使能定时器时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//使能TIM4时钟

(2)初始化定时器参数,包含自动重装值,分频系数,计数方式等

void TIM_TimeBaseInit(TIM_TypeDef * TIMx, TIM_TimeBaseInitTypeDef * TIM_TimeBaseInitStruct);

typedef struct
{
uint16_t TIM_Prescaler; //定时器预分频器;[1~65535]
uint16_t TIM_CounterMode;//计数模式,3种
uint32_t TIM_Period; //定时器周期
uint16_t TIM_ClockDivison;//时钟分频;
uint8_t TIM_RepetitionCounter;//重复计数器;
} TIM_TimeBaseInitTypeDef;
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseInitStruct);

(3)设置定时器中断类型,并使能

void TIM_ITConfig(TIM_Type* TIMx, uint16_t TIM_IT, FunctionalState NewState);

(4)设置定时器中断优先级,使能定时器中断通道

NVIC初始化库函数NVIC_Init();

(5)开启定时器

void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewStae);

(6)编写定时器中断服务函数

TIM4_IRQHander
ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);
if(TIM_GetITStatus(TIM4,TIM_IT_Update))
{…//执行TIM4更新中断 }

应用

TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_TimeBaseInitStructure.TIM_Period=1000;//自动装载值
TIM_TimeBaseInitStructure.Prescaler;=35999;//分频系数
TIM_TimeBaseInitStructure.TIM_ClockDivison=TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上模式

定时器定时时间计算公式如下:
Tout=((per)(pac+1))/Tclk=100036000/72000000=0.5s=500ms

(7)实验训练

通过TIM4的更新中断控制器D2指示灯间隔500ms秒状态取反,主函数控制D1指示灯不断闪烁。程序框架如下:
1、初始化TIM4,并使能更新中断等;
2、编写TIM4中断函数;
3、编写主函数;

定时器的初始化配置函数:

void TIM4_Init(u16 pre, u16 psc)
{

TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);

TIM_TimeBaseInitStruct.TIM_Period=pre;
TIM_TimeBaseInitStruct.TIM_Prescaler=psc;
TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseInitStruct);

TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE); 
TIM_ClearITPendingBit(TIM4, TIM_IT_Update );
NVIC_InitStructure.NVIC_IRQChannel=TIM4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);	

TIM_Cmd(TIM4,ENABLE);

}
定时器4的中断服务函数:
void TIM4_IRQHandler(void)
{

if(TIM_GetITStatus(TIM4, TIM_IT_Update))
{
	LED2=!LED2;
}
TIM_ClearITPendingBit(TIM4, TIM_IT_Update);	

}

STM32通用定时器配置步骤_第1张图片

你可能感兴趣的:(工程分类,stm32)