两单片机的串口通信问题

2019-07-20 21:52发布

模仿匿名的上位机传输方式发送板
[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]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
正点原子
1楼-- · 2019-07-21 02:41
八成是配置不对啊,先搞出来发送1个字节,一个字节发送成功了,剩下的就简单了。
mcudiy
2楼-- · 2019-07-21 07:16

cmd[i++]=USART_ReceiveData(USART1);
sum += USART_ReceiveData(USART1);
这两句是不是一次收了两个字节,而把一个存放到cmd数组中,导致校验和计算错误?其实cmd中保存的已经不是玩完整的数据帧了!
Lone
3楼-- · 2019-07-21 11:57
看硬件配置对不对
jiayoua
4楼-- · 2019-07-21 16:59
mcudiy 发表于 2016-5-29 14:46
cmd=USART_ReceiveData(USART1);
sum += USART_ReceiveData(USART1);
这两句是不是一次收了两个字节, ...

不是這個原因,我把後面的去掉,還是不行
mcudiy
5楼-- · 2019-07-21 18:54
 精彩回答 2  元偷偷看……
mcudiy
6楼-- · 2019-07-21 23:43
 精彩回答 2  元偷偷看……

一周热门 更多>