打印
[STM32F4]

f405的定时器问题(求大神解答!!!)

[复制链接]
1049|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kaoya123|  楼主 | 2017-6-26 09:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想写一个tim定时器输出一个频率可变的pwm波形的程序,用for循环改变tim定时器的自动重载值。可是从第一个for循环跳到第二个for循环的时候tim定时器不输出pwm波形了,用断点判断程序是执行了tim的初始化和配置步骤的。
for(freq=3000;freq<=7000;freq+=100)
{
    TIM2_Init(freq);            
  }
for(freq=freq-100;freq<=freq+100;freq+=10)
{
  TIM2_Init(freq);  
}

下面是定时器的配置函数
void TIM2_cfg(int freq)
{

  PrescalerValue = 0;
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

  freq=42000000/freq-1;
  TIM_TimeBaseStructure.TIM_Period =freq;
  TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

  TIM_PrescalerConfig(TIM2, PrescalerValue, TIM_PSCReloadMode_Immediate);

  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = freq/2;

  TIM_OC1Init(TIM2, &TIM_OCInitStructure);

  TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Disable);

  TIM_ARRPreloadConfig(TIM2, ENABLE);

  TIM_ClearITPendingBit(TIM2, TIM_IT_Update);

  TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);

  TIM_Cmd(TIM2, ENABLE);
}
沙发
xmshao| | 2017-6-26 11:38 | 只看该作者
没看明白你的从第一个for跳到第二个for循环。
你貌似是说你本可以输出PWM了,说明PWM配置这块没啥问题。
问题可能出在别的代码及变量方面。

不过,你在for循环里不停的初始化TMER及PWM,你到底干什么呢?

使用特权

评论回复
板凳
mmuuss586| | 2017-6-26 12:19 | 只看该作者
你2个FOR循环里面,程序一样的;
正常不会有问题啊;
如果是执行了,看定时器相关的CCR值有没有变

使用特权

评论回复
地板
kaoya123|  楼主 | 2017-6-26 12:47 | 只看该作者
xmshao 发表于 2017-6-26 11:38
没看明白你的从第一个for跳到第二个for循环。
你貌似是说你本可以输出PWM了,说明PWM配置这块没啥问题。
问 ...

就是让pwm输出不同的波形

使用特权

评论回复
5
kaoya123|  楼主 | 2017-6-27 10:39 | 只看该作者
mmuuss586 发表于 2017-6-26 12:19
你2个FOR循环里面,程序一样的;
正常不会有问题啊;
如果是执行了,看定时器相关的CCR值有没有变 ...

TIM_TimeBaseStructure.TIM_Period =freq,这个寄存器的值确实是变了,但是并没有输出pwm波形

使用特权

评论回复
6
kaoya123|  楼主 | 2017-6-27 11:18 | 只看该作者
问题解决了,把freq重新赋给一个值,在把这个值赋给TIM_TimeBaseStructure.TIM_Period 才行,只是不明白为什么会这样

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝