OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4921|回复: 1

急!如何利用【匿名四轴上位机】的通信协议 来编写相关的数据传输接收和处理函数?

[复制链接]

9

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2016-7-15
在线时间
23 小时
发表于 2016-7-29 20:47:11 | 显示全部楼层 |阅读模式
5金钱
最近在做四轴的姿态结算,当然少不了匿名四轴上位机的使用;我的版本是V4.06,也弄到了配套的通信协议(见附件),但是因为自身经验的缺乏,之前没有用过通信协议,所以不知道如何去编写相关的函数去接收和处理四轴的数据给上位机;

求助各位大虾:如何去用通信协议编写函数呢??急

匿名上位机V4.0版本通信协议.pdf

174.55 KB, 下载次数: 726

通信协议

最佳答案

查看完整内容[请看2#楼]

有了协议应该能写出下位机代码,一个一个地试也能试出来啊 然而上位机本身带有示例代码(这就连协议都不用看了): 这是我自己改写的: 1、给上位机发三轴姿态角和高度值 [mw_shl_code=c,true] void ANO_DT_Send_Status(double *arg, int32_t alt) { uint32_t i; int16_t _temp; uint32_t _cnt = 0; uint8_t data_to_send[20]; data_to_send[_cnt++] = 0xAA; data_to_send[_cnt++] = ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-7-29 20:47:12 | 显示全部楼层
有了协议应该能写出下位机代码,一个一个地试也能试出来啊

然而上位机本身带有示例代码(这就连协议都不用看了):



a.png



这是我自己改写的:
1、给上位机发三轴姿态角和高度值

[mw_shl_code=c,true]
void ANO_DT_Send_Status(double *arg, int32_t alt)
{
        uint32_t i;
        int16_t _temp;
        uint32_t _cnt = 0;
    uint8_t data_to_send[20];
   
        data_to_send[_cnt++] = 0xAA;
        data_to_send[_cnt++] = 0xAA;
        data_to_send[_cnt++] = 0x01;
        data_to_send[_cnt++] = 0;
       
    for (i = 0; i < 3; i++)
        {
        _temp = (int16_t)(arg*100);
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
    }
       
        data_to_send[_cnt++] = BYTE3(alt);
        data_to_send[_cnt++] = BYTE2(alt);
        data_to_send[_cnt++] = BYTE1(alt);
        data_to_send[_cnt++] = BYTE0(alt);
       
        data_to_send[_cnt++] = 0x01;
        data_to_send[_cnt++] = 0x01;
       
        data_to_send[3] = _cnt - 4;
       
    data_to_send[_cnt] = 0;
        for(i = 0; i < _cnt; i++)
        {
        data_to_send[_cnt] += data_to_send;
    }
       
        UART_SendBytes(data_to_send, _cnt+1);
}[/mw_shl_code]

2、给上位机发三轴加速度和三轴陀螺仪
[mw_shl_code=c,true]
void ANO_DT_Send_Senser(double *accel, double *gyro)
{
    uint32_t i;
        int16_t _temp;
        uint8_t _cnt = 0;
    uint8_t data_to_send[24];
       
        data_to_send[_cnt++] = 0xAA;
        data_to_send[_cnt++] = 0xAA;
        data_to_send[_cnt++] = 0x02;
        data_to_send[_cnt++] = 0;
       
    for (i = 0; i < 3; i++)
    {
        _temp = (int16_t)accel;
        data_to_send[_cnt++] = BYTE1(_temp);
        data_to_send[_cnt++] = BYTE0(_temp);
    }
   
    for (i = 0; i < 3; i++)
    {
        _temp = (int16_t)(gyro/100);
        data_to_send[_cnt++] = BYTE1(_temp);
        data_to_send[_cnt++] = BYTE0(_temp);
    }
   
    for (i = 0; i < 3; i++)
    {
        _temp = 0;
        data_to_send[_cnt++] = BYTE1(_temp);
        data_to_send[_cnt++] = BYTE0(_temp);
    }
   
        data_to_send[3] = _cnt - 4;
       
    data_to_send[_cnt] = 0;
        for(i = 0; i < _cnt; i++)
        {
        data_to_send[_cnt] += data_to_send;
    }
       
        UART_SendBytes(data_to_send, _cnt+1);
}[/mw_shl_code]
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 22:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表