大家好,我使用STM32的TIM5的比较输出功能,想实现控制伺服电机工作,结果调试了2天,正常发送PWM及其100KHZ都没有问题,现在的问题是,怎么都无法控制它的输出个数,因为无法控制它的输出脉冲个数,所以,想使脉冲个数到了也就停止不了。相关设置如下:
1、初始化:TIM5_PWM_Init(60,10); //不分频。大约107KHZ的输出;
2、通过设置sf_work_flag标志来控制它是否工作与否;
if(sf_work_flag)
{
TIM_Cmd(TIM5, ENABLE); //⑤使能 TIM5
TIM_SetCompare2(TIM5,50);//设置PA1 PWM波输出占空比50%
}
else
{TIM_SetCompare2(TIM5,0);//设置PA1 PWM波输出占空比0%
TIM_Cmd(TIM5,DISABLE); //⑤停止 TIM5
}
3、对发送的脉冲进行计数:
//定时器 5 中断服务程序⑥
void TIM5_IRQHandler(void) //TIM5 中断
{
if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET) //检查 TIM5 更新中断发生与否
{
TIM_ClearITPendingBit(TIM5, TIM_IT_Update ); //清除 TIM5更新中断标志
if(!sf_work_flag)
{PWM1=1;}
else
{
PWM1=!PWM1;
pul_num++;
if(pul_num>=pul_med)
{
sf_work_flag=0;
pul_num = 0;
pul_med = 0;
}
}
}
}
也就是通过希望计算pul_num来达到pul_med=10000;的时候,也就是发送10000个脉冲就停止,现在的效果是,pul_num永远等于0;
我的疑问:1、是不是不能使用这样的方式在这个里进行计数???
2、是不是必须将这个波形接到外部中断里,然后通过外部中断来控制?
请大侠贡献智慧与经验,谢谢! |