OpenEdv-开源电子网

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

TIM_RepetitionCounter到底应该怎么设置

[复制链接]

13

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2013-12-7
在线时间
0 小时
发表于 2014-7-14 19:55:11 | 显示全部楼层 |阅读模式
5金钱
 请教一下,STM32F2xx系列高级定时器TIM1和TIM8的TIM_RepetitionCounter到底应该怎么设置才能生效?我的不管怎么设置,就没有效果,相当于TIM_RepetitionCounter=0. 

TIM_TimeBaseStructure.TIM_Prescaler = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseStructure.TIM_Period = TIM1_Period;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_RepetitionCounter =0x02;    //换什么值都不行  还是跟0一样

  TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

  /* Channel 1, 2,3 Configuration in PWM mode */
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
  TIM_OCInitStructure.TIM_Pulse = 0;                             
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;       
  TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;
  TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
  TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;

最佳答案

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

更改这个值得大小是为了改变进入TIM1中断的时间,避免在进入中断计算量较大时,在一个开关周期计算不完,出现错误。在这种情况在,采用向上计数模式,RPC=2。两倍的开关时间进一次中断,可以在定时器中断通过设置一个普通定时器的一个GPIO口通过函数void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)放在进入TIM中断的入口,通过示波器观察这个GPIO口的脉冲来观察变化。这也是我自己一个实验的一部分,希望能帮助到你 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2016-3-2
在线时间
0 小时
发表于 2014-7-14 19:55:12 | 显示全部楼层
更改这个值得大小是为了改变进入TIM1中断的时间,避免在进入中断计算量较大时,在一个开关周期计算不完,出现错误。在这种情况在,采用向上计数模式,RPC=2。两倍的开关时间进一次中断,可以在定时器中断通过设置一个普通定时器的一个GPIO口通过函数void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)放在进入TIM中断的入口,通过示波器观察这个GPIO口的脉冲来观察变化。这也是我自己一个实验的一部分,希望能帮助到你。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-7-14 22:53:10 | 显示全部楼层
没用过这个,帮顶。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2014-6-6
在线时间
1 小时
发表于 2014-10-14 19:59:15 | 显示全部楼层
遇到同样的问题,求解~
若要产出周期超过1s的pwm波如何设置?
回复

使用道具 举报

7

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2013-10-9
在线时间
21 小时
发表于 2016-4-27 17:17:34 | 显示全部楼层
找答案到这里,顺便说下。

TIM_RepetitionCounter 这个参数,必须配置,不能默认,不然pwm更新中断的次数不确定。

如果想每次PWM 溢出中断,TIM_RepetitionCounter配置成 0 就好。
回复

使用道具 举报

18

主题

149

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2015-11-28
在线时间
208 小时
发表于 2016-7-23 22:47:14 | 显示全部楼层
wt418995874 发表于 2016-4-27 17:17
找答案到这里,顺便说下。

TIM_RepetitionCounter 这个参数,必须配置,不能默认,不然pwm更新中断的次 ...

受教了!
回复

使用道具 举报

4

主题

178

帖子

0

精华

高级会员

Rank: 4

积分
668
金钱
668
注册时间
2019-7-28
在线时间
60 小时
发表于 2021-2-27 08:04:58 | 显示全部楼层
你是说只要简单设置这个值,以下中断就能延迟:

void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
{
    if(htim->Instance == htim1.Instance)
不用做别的设置了?
回复

使用道具 举报

4

主题

178

帖子

0

精华

高级会员

Rank: 4

积分
668
金钱
668
注册时间
2019-7-28
在线时间
60 小时
发表于 2021-4-2 09:24:29 | 显示全部楼层
TIM_RepetitionCounter= 0,表示正常中断(单次),其它程序按正常设定;

TIMx -> RCR = n ,                 表示此“中断“发生 (n+1) 次才发生中断,避免了反复进中断的麻烦,减少了MPU资源消耗。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 05:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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