打印

问个简单的TIM问题.

[复制链接]
4259|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mzscg|  楼主 | 2008-8-5 10:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
 大家帮我看看程序吧,,我想在TIM3的channel1中输出同频率但不同占空比的PWM..采用的策略是当TIM3发生TIM_IT_Update时,修改CCR1的值..
但用下面的程序,程序一运行到倒数第二行TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
就死掉了...不知道什么原因..
如果去去掉这个语句,则正常运行,输出占空比为50%的波形,,,这个有点废话了...
俺对TIM不甚了解,大虾看看


在main.c中这样来设置TIM3和Channel1

  TIM_TimeBaseStructure.TIM_Period = 9999;
  TIM_TimeBaseStructure.TIM_Prescaler = 0;
  TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV4;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

  /* PWM1 Mode configuration: Channel1 */
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = CCR1_Val;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  TIM_OC1Init(TIM3, &TIM_OCInitStructure);
  TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Disable);

  /* PWM1 Mode configuration: Channel2 */
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = CCR2_Val;

  TIM_OC2Init(TIM3, &TIM_OCInitStructure);

TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Disable);

  /* PWM1 Mode configuration: Channel3 */
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = CCR3_Val;

  TIM_OC3Init(TIM3, &TIM_OCInitStructure);

TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Disable);

  /* PWM1 Mode configuration: Channel4 */
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = CCR4_Val;

  TIM_OC4Init(TIM3, &TIM_OCInitStructure);

 TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Disable);

TIM_ARRPreloadConfig(TIM3, ENABLE);
  TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
  /* TIM3 enable counter */
  TIM_Cmd(TIM3, ENABLE);
在stm3210x_it.c中,来设置中断.
u16 f[]={5000,3750,2500,1250};
u8 i=1;
void TIM3_IRQHandler(void)
{
  if (TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)
  {
    TIM_SetCompare1(TIM3,f);
  i++;
  if(i==3)i=0;
 TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
  }
}
沙发
mzscg|  楼主 | 2008-8-5 10:43 | 只看该作者

自己来顶一下.....

发现STM32的库函数读起来真正是不容易啊,,尤其是书写...忍着..

使用特权

评论回复
板凳
mzscg|  楼主 | 2008-8-5 10:53 | 只看该作者

香水,帮帮忙吧,,,,

香水,抽点时间看看啊.

使用特权

评论回复
地板
mzscg|  楼主 | 2008-8-5 11:10 | 只看该作者

CCRx和ARR的预装载

到现在为止还没有搞清楚预装载的作用???

谁告诉我.

使用特权

评论回复
5
mzscg|  楼主 | 2008-8-5 14:24 | 只看该作者

还是没有人回答我..

等待啊..

使用特权

评论回复
6
ST_ARM| | 2008-8-5 14:30 | 只看该作者

你下面的代码出错

TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Disable);
                           ^^^^^^^^^^^^^^^^^^^^^^
应该为TIM_OCPreload_Enable。

使用特权

评论回复
7
mzscg|  楼主 | 2008-8-5 14:33 | 只看该作者

回ST_ARM,不会,为什么要启动预装载呢??

我试试看.

使用特权

评论回复
8
mzscg|  楼主 | 2008-8-5 14:37 | 只看该作者

ST_ARM兄弟

你说得不对啊,,,错误应该不是你说的啊....
我试过了,,没有用,,,,不该开预装载才对的....

谁告诉我预装载的具体作用,到现在都还迷胡..

使用特权

评论回复
9
mzscg|  楼主 | 2008-8-5 14:41 | 只看该作者

TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE)就死掉

加上这个语句就没有办法开启TIM了,
就是CNT都没有开始计数,,,

一运行到这个语句就死在那了...

使用特权

评论回复
10
mzscg|  楼主 | 2008-8-5 14:59 | 只看该作者

召唤香水,,,,香水今天一直没有出现过...

香水快出现

使用特权

评论回复
11
ST_ARM| | 2008-8-5 16:56 | 只看该作者

请贴一下你的NVIC初始化设置的代码

使用特权

评论回复
12
mzscg|  楼主 | 2008-8-5 17:23 | 只看该作者

搞定了,,净给自己整麻烦,

中断向量放错地方了,,
我在问了下,在库中,,
TIM_Prescaler,TIM_ClockDivision都是用来分TIM clock的,可TIM_ClockDivision总是没有用啊,给我讲讲他们的用**?????

这库说明写得看人头疼....

使用特权

评论回复
13
香水城| | 2008-8-5 18:09 | 只看该作者

哈哈,看样子下次你问问题时需要给你一段冷静期,可以好

我们还特意就你的问题作了一个实验,很奇怪为什么你那里有问题~~~~~~~

TIM_ClockDivision是指如果使用TIM的输入功能,采样时有一个滤波器,可以是每个TIM时钟采样一次,或每两个TIM时钟采样一次,也可以每四个TIM时钟采样一次,这样可以减少干扰。如果你不用TIM的输入功能,当然不起作用。

使用特权

评论回复
14
mzscg|  楼主 | 2008-8-6 09:24 | 只看该作者

谢谢香水,,,

主要是看库说明有时候看得烦了,就上来问了,,,,呵呵,,,

使用特权

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

本版积分规则

51

主题

234

帖子

0

粉丝