调试编码器时中断函数无法执行
#include "timer.h"
#include "timer.h"
#include "sys.h"
#include "bmq.h"
#include "pid.h"
#include "led.h"
extern float encoder1;
extern float speed;
extern int PID_left;
extern int PID_right;
extern float mid1;
extern float mid2;
extern int Sv;
//arr:自动重装值
//psc:时钟预分频数
static void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel =TIM5_IRQn; //TIM5中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 4; //抢占优先级0级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4; //从优先级3级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器
}
/*TIM1 定时器中断
抢占优先级4
子优先级4*/
void TIM5_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB2PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); //使能定时器5时钟
TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
TIM_ITConfig(TIM5,TIM_IT_Update,ENABLE);
NVIC_Configuration();
//中断优先级NVIC设置
TIM_Cmd(TIM5, ENABLE);
}
//定时器1中断服务程序
void TIM5_UP_IRQHandler(void) //TIM5中断
{
if(TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET)//检查指定的TIM中断发生与否:TIM 中断源
{
LED1 =!LED1;
//应用代码编写区
mid1 = Read_Encoder(4); printf("%f",mid1);
//mid2=Read_Encoder(4)
encoder1 = panduan_PID(mid1);
//encoder2=panduan_PID(mid2)
speed = encoder1/1560/0.01;
//speed2 = encoder2/1560/0.01;
PID_left=Realize_PID_left (encoder1); //===位置PID控制器
//PID_right=Realize_PID_left (encoder1); //===位置PID控制器
Xianfu_Pwm();
if((Sv- encoder1)>=10||(Sv - encoder1)<=-10)
{
Set_Pwm(PID_left);
}
TIM_ClearITPendingBit(TIM1, TIM_IT_Update);//清除TIMx的中断待处理位:TIM 中断源
}
}
void ENABLE_LED1(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); //时钟使能
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//使能GPIOE
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GPIOE,&GPIO_InitStructure);
}
这是中断函数