keil5中下面这段代码中,只要再新定义一个变量并赋值(例如代码里的变量a),那么TIM3_PWM_Init、TIM_Cmd两行就见不到执行效果(电机不转),printf是可以输出的。只要删掉int a=0;立马正常。这可能是哪里的问题?
//步进电机转动指定的角度
void motor1RotateAngle(float angle)
{
int i;
int a=0;
if(angle>0)
motor1Direction(1);
else
motor1Direction(0);
angle = abs(angle);
motor1Enable();
for(i=0;i<angle;i++)
{
TIM3_PWM_Init(1000-1,72-1);
TIM_Cmd(TIM3, ENABLE);
delay_ms(2);printf("000");
}
motor1Disable();
}
是挺奇怪的,代码肯定没问题。
可能问题出在工程上。仔细检查下工程的一些配置。
真是奇怪了,重新从0创建项目,也调整了启动文件使用startup_stm32f10x_ld.s,程序还是不正常。其实多了a=1;的变量,应该是影响到了PWM输出,电机只是震动,不转。
问题已经解决了,但为什么多定义一个变量会引起PWM的不正常也没有搞明白。上面代码,控制步进电机转1步,不应该使用PWM初始化函数,用改变占空比函数(TIM_SetCompare2(TIM3,200); )就正常了。初始化函数只在main()中运行一次即可。