STM32F0系列开发之定时器的使用

以下源码以定时器3为例,其他可以以此类推

.c文件

#include "Time.h"

void TIM3_Int_Init(uint32_t time_us)
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
	NVIC_InitTypeDef NVIC_InitStructure;

	unsigned char prescaler = 1;
	unsigned char clkDiv = 1;//根据“TIM_ClockDivision”的分频比来定
	unsigned long period = time_us*(SystemCoreClock/1000000) / (prescaler * clkDiv);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

	TIM_TimeBaseStructure.TIM_Period = period;
	TIM_TimeBaseStructure.TIM_Prescaler = prescaler - 1;	//时钟再分频,会影响TIM_Period的效果
	TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;	//时钟分频,会影响PWM的计数个数
	TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

	TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断

	NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPriority=1;
	NVIC_Init(&NVIC_InitStructure); 

	TIM_Cmd(TIM3, ENABLE);	
}

void TIM3_IRQHandler(void)   //TIM3中断
{
	if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否
		{	  
			
		TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  //清除TIMx更新中断标志 

		}
}

.h文件

#ifndef _TIME_H
#define _TIME_H
#include "stm32f0xx.h"

void TIM3_Int_Init(uint32_t time_us);

#endif

猜你喜欢

转载自blog.csdn.net/LinQiPing233/article/details/89032511