高级定时器1 pa8脚输出pwm与定时器3中断一起用时出问题,单独时候的时候都没有问题。想用TIM1  

A8脚输出占空比可变化的脉冲,用于呼吸灯,没有用到中断时这个程序测试可以用,占空比做周期性均匀增大--减小。但是一旦加入定时器3中断,这个占空比变化就不再均匀,而是跳变。正常情况下pwm占空比每隔10ms就+1或-1,但是加入中断后pwm占空比隔了很久(上百ms吧,总之大于10ms)才会改变一次,而且改变量也不是1,变话缓慢而且不均匀。 后面把高级定时器1pwm的程序改成定时器4,输出脚PB6,程序就正常了。
高级定时器1 pa8脚输出pwm与定时器3中断一起用时在我这已近第三次出问题了(有时更改两者的初始化顺序就可以用了),至今没找到原因,希望大家可以帮忙解决下
int main()
{
uint8_t sz,j,date_key=0;//j??×? key?ü??
NVIC_Configuration();
delay_init();
timerTIM1_init(999,719);//定时器1pwm
TIM2_Cap_Init(0XFFFF,72-1); //??1Mhz??????????
KEY_Init();
LCD_init();
adc_init();
timer_init(99,7199);// 中断 10ms
while(1)
{
if(sign_zd==1) //10ms到?
{
sign_zd =0; //if(++sz==100){sz=0;if(++date_sz>=86400) date_sz=0;}//
date_key=KEY_Scan(0);
if(date_key==1) {j++;if(j>=5)j=0;date_key=0;clear();TIM_SetCompare1(TIM4,0 );}//
if(j==4) TIM_Cmd(TIM2,ENABLE );
else TIM_Cmd(TIM2,DISABLE ); //
switch (j)//散转
{
case 0:TIME(); break;
case 1:SET_TIME(date_key); break;
case 2:AD(); break;
case 3

WM(date_key); break;
case 4

UHUO(); break;
default : break;
}
}
}
}
///////////////////////////////////////子函数//////////////////////////////////////////
void PWM(uint8_t a)
{
LCD_WriteStr(1,1,"PWM????");
// if(a==3&&date_pwm<1000)date_pwm+=100;//°??ü???? ?÷???è??
// if(a==4&&date_pwm>=100)date_pwm-=100;
if(date_pwm_a==0){if(date_pwm++>950)date_pwm_a=1;}//变化的占空比
else {if(date_pwm--==1) date_pwm_a=0;}
TIM_SetCompare1(TIM1,date_pwm );//TIM_SetCompare(1 2 3 4)
play_number(2,4,date_pwm);
}
//////////////////////////////////////////中断//////////////////////////////////////////////
void TIM3_IRQHandler(void) //
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //
sign_zd=1;//只用来标记10ms到
}
}
就是以上程序,把定时器1产生pwm改成 定时器4产生pwm(初始化程序也改)就正常了,真的非常奇怪,不知道大家有没有遇到过类似情况,或者了解原因的,还请指教