中级会员
 
- 积分
- 437
- 金钱
- 437
- 注册时间
- 2017-2-13
- 在线时间
- 110 小时
|

楼主 |
发表于 2017-3-14 10:40:42
|
显示全部楼层
本帖最后由 爱奔跑的IT 于 2017-3-14 11:10 编辑
例程用的按键,我是直接串口发送数据,但是只要连续发送数据的时间间隔短到一定程度输出的dac值就会响应不过来,或者直接就是接近0的值,但是数据收发都是正常的就是dac的值不正常。这种情况可能会是拿些原因导致的呢,部分代码我会粘贴上,麻烦原子哥给看看,一直找不出原因,,,
数据分析的代码如下:
[mw_shl_code=c,true]while(1)
{
if(timex)timex--;
if(timex==1)LCD_Fill(30+54,100,239,112,WHITE);
t++;
delay_ms(10);
if(USART3_RX_STA&0X8000) //接收到一次数据
{
rlen=USART3_RX_STA&0X7FFF; //得到接收数据的长度
USART3_RX_BUF[rlen]=0; //添加结束符
strncpy(USART3_SEND_BUF_DATE,&USART3_RX_BUF[12],5);//得到其他控制符
date= atoi(USART3_SEND_BUF_DATE);
strncpy(USART3_SEND_BUF_LEFT,&USART3_RX_BUF[17],4);//得到左电机速度值
left = atoi(USART3_SEND_BUF_LEFT);
strncpy(USART3_SEND_BUF_RIGHT,&USART3_RX_BUF[21],4);//得到右电机速度值
right= atoi(USART3_SEND_BUF_RIGHT);
if((date/10000)==1) //µç»úÆô¶¯
{
GPIO_SetBits(GPIOG,GPIO_Pin_12); //左电机使能
if(((date/1000)%10)==1)//左电机正转
{
GPIO_SetBits(GPIOG,GPIO_Pin_11);
if(date/100%10==1)
{
GPIO_SetBits(GPIOG,GPIO_Pin_2);//右电机正转
}
else
{
GPIO_ResetBits(GPIOG,GPIO_Pin_2);//右电机反转
}
}
else //左电机反转
{
GPIO_ResetBits(GPIOG,GPIO_Pin_11);
if(date/100%10==1)
{
GPIO_SetBits(GPIOG,GPIO_Pin_2);////右电机正转
}
else //if(date/100%10==0)
{
GPIO_ResetBits(GPIOG,GPIO_Pin_2);//右电机反转
}
}
if(USART3_RX_STA&0X8000)
{
Dac1_Set_Vol(left); //左电机dac输出
left=0;
Dac2_Set_Vol(right); //右电机dac输出
right=0;
}
}
printf("%d\n",&USART3_RX_BUF[12]); //发送到串口
sprintf((char*)p,"接收了%d字节,内容如下",rlen-12);//接收到的数据长度
LCD_Fill(30+54,115,239,130,WHITE);
POINT_COLOR=BRED;
Show_Str(30+54,115,156,12,p,12,0); //显示接收的数据长度
POINT_COLOR=BLUE;
LCD_Fill(30,130,239,319,WHITE);
Show_Str(30,130,180,190,&USART3_RX_BUF[12],12,0);//显示接收的数据
USART3_RX_STA=0;
if(constate!='+')t=1000; //状态还未连接,立即更新
else t=0; //状态已连接
}
if(t==3000)//30s检查一次连接是否存在
{
LCD_Fill(30+54,125,239,130,WHITE);
LCD_Fill(60,80,120,92,WHITE);
constate=atk_8266_consta_check();//得到连接状态
if(constate=='+')Show_Str(30+30,80,200,12,"连接成功",12,0); //连接状态
else Show_Str(30+30,80,200,12,"连接失败",12,0);
t=0;
}
if((t%20)==0)LED0=!LED0;
atk_8266_at_response(1);
}[/mw_shl_code] |
|