ariesys 发表于 2015-8-10 15:56:21

STM8产生精确脉冲个数

求教如何用STM8产生精确脉冲个数?怎样设置定时器?

yanhaijian 发表于 2015-8-10 15:56:22

可以用PWM,在PWM中断中计数。

你好我好大家好! 发表于 2015-8-10 18:39:07

帮顶                  

ariesys 发表于 2015-8-12 10:09:49

用如下配置:
void TIM1_PWM_Iint(void)
{
TIM1_DeInit();
TIM1_TimeBaseInit(1,TIM1_COUNTERMODE_UP,199,10);//199
TIM1_ARRPreloadConfig(ENABLE);
TIM1_OC1Init(TIM1_OCMODE_PWM1,TIM1_OUTPUTSTATE_ENABLE,TIM1_OUTPUTNSTATE_DISABLE,99,TIM1_OCPOLARITY_LOW,TIM1_OCNPOLARITY_HIGH,TIM1_OCIDLESTATE_SET,TIM1_OCNIDLESTATE_RESET);
TIM1_OC1PreloadConfig(ENABLE);
TIM1_CtrlPWMOutputs(ENABLE);
TIM1_ITConfig(TIM1_IT_UPDATE , ENABLE);
TIM1_Cmd(ENABLE);
}
10个周期后会产生中断,在中断中把定时器关掉可以产生十个精确脉冲,但是问题又来了,用另外一个定时器设置1s中断重新发送,不是每次都能发送成功。

ariesys 发表于 2015-8-12 10:12:05

现在发送的脉冲波是40KHZ的,试了一下如果要减小频率的话,就能发送成功,40KHZ应该也不算快呀。。。

enjoyfreescal 发表于 2015-8-12 10:17:07

定时1us,写个IO翻转,记录次数的函数在里面调用。(占空比要求不高的话可以5us定时就可以)40Khz=25us周期。

ariesys 发表于 2015-8-12 10:17:10

还试过用另外一个定时器计时,大概在定时器1产生10个脉冲左右的时间产生中断把定时器1关掉,但是关掉那一瞬间定时器1输出的波有时高有时低,输出的波就很奇怪了

zhuoyemp4 发表于 2015-8-12 13:57:37

不知道你要实现什么功能?这个脉冲是干嘛用的?

ariesys 发表于 2015-8-13 10:18:08

zhuoyemp4 发表于 2015-8-12 13:57
不知道你要实现什么功能?这个脉冲是干嘛用的?

想做收发一体的超声波,如果发出去的波时间太长接收到的波可能就掺在发射波里了看不到了,发射的和接收的分不开了,所以想少发一点,控制发射时间

ariesys 发表于 2015-8-13 10:20:30

enjoyfreescal 发表于 2015-8-12 10:17
定时1us,写个IO翻转,记录次数的函数在里面调用。(占空比要求不高的话可以5us定时就可以)40Khz=25us周期 ...

试过了,翻转电平产生的脉冲上升和下降的过程是有时间的,产生的波形不太好,频率就不是标准的40KHz了,降到了25KHZ左右
页: [1] 2
查看完整版本: STM8产生精确脉冲个数