我用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决定)。
不知道问题处在哪边?望高手指点。 |