初级会员

- 积分
- 54
- 金钱
- 54
- 注册时间
- 2016-5-23
- 在线时间
- 10 小时
|
1金钱
这是一个8路舵机的控制程序,现在我想改成只要1路舵机的程序就可以了,请问主程序怎么改,这个看不太懂
int main(void)
{
unsigned char i=0;
unsigned int i1=0;
float a;
//T=10000; //初始化到达目标角度的时间 T/10000 (秒)
T=0;
DJ_NO=0; //舵机的号
/* 舵机步进角度初始化 */
for(i=0; i<32; i++){
S=500; // 0.5ms -90度角度
E=2500-1; //为了避免ARR为0 所以-1
STEP=0; //步进增量
DJ_DIR=0; //舵机的转动方向
temp=S;
}
a=T;
if(T!=0){
for(i=0; i<32; i++){
STEP=(E-S)/(a); //步进增量
}
}
MT=0;
QH1=0; QH2=0; QH3=0; QH4=0;
Comm_Rx_Flag=0;
//配置系统时钟为72M,
RCC_Configuration();
/*嵌套向量中断控制器
说明了USART1抢占优先级级别0(最多1位) ,和子优先级级别0(最多7位)
说明了USB 抢占优先级级别1(最多1位) ,和子优先级级别0(最多7位)
说明了NRF24L01+ 抢占优先级级别0(最多1位) ,和子优先级级别1(最多7位) */
NVIC_Configuration();
/*对控制LED指示灯的IO口进行了初始化,将端口配置为推挽上拉输出,口线速度为50Mhz。
在配置某个口线时,首先应对它所在的端口的时钟进行使能。否则无法配置成功,由于用到了端口B,
因此要对这个端口的时钟进行使能*/
GPIO_Configuration();
/*USART1初始化--
PA9,PA10端口复用为串口1的TX,RX。
在配置某个口线时,首先应对它所在的端口的时钟进行使能。否则无法配置成功,由于用到复用IO口功能用于配置串口。
因此要使能AFIO(复用功能IO)时钟。*/
USART_Init1(USART1);
time2_ini(); //TIM2 初始化 BANK1
Delay(0x4fffff);
if (SysTick_Config(7200)) //时钟节拍中断时100us一次 用于定时
{
/* Capture error */
while (1);
}
USART_OUT(USART1,"****(C) COPYRIGHT 2015 奋斗嵌入式开发工作室 *******\r\n"); //向串口1发送开机字符。
USART_OUT(USART1,"* *\r\n");
USART_OUT(USART1,"* 奋斗版8路舵机控制例程 *\r\n");
USART_OUT(USART1,"* *\r\n");
USART_OUT(USART1,"* *\r\n");
USART_OUT(USART1,"* *\r\n");
USART_OUT(USART1,"* 奋斗STM32论坛:www.ourstm.net *\r\n");
USART_OUT(USART1,"* 淘宝店铺: ourstm.taobao.com *\r\n");
USART_OUT(USART1,"***************************************************\r\n");
USART_OUT(USART1,"\r\n");
USART_OUT(USART1,"\r\n");
/* 点亮LED1 */
GPIO_SetBits(GPIOB, GPIO_Pin_5);
while (1){
if(Comm_Rx_Flag==1){
Comm_Rx_Flag=0; //清除接收指令成功标志
i=0;
while(i<USART_Rx_ptr_in){
if(USART_Rx_Buffer==0x0d){i=USART_Rx_ptr_in; } //控制帧结束符
else if(USART_Rx_Buffer=='#'){ //解析出舵机号 1-8
i1=atoi(&USART_Rx_Buffer[i+1]);
}
else if(USART_Rx_Buffer=='P'){ //解析出舵机执行到多少脉宽 500-2500 代表-90--90度
E[i1-1]=atoi(&USART_Rx_Buffer[i+1]);
}
else if(USART_Rx_Buffer=='T'){ //解析出移动步进的总时间1-10000ms
T=(atoi(&USART_Rx_Buffer[i+1]))*10;
}
i++;
}
USART_Rx_ptr_in=0; //清除接收指令长度
for(i=0; i<32; i++){
STEP=0;
temp=S;
}
a=T;
DJ_NO=i1-1;
if(E[i1-1]>=2500) E[i1-1]=2499;
else if(E[i1-1]<=500) E[i1-1]=500;
if(E[i1-1]>S[i1-1]) DJ_DIR[i1-1]=0;
else DJ_DIR[i1-1]=1;
STEP[i1-1]=abs(E[i1-1]-S[i1-1])/a;
}
}
}
|
|