模仿匿名的上位机传输方式发送板
[mw_shl_code=c,true]void usart1_send_char(u8 c)
{
USART_SendData(USART1,c);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕
}
//传送数据给匿名四轴上位机软件(V2.6版本)
//fun:功能字. 0XA0~0XAF
//data:数据缓存区,最多28字节!!
//len:data区有效数据个数
void usart1_niming_report(u8 fun,u8*data,u8 len)
{
u8 send_buf[32];
u8 i;
if(len>28)return; //最多28字节数据
send_buf[len+3]=0; //校验数置零
send_buf[0]=0X88; //帧头
send_buf[1]=fun; //功能字
send_buf[2]=len; //数据长度
for(i=0;i<len;i++)send_buf[3+i]=data; //复制数据
for(i=0;i<len+3;i++)send_buf[len+3]+=send_buf; //计算校验和
for(i=0;i<len+4;i++)usart1_send_char(send_buf); //发送数据到串口1
}
//发送加速度传感器数据和陀螺仪数据
//aacx,aacy,aacz:x,y,z三个方向上面的加速度值
//gyrox,gyroy,gyroz:x,y,z三个方向上面的陀螺仪值
void position_send_data(short x,short y,short mode)
{
u8 tbuf[6];
tbuf[0]=(x>>8)&0XFF;
tbuf[1]=x&0XFF;
tbuf[2]=(y>>8)&0XFF;
tbuf[3]=y&0XFF;
tbuf[4]=(mode>>8)&0XFF;
tbuf[5]=mode&0XFF;
usart1_niming_report(0XA1,tbuf,6);//自定义帧,0XA1
}
[/mw_shl_code]
发送可以,
接收的板子却怎么也接收不到想了好久一直不行,求助大家了
[mw_shl_code=c,true]void RC_solve(void)
{
u8 sum = 0;
u8 i=0;
for(;i<31;i++)
{
cmd[i++]=USART_ReceiveData(USART1);
sum += USART_ReceiveData(USART1);
}
if(!(sum==cmd[31])) return; //判断sum
if(!(cmd[0]==0x88)) return; //判断帧头
if(cmd[1]==0xA1) //判断功能字,=0xA1,为接收数据
{
RC_x = (vs16)(cmd[3]<<8)|cmd[4];
RC_y= (vs16)(cmd[5]<<8)|cmd[6];
aa = (vs16)(cmd[7]<<8)|cmd[8];
}
}[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
cmd[i++]=USART_ReceiveData(USART1);
sum += USART_ReceiveData(USART1);
这两句是不是一次收了两个字节,而把一个存放到cmd数组中,导致校验和计算错误?其实cmd中保存的已经不是玩完整的数据帧了!
不是這個原因,我把後面的去掉,還是不行
一周热门 更多>