[mw_shl_code=c,true]//定时器3中断服务程序
void TIM3_IRQHandler(void) //500ms中断一次
{
if(TIM3->SR&0X0001)//溢出中断
{
LED0=!LED0;
LED3=!LED3;
}
TIM3->SR&=~(1<<0);//清除中断标志位
}
//通用定时器中断初始化
//这里时钟选择为APB1的2倍,而APB1为36M
//arr:自动重装值。
//psc:时钟预分频数
//这里使用的是定时器3!
void TIM3_Int_Init(u16 arr,u16 psc) //500ms中断一次
{
RCC->APB1ENR|=1<<1; //TIM3时钟使能
TIM3->ARR=arr; //设定计数器自动重装值
TIM3->

SC=psc; //预分频器设置
TIM3->DIER|=1<<0; //允许更新中断
TIM3->CR1|=0x01; //使能定时器3
MY_NVIC_Init(3,1,TIM3_IRQn,2);//抢占1,子优先级3,组2
}
//定时器 4 中断服务程序
void TIM4_IRQHandler(void) //1ms中断一次
{
static u8 i=0;
if(TIM4->SR&0X0001) //溢出中断
{
TIM4->SR&=~(1<<0); //清除中断标志位
//中断函数执行时间大于1ms
Angle_Calcu(); //计算角加速度
Kalman_Filter_X(Angle_x,Gyro_y); //卡尔曼滤波器
Yijielvbo(Angle_x,Gyro_y); //一阶滤波算法
Erjielvbo(Angle_x,Gyro_y);
}
}
//通用定时器 4 中断初始化
//这里时钟选择为 APB1 的 2 倍,而 APB1 为 36M
//arr:自动重装值。
//psc:时钟预分频数
//这里使用的是定时器 4!
void TIM4_Int_Init(u16 arr,u16 psc) //1ms中断一次
{
RCC->APB1ENR|=1<<2; //TIM4 时钟使能,TIM4在APB1上;T2~T7都在APB1
TIM4->ARR=arr; //设定计数器自动重装值//刚好 1ms
TIM4->

SC=psc; //预分频器 7200,得到 10Khz 的计数时钟
TIM4->DIER|=1<<0; //允许更新中断
TIM4->CR1|=0x01; //使能定时器 4
MY_NVIC_Init(1,1,TIM4_IRQn,2);//抢占 1,子优先级 2,组 2
}[/mw_shl_code]
[mw_shl_code=c,true]谢谢![/mw_shl_code]