OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4283|回复: 1

高级定时器1 pa8脚输出pwm与定时器3中断一起用时出问题

[复制链接]

2

主题

8

帖子

1

精华

初级会员

Rank: 2

积分
187
金钱
187
注册时间
2015-4-5
在线时间
0 小时
发表于 2015-6-22 10:57:16 | 显示全部楼层 |阅读模式
5金钱

高级定时器1 pa8脚输出pwm与定时器3中断一起用时出问题

      高级定时器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 3WM(date_key);       break;
case 4UHUO();       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(初始化程序也改)就正常了,真的非常奇怪,不知道大家有没有遇到过类似情况,或者了解原因的,还请指教



最佳答案

查看完整内容[请看2#楼]

之前就有人遇到这个问题了   不知道解决没     库函数有这个问题   寄存器版本没有这个bug
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5781
金钱
5781
注册时间
2013-11-22
在线时间
1212 小时
发表于 2015-6-22 10:57:17 | 显示全部楼层
之前就有人遇到这个问题了   不知道解决没   
 库函数有这个问题   寄存器版本没有这个bug
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 18:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表