打印
[STM8]

STM8L定时器怎么出来一个PPM脉冲???

[复制链接]
4085|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
thinkingpadcui|  楼主 | 2011-8-18 15:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用stm8l的tim2想出来有6个脉冲(每个脉冲的周期在1000us到2500us之间)开头为3000us低电平的PPM。程序如下:
//tim2配置如下:
void TIM2_init(void)
{
  TIM2_DeInit();
  TIM2_TimeBaseInit(TIM2_Prescaler_8,TIM2_CounterMode_Up,999);//1ms
  /* Channel 1 configuration in PWM1 mode */
  /* TIM2 channel Duty cycle is 100 * TIM2_PULSE / (TIM2_PERIOD + 1) = 100 * 4/8 = 50 % */
  TIM2_OC1Init(TIM2_OCMode_PWM1, TIM2_OutputState_Enable,500, TIM2_OCPolarity_Low, TIM2_OCIdleState_Set);
  /* TIM2 Main Output Enable */
  TIM2_CtrlPWMOutputs(ENABLE);
  
  TIM2_Cmd(ENABLE);//使能定时器
}

//主函数:
u16 dbuf[6]={1000,2000,3000,4000,5000,6000};
void main (void)
{
  
   init_cpu();
  while(1)
  {
  //TIM2->ARRH = dbuf[1]>>8;//0x03;
  //TIM2->ARRL = dbuf[1];//0xe7;
  TIM2->ARRH = dbuf[fsm]>>8;//0x03;
  TIM2->ARRL = dbuf[fsm++];//0xe7;
  if(fsm==6) fsm=0;
  }
  
}
有stm8l的PDF可知TIM2->ARRH和TIM2->ARRL这两个寄存器可以改变发出波形的周期,当我只写  TIM2->ARRH = dbuf[1]>>8;//0x03;
  TIM2->ARRL = dbuf[1];//0xe7;时能发出周期为2000us的波形。
可是当我写   TIM2->ARRH = dbuf[fsm]>>8;//0x03;
  TIM2->ARRL = dbuf[fsm++];//0xe7;
  if(fsm==6) fsm=0;时,却等不到我想要的波形(每六个脉冲为一桢数据。第一个脉冲为1000us,。。。第六个脉冲为6000us,每个脉冲的周期由上面的dbuf决定)。
不知道问题处在哪边?望高手指点。
沙发
thinkingpadcui|  楼主 | 2011-8-19 12:24 | 只看该作者
是问题太简单还是没人用过的???怎么没人答复的????

使用特权

评论回复
板凳
thinkingpadcui|  楼主 | 2011-8-24 13:39 | 只看该作者
求人不如求自己,完满完成。大家觉得问题简单,我也就不和大家分享了。

使用特权

评论回复
地板
okeybomb| | 2014-11-5 16:20 | 只看该作者
求分享。。。。

使用特权

评论回复
5
joyme| | 2014-11-5 17:09 | 只看该作者
应该在中断里重新赋值而不是在主循环里赋值

使用特权

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

本版积分规则

0

主题

42

帖子

1

粉丝