这是我按照原子哥的例程改的一个程序,想实现发送字符控制舵机的转角一点一点变化,程序如下
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "pwm.h"
#include "usart.h"
#include "usart3.h"
//ALIENTEK Mini STM32¿a·¢°å·¶ày′úÂë8
//PWMêä3öêμÑé
//¼¼êõÖ§3Ö£o
www.openedv.com
//1ãÖYêDDÇòíμç×ó¿Æ¼¼óDÏT1«Ë¾
int main(void)
{
u8 pwmval1,pwmval2,flag;
u8 pwm1,pwm2=0;
u8 i,t,m,n,x,y=0;
delay_init(); //Ñóê±oˉêy3õê¼»ˉ
LED_Init();
TIM8_PWM_Init(199,7199); //PWM===(7200*200)/72000000=0.02=20ms
usart3_init(36,9600);
uart_init(9600);
while(1)
{
if(USART3_RX_STA&0x8000)
{
t=USART3_RX_BUF[0];
USART1->DR=USART3_RX_BUF[0];
while((USART1->SR&0X40)==0); //等待发送结束
USART3_RX_STA=0;
}
if(t=='1')
{
LED0=0;
m++;
if(m==10)
{
m=0;
pwm1++;
if(pwm1>23) pwm1=23;
}
}
if(t=='2')
{
LED0=0;
n++;
if(n==10)
{
n=0;
pwm1--;
if(pwm1<1) pwm1=1;
}
}
if(t=='3')
{
LED0=0;
x++;
if(x==10)
{
x=0;
pwm2++; if(pwm2>23) pwm2=23;
}
}
if(t=='4')
{
LED0=0;
y++;
if(y==10)
{
y=0;
pwm2--; if(pwm2<1) pwm2=1;
}
}
if(t=='5')
break;
if(t==0x30) LED0=1;
i++; if(i==200) i=0;
if(i==1) LED1=!LED1;
pwmval1=pwm1+170;
pwmval2=pwm2+170;
TIM_SetCompare1(TIM8,pwmval1); //通道输出
TIM_SetCompare2(TIM8,pwmval2); //
TIM_SetCompare3(TIM8,pwmval1); //
TIM_SetCompare4(TIM8,pwmval2); //
delay_ms(2);
}
}
串口 舵机 都是正常的,但是每次发送一个字符舵机便会转到头,并没有出现想象中的发送一次舵机转一点点的情况,还请原子哥和各位大神帮忙看下程序是哪里出了问题,感激不尽!
一周热门 更多>