我参考原子哥的程序,然后自己写了个,第一次写的时候,配置大多是复制上次定时的代码,所以配置了定时中断(中断向量和中断使能都配置好了)。然后输出波形一直是高电平。把中断向量配置中的中断去掉后才现在正确的波形。
我的问题:为什么开启中断向量后,一直出现高电平?
下面是一直输出高电平的配置
void NVIC_Configuration(void) //NVIC配置
{
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //中断组0
NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0); //中断向量FLASH
NVIC_InitStruct.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级0
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0; //从优先级0
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; //中断向量使能
NVIC_Init(&NVIC_InitStruct);
}
void TIM2_Configuration(void) //1m定时
{
TIM_TimeBaseInitTypeDef TIM_BaseInitStruct;
TIM_OCInitTypeDef TIM_OCInitStruct;
TIM_BaseInitStruct.TIM_Period = 900; //重载值
TIM_BaseInitStruct.TIM_Prescaler = 0; //预分频值
TIM_BaseInitStruct.TIM_ClockDivision = 0;
TIM_BaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; //向上计数0 ~ Period
TIM_TimeBaseInit(TIM2,&TIM_BaseInitStruct); //定时器寄存器初始化
TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStruct.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
TIM_OC2Init(TIM2, &TIM_OCInitStruct); //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable); //使能TIMx在CCR2上的预装载寄存器
TIM_ARRPreloadConfig(TIM2, ENABLE); //使能TIMx在ARR上的预装载寄存器
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); //TIM中断使能
TIM_Cmd(TIM2,ENABLE); //定时器使能
}
下面是输出正确波形的配置
void NVIC_Configuration(void) //NVIC配置
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //中断组0
NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0); //中断向量FLASH
}
void TIM2_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_BaseInitStruct;
TIM_OCInitTypeDef TIM_OCInitStruct;
TIM_BaseInitStruct.TIM_Period = 900; //重载值
TIM_BaseInitStruct.TIM_Prescaler = 0; //预分频值
TIM_BaseInitStruct.TIM_ClockDivision = 0;
TIM_BaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; //向上计数0 ~ Period
TIM_TimeBaseInit(TIM2,&TIM_BaseInitStruct); //定时器寄存器初始化
TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStruct.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
TIM_OC2Init(TIM2, &TIM_OCInitStruct); //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable); //使能TIMx在CCR2上的预装载寄存器
TIM_ARRPreloadConfig(TIM2, ENABLE); //使能TIMx在ARR上的预装载寄存器
TIM_Cmd(TIM2,ENABLE); //定时器使能
}
|