一、总体思路
使用端口GPIOA来连接电机,所以给GPIOA编程就可以控制电机。使用系统时钟SysTick来周期性的给电机发送脉冲。用四个按钮来控制需要发送脉冲的个数,每个按钮被按下就设置给电机发送脉冲的个数,如果上一次给电机发送的脉冲没有发送完成,这次按钮发送的脉冲将不被响应。
二、GPIOA端口的设置
由于需要控制两个电机,所以将GPIOA端口的1,2,3号引脚与电机0相连(分别控制电机的使能,旋转方向和脉冲),GPIOA的4,5,6号引脚与电机1相连。具体对端口的初始化代码为:
GPIO_InitTypeDef GPIO_InitStruct; //开启电机0外设时钟 DJ_EnablePeriphClock_0(); //初始化电机0 GPIO_InitStruct.GPIO_Pin = DJ_EN_0 | DJ_DR_0 | DJ_MC_0; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(DJ_GPIO_0, &GPIO_InitStruct); //设置电机0的初始化状态 DJ_DisEnable(DJ_GPIO_0, DJ_EN_0); //关闭电机0
上面的代码是对与电机0连接的引脚的初始化,电机1的初始化是一样的,只是引脚不同了。从上面的代码可以看到引脚的输出模式是推挽的(为了做Debug),实际应该使用开漏的,由于我们要给电机输入5V的高电平,所以我们应该在外部接一个上拉电阻,电源为5V。
三、SysTick设置
SysTick是一个系统定时器,系统的滴答是可以配置的,在控制电机的程序中我们将系统滴答设置为100us,理论上可以将系统滴答设置为1/72000000s,由于系统的时钟为72MHz。每