×
单片机 > 单片机程序设计 > 详情

STM32 Timer1 TIM1 中断

发布时间:2020-05-18 发布时间:
|

/*定时器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 "));

GPIO_ResetBits(GPIOB,GPIO_Pin_4);

TimeDelayMs(1000);

// G_DEBUGF(G_DEBUG_ALWAYS,("LED_OFF "));

GPIO_SetBits(GPIOB,GPIO_Pin_4);

TimeDelayMs(1000);

}

}




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会