timer.c 1.55 KB
#include "timer.h"





/******************************************
* @brief:	定时器3配置
* @param:	arr		自动重装值
*			psc		分频
* @retval:	无返回值
* @note:
*******************************************/
void TIM3_Config(uint32_t arr,uint16_t psc)
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);  	///使能TIM3时钟
	
	TIM_TimeBaseInitStructure.TIM_Period 		= arr; 		//自动重装载值
	TIM_TimeBaseInitStructure.TIM_Prescaler		= psc;  	//定时器分频
	TIM_TimeBaseInitStructure.TIM_CounterMode	= TIM_CounterMode_Up; //向上计数模式
	TIM_TimeBaseInitStructure.TIM_ClockDivision	= TIM_CKD_DIV1; 
	
	TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);		//初始化TIM3
	
	TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
	TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); 				//允许定时器3更新中断
	
	//TIM_Cmd(TIM3,ENABLE); //使能定时器3
	
	NVIC_InitStructure.NVIC_IRQChannel					= TIM3_IRQn; //定时器3中断
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0x01; 	 //抢占优先级1
	NVIC_InitStructure.NVIC_IRQChannelSubPriority		= 0x01; 	 //子优先级1
	NVIC_InitStructure.NVIC_IRQChannelCmd				= ENABLE;
	NVIC_Init(&NVIC_InitStructure);
	
	
}

/*******************************
* @brief:	定时器3中断服务函数
* @param:	
* @retval:
* @note:	
********************************/
bool UART_FINISH = false;
void TIM3_IRQHandler(void)
{
	if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中断
	{	
		TIM_Cmd(TIM3,DISABLE);
		
		UART_FINISH	= true;
	}
	TIM_ClearITPendingBit(TIM3,TIM_IT_Update);  //清除中断标志位
}