thinkingpad 发表于 2011-8-18 15:13:04

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

我用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={1000,2000,3000,4000,5000,6000};

void main (void)
{

   init_cpu();
while(1)
{
//TIM2->ARRH = dbuf>>8;//0x03;
//TIM2->ARRL = dbuf;//0xe7;
TIM2->ARRH = dbuf>>8;//0x03;
TIM2->ARRL = dbuf;//0xe7;
if(fsm==6) fsm=0;
}

}
有stm8l的PDF可知TIM2->ARRH和TIM2->ARRL这两个寄存器可以改变发出波形的周期,当我只写TIM2->ARRH = dbuf>>8;//0x03;
TIM2->ARRL = dbuf;//0xe7;时能发出周期为2000us的波形。

可是当我写   TIM2->ARRH = dbuf>>8;//0x03;
TIM2->ARRL = dbuf;//0xe7;
if(fsm==6) fsm=0;时,却等不到我想要的波形(每六个脉冲为一桢数据。第一个脉冲为1000us,。。。第六个脉冲为6000us,每个脉冲的周期由上面的dbuf决定)。

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

thinkingpad 发表于 2011-8-19 12:33:44

是问题太简单,还是没有人用过的???怎么没人答复???

thinkingpad 发表于 2011-8-24 13:51:38

求人不如求自己,完美完成。两个论坛都没人回复,大家肯定觉得简单,即然这样,就不和大家分享了。
页: [1]
查看完整版本: STM8L定时器怎么出来一个PPM脉冲???