8862|8

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

如何在中断中改变PWM的周期?或者占空比? [复制链接]

 TIM_TimeBaseInitTypeDef TIM_BaseInitStructure;
    TIM_OCInitTypeDef  TIM_OCInitStructure;

    TIM_BaseInitStructure.TIM_Period = 65535;
    TIM_BaseInitStructure.TIM_Prescaler = 17;
    TIM_BaseInitStructure.TIM_ClockDivision = 0;
    TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_BaseInitStructure.TIM_RepetitionCounter = 0;
    TIM_TimeBaseInit(TIM3, &TIM_BaseInitStructure);
   
    TIM_ARRPreloadConfig(TIM3,DISABLE);
    //TIM_ARRPreloadConfig(TIM3, ENABLE);
    
    TIM_UpdateRequestConfig(TIM3,TIM_UpdateSource_Regular);

    
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
    TIM_OCInitStructure.TIM_Pulse = CCR1_Val;
    TIM_OC1Init(TIM3, &TIM_OCInitStructure);
   
    TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);

    
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
    TIM_OCInitStructure.TIM_Pulse = CCR2_Val;
    TIM_OC2Init(TIM3, &TIM_OCInitStructure);

    TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
    
 
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
    TIM_OCInitStructure.TIM_Pulse = CCR3_Val;
    TIM_OC3Init(TIM3, &TIM_OCInitStructure);

    TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
    

    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
    TIM_OCInitStructure.TIM_Pulse = CCR4_Val;
    TIM_OC4Init(TIM3, &TIM_OCInitStructure);

    TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);

    
    TIM_ITConfig(TIM3,TIM_IT_CC1 | TIM_IT_Update,ENABLE);
   

    TIM_Cmd(TIM3, ENABLE);

    TIM_CtrlPWMOutputs(TIM3, ENABLE);
此帖出自stm32/stm8论坛

最新回复

                                 void SysTickHandler(void){ static unsigned char j=0;  savetime++;  if (savetime >100)  {     savetime = 0;     savetime1++;          if(savetime1>100)       savetime1=0;     //TIM3_Configuration();      j++;      TIM3->CCR1=sindata[j];      TIM3->CCR2=sindata[j];      TIM3->CCR3=sindata[j];      TIM3->CCR4=sindata[j];      if(j>7)j=0;      }}   详情 回复 发表于 2009-1-8 13:49
点赞 关注
 

回复
举报

65

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

中断函数:

void TIM3_IRQHandler(void)
{

    TIM_OCInitTypeDef  TIM_OCInitStructure;


  
  if (TIM_GetITStatus(TIM3, TIM_IT_CC1) != RESET)
  {
       TIM_ClearITPendingBit(TIM3, TIM_IT_CC1);
       
     savetime_2+=1;
     if(savetime_2>100)
     {
       savetime_2=0;
       savetime_3+=1;
       if(savetime_3>100)
       {
         savetime_3=0;
         
         CCR1_Val++;
        if(CCR1_Val>60000)
          CCR1_Val=511;
        TIM_OCInitStructure.TIM_Pulse = CCR1_Val;
        TIM_OC1Init(TIM3, &TIM_OCInitStructure);
            
        GPIO_SetBits(GPIOF, GPIO_Pin_9); //关LED4
        GPIO_ResetBits(GPIOF, GPIO_Pin_8);  //关LED5
        GPIO_SetBits(GPIOF, GPIO_Pin_7); //关LED6
        GPIO_ResetBits(GPIOF, GPIO_Pin_6);  //关LED7
       }
     }
   
    
    
  }
  else if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
  {
    TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
    
    savetime_4+=1;
     if(savetime_4>100)
     {
       savetime_4=0;
       savetime_1+=1;
       if(savetime_1>100)
       {
         savetime_1=0;
         
         CCR2_Val++;
        if(CCR2_Val>32768)
          CCR2_Val=511;
        TIM_OCInitStructure.TIM_Pulse = CCR2_Val;
        TIM_OC2Init(TIM3, &TIM_OCInitStructure);
            
        GPIO_ResetBits(GPIOF, GPIO_Pin_9); //关LED4
        GPIO_SetBits(GPIOF, GPIO_Pin_8);  //关LED5
        GPIO_ResetBits(GPIOF, GPIO_Pin_7); //关LED6
        GPIO_SetBits(GPIOF, GPIO_Pin_6);  //关LED7
       }
     }
     
    
    
  } 

}
此帖出自stm32/stm8论坛
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

===

                                 是不是还有那些地方没设置对?????
此帖出自stm32/stm8论坛
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

4
 

请先解释一下这是什么程序?

                                 哪些语句是做什么事情的?
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

5
 

我想在TIM3中断改变他的占空比...

                                 这个程序在TIM3输出PWM没问题,中断也可以进去.(我在中断中记数,在LCD显示,中断可以进去)
此帖出自stm32/stm8论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

6
 

请说清楚TIM3的几个通道是如何用的?

                                 TIM3的中断是什么中断?
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

7
 

都输出PWM...中断设置如下:谢谢...

TIM_ITConfig(TIM3,TIM_IT_CC1 | TIM_IT_Update,ENABLE);
此帖出自stm32/stm8论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

8
 

顶.....

期待斑竹给讲讲.谢谢..
需要设置的地方太多了...
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

9
 

这样就可以了。谢谢斑竹,参考了一个网友的例子.

void SysTickHandler(void)
{
 static unsigned char j=0;
  savetime++;

  if (savetime >100)
  {

     savetime = 0;
     savetime1++;
     
     if(savetime1>100)
       savetime1=0;

     //TIM3_Configuration();
      j++;
      TIM3->CCR1=sindata[j];
      TIM3->CCR2=sindata[j];
      TIM3->CCR3=sindata[j];
      TIM3->CCR4=sindata[j];
      if(j>7)j=0;
    

  }

}
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表