STM32 Timer1 TIM1 中断

/*定时器1ms中断,死等定时器延时*/
/*File Timer.c */
#include "stm32f10x.h"


unsigned int TimeDelay = 0;
void TIM1_Configuration(void)
{
 	NVIC_InitTypeDef NVIC_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

	TIM_DeInit(TIM1);											/*复位TIM1定时器*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);		/*开时钟*/
	TIM_TimeBaseStructure.TIM_Period = 100;						/*时钟滴答的次数,够数中断这里是1ms中断一次*/     
	TIM_TimeBaseStructure.TIM_Prescaler = 720-1;				/* 分频720*/       
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;  	 	  
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;	/*计数方向向上计数*/
	TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
	
	/* Clear TIM1 update pending flag  清除TIM1溢出中断标志]  */
	TIM_ClearFlag(TIM1, TIM_FLAG_Update); 				
	NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;			/*溢出中断*/
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;  
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);
	TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);					/* Enable TIM1 Update interrupt TIM1溢出中断允许*/
}

void Timer1Config(void)
{
	TIM1_Configuration();
}

void TimeDelayMs(unsigned int Num)
{	
	TimeDelay = Num;
	TIM1->CNT = 0;
	TIM1->CR1 |= TIM_CR1_CEN;							/*开启Timer1计数*/
	while(TimeDelay);
	TIM1->CR1 &= (uint16_t)(~((uint16_t)TIM_CR1_CEN));	/*关闭Timer1*/	
}


/*File stm32f10x_it.c */
/*添加中断处理函数*/
void TIM1_UP_IRQHandler(void)
{
	gUINT32 CPUStatus;
	
	G_ENTER_CRITICAL();
	TIM_ClearFlag(TIM1, TIM_FLAG_Update);
	if(TimeDelay > 0)
	{
		TimeDelay--;
	}
	G_EXIT_CRITICAL();	
}



/*File startup_stm32f10x_hd.s*/
/*添加中断入口*/
TIM1_UP_IRQHandler PROC
				EXPORT  TIM1_UP_IRQHandler       	 [WEAK]
                B       .
                ENDP
				
;//去掉下面代码;
EXPORT  TIM1_UP_IRQHandler         [WEAK]

;//也去掉这个;
TIM1_UP_IRQHandler   


/*File Main.c*/
void main()
{
	Timer1Config();
	for(;;)
	{	
//		G_DEBUGF(G_DEBUG_ALWAYS,("LED_ON\r\n"));
		GPIO_ResetBits(GPIOB,GPIO_Pin_4);
		TimeDelayMs(1000);
//		G_DEBUGF(G_DEBUG_ALWAYS,("LED_OFF\r\n"));
		GPIO_SetBits(GPIOB,GPIO_Pin_4);
		TimeDelayMs(1000);	
	}
}


 

你可能感兴趣的:(STM32)