新手上路
- 积分
- 30
- 金钱
- 30
- 注册时间
- 2016-10-29
- 在线时间
- 12 小时
|
1金钱
定时器中断实验问题: 我在中断服务函数中添加了一句 delay_ms(1); 程序就不能正常执行,而把这句delay_ms(1);注释掉就可以。我的定时中断设为500ms。
这是定时器初始化函数
#include "sys.h"
#include "led.h"
#include "timer.h"
#include "delay.h"
void Timer2_INT_Init(u16 arr,u16 psc) //arr:自动重装值 psc:时钟预分频数
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
NVIC_InitTypeDef NVIC_InitStructure; //TIME2 初始化
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //TIM2 时钟使能
TIM_TimeBaseInitStruct.TIM_Period=arr; //重装载时间
TIM_TimeBaseInitStruct.TIM_Prescaler=psc ; //设置预分频寄存器 对时钟进行分频,然后提供给计数器,作为计数器的时钟。
TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1; //设置时钟分频因子。
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up; //设置计数方式。
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE ); //设置 TIM2_DIER 允许更新中断。
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ; //抢占优先级 3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级 3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ 通道使能
NVIC_Init(&NVIC_InitStructure);
TIM_Cmd(TIM2, ENABLE); //使能 TIM2 外设
}
void TIM2_IRQHandler()
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
delay_ms(1);
LED1=~LED1;
}
}
|
|