搜索
bottom↓
回复: 2

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

[复制链接]

出0入0汤圆

发表于 2011-8-18 15:13:04 | 显示全部楼层 |阅读模式
我用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决定)。

不知道问题处在哪边?望高手指点。

出0入0汤圆

 楼主| 发表于 2011-8-19 12:33:44 | 显示全部楼层
是问题太简单,还是没有人用过的???怎么没人答复???

出0入0汤圆

 楼主| 发表于 2011-8-24 13:51:38 | 显示全部楼层
求人不如求自己,完美完成。两个论坛都没人回复,大家肯定觉得简单,即然这样,就不和大家分享了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 08:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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