5882|10

61

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请问TIMx中断如何捕获?PWM [复制链接]



利用TIM3 CH3产生了一个PWM,并且想动态改变占空比,利用如下中断程序测试指示灯无反应,请问为什么?
/* -----------------------------------------------------------------------
    TIM3 Configuration: generate PWM signal with duty cycle:
    TIM3 CLK = 36 MHz, Prescaler = 0x0, TIM3 counter clock = 36 MHz
    TIM3 ARR Register = 719 => TIM3 Frequency = TIM3 counter clock/(ARR + 1)
    TIM3 Frequency = 100 KHz.
    TIM3 Channel1 duty cycle = (TIM3_CCR1/ TIM3_ARR)* 100 = 50%     CRRx_Val = 360
    TIM3 Channel2 duty cycle = (TIM3_CCR2/ TIM3_ARR)* 100 = 37.5%
    TIM3 Channel3 duty cycle = (TIM3_CCR3/ TIM3_ARR)* 100 = 25%     CRRx_Val = 180
    TIM3 Channel4 duty cycle = (TIM3_CCR4/ TIM3_ARR)* 100 = 12.5%
  ----------------------------------------------------------------------- */

  /* Time base configuration */
  TIM_TimeBaseStructure.TIM_Period = 719;
  TIM_TimeBaseStructure.TIM_Prescaler = 0;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
  
  
  // Clear TIM2 update pending flag
  TIM_ClearFlag(TIM3, TIM_FLAG_Update);
  
  // Enabel interrupt
  //TIM_ITConfig(TIM3, TIM_IT_CC3, ENABLE);
  TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
  
  
  //TIM_UpdateRequestConfig(TIM3,TIM_UpdateSource_Regular);
  
  

   /* PWM1 Mode configuration: Channel3 */
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = CCR_Val;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  TIM_OC3Init(TIM3, &TIM_OCInitStructure);
  TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
  //TIM_ARRPreloadConfig(TIM3,DISABLE);
  TIM_ARRPreloadConfig(TIM3, ENABLE);



  /* TIM3 enable counter */
  TIM_Cmd(TIM3, ENABLE);


void TIM3_IRQHandler(void)
{
    if (TIM_GetITStatus(TIM3, TIM_IT_CC3)!= RESET)
    {
        
        GPIO_WriteBit(GPIO_LED, GPIO_LED0_PIN, (BitAction)((1-GPIO_ReadOutputDataBit(GPIO_LED, GPIO_LED0_PIN))));
        //IC3value = TIM_GetCapture3(TIM3);
   
        TIM_ClearITPendingBit(TIM3, TIM_IT_CC3);
    }
}
另外还有个问题: "在中断里面放一个变量自加,再观察变量是否变化,可以检查I/O配置是否正确" 这个方法具体如何操作?斑竹能否指教一二,谢谢
此帖出自stm32/stm8论坛

最新回复

                                  原来是这样,多谢提醒. 再请问一下,是否必须使用另一个计时器进行捕获,还是也可以用本计时器的其他通道只能是用一个引脚产生PWM波,用另一个引脚进行中断捕获   详情 回复 发表于 2010-3-10 00:03
点赞 关注
 

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
                                 把你的初始化程序贴出来。
此帖出自stm32/stm8论坛
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
                                 应该是初始化没配置好
此帖出自stm32/stm8论坛
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

4
 
初始化如下,已经可以在示波器上看到所设定的访波信号,各位高手请帮我看看
/* -----------------------------------------------------------------------
    TIM3 Configuration: generate PWM signal with duty cycle:
    TIM3 CLK = 36 MHz, Prescaler = 0x0, TIM3 counter clock = 36 MHz
    TIM3 ARR Register = 719 => TIM3 Frequency = TIM3 counter clock/(ARR + 1)
    TIM3 Frequency = 100 KHz.
    TIM3 Channel1 duty cycle = (TIM3_CCR1/ TIM3_ARR)* 100 = 50%     CRRx_Val = 360
    TIM3 Channel2 duty cycle = (TIM3_CCR2/ TIM3_ARR)* 100 = 37.5%
    TIM3 Channel3 duty cycle = (TIM3_CCR3/ TIM3_ARR)* 100 = 25%     CRRx_Val = 180
    TIM3 Channel4 duty cycle = (TIM3_CCR4/ TIM3_ARR)* 100 = 12.5%
  ----------------------------------------------------------------------- */

  /* Time base configuration */
  TIM_TimeBaseStructure.TIM_Period = 719;
  TIM_TimeBaseStructure.TIM_Prescaler = 0;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
  
  
  // Clear TIM2 update pending flag
  TIM_ClearFlag(TIM3, TIM_FLAG_Update);
  
  // Enabel interrupt
  //TIM_ITConfig(TIM3, TIM_IT_CC3, ENABLE);
  TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
  
  
  //TIM_UpdateRequestConfig(TIM3,TIM_UpdateSource_Regular);
  
  

   /* PWM1 Mode configuration: Channel3 */
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = CCR_Val;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  TIM_OC3Init(TIM3, &TIM_OCInitStructure);
  TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
  //TIM_ARRPreloadConfig(TIM3,DISABLE);
  TIM_ARRPreloadConfig(TIM3, ENABLE);



  /* TIM3 enable counter */
  TIM_Cmd(TIM3, ENABLE);
此帖出自stm32/stm8论坛
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

5
 
                                 可以在示波器上看到所设定的访波信号?意思是说有波形,指示灯没反应?
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

6
 
                                 是的,可以看到波形,并且频率和占空比也正确,但就是不能捕获中断
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

7
 
                                 顶一下,香版帮帮忙
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

8
 
                                 标题是"捕获",帖子中又说"波形",还有什么指示灯,实在不明白在说什么。
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

9
 
                                 我的意思是:利用TIM3产生了一个PWM信号,并且想在这个信号的上升沿进中断toggle指示灯,之前笨笨的一个贴子里提到过,可是为什么在我这不灵呢?
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

10
 
                                 只能是用一个引脚产生PWM波,用另一个引脚进行中断捕获
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

11
 


原来是这样,多谢提醒.
再请问一下,是否必须使用另一个计时器进行捕获,还是也可以用本计时器的其他通道
只能是用一个引脚产生PWM波,用另一个引脚进行中断捕获
此帖出自stm32/stm8论坛
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
Microchip 直播|利用motorBench开发套件高效开发电机磁场定向控制方案 报名中!
直播主题:利用motorBench开发套件高效开发电机磁场定向控制方案
直播时间:2025年3月25日(星期二)上午10:30-11:30
快来报名!

查看 »

 
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
快速回复 返回顶部 返回列表