3046|8

693

帖子

7

TA的资源

版主

楼主
 

两个优秀的调试上位机附上位机通信协议程序 支持任意调用移植 [复制链接]

 
两个优秀的调试上位机附上位机通信协议程序
支持任意调用
第一个为匿名四轴上位机,本来这个上位机是调试四轴时用的,它的数据通道多,数据范围广,可以清晰的看出局部范围内的数据变化,是我们日常调试程序必备的有力工具。
匿名四轴的通信协议程序如下:
anoflyscope.c文件
#include "anoflyscope.h"
#include "usart.h"
#include "dma.h"
/***********************匿名四轴上位机专区(V2.6版本)*************************************/
/**********************************************************************************************
*函数原型:void usart1_send_char(u8 c)
*函数功能:串口1发送1个字符
*函数参数:c:要发送的字符
*函数作者:菜菜菜了一批的菜鸟
*完成日期:01.25.2018
**********************************************************************************************/
void usart1_send_char(u8 c)
{
        while((USART1->SR & 0X40) == 0);//等待上一次发送完毕
       
        USART1->DR = c;          
}
/**********************************************************************************************
*函数原型:void usart1_niming_report(u8 fun,u8*data,u8 len)
*函数功能:传送数据给匿名四轴上位机软件(V2.6版本)
*函数参数:fun:功能字. 0XA0~0XAF||data:数据缓存区,最多28字节!!||len:data区有效数据个数
*函数作者:菜菜菜了一批的菜鸟
*完成日期:01.25.2018
**********************************************************************************************/
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
}
/**********************************************************************************************
*函数原型:void mpu6050_send_data(short aacx,short aacy,short aacz,short gyrox,short gyroy,short gyroz)
*函数功能:发送加速度传感器数据和陀螺仪数据
*函数参数:aacx,aacy,aacz:x,y,z三个方向上面的加速度值||gyrox,gyroy,gyroz:x,y,z三个方向上面的陀螺仪值
*函数作者:菜菜菜了一批的菜鸟
*完成日期:01.25.2018
**********************************************************************************************/
void mpu6050_send_data(short aacx,short aacy,short aacz,short gyrox,short gyroy,short gyroz)
{
        u8 tbuf[12];
        tbuf[0]=(aacx>>8)&0XFF;
        tbuf[1]=aacx&0XFF;
        tbuf[2]=(aacy>>8)&0XFF;
        tbuf[3]=aacy&0XFF;
        tbuf[4]=(aacz>>8)&0XFF;
        tbuf[5]=aacz&0XFF;
        tbuf[6]=(gyrox>>8)&0XFF;
        tbuf[7]=gyrox&0XFF;
        tbuf[8]=(gyroy>>8)&0XFF;
        tbuf[9]=gyroy&0XFF;
        tbuf[10]=(gyroz>>8)&0XFF;
        tbuf[11]=gyroz&0XFF;
        usart1_niming_report(0XA1,tbuf,12);                                                                //自定义帧,0XA1
}
/**********************************************************************************************
*函数原型:void usart1_report_imu(short aacx,short aacy,short aacz,short gyrox,short gyroy,short gyroz,short roll,short pitch,short yaw)
*函数功能:通过串口1上报结算后的姿态数据给电脑
*函数参数:aacx,aacy,aacz:x,y,z三个方向上面的加速度值
                   gyrox,gyroy,gyroz:x,y,z三个方向上面的陀螺仪值
           roll:横滚角.单位0.01度。 -18000 -> 18000 对应 -180.00  ->  180.00
           pitch:俯仰角.单位 0.01度。-9000 - 9000 对应 -90.00 -> 90.00
           yaw:航向角.单位为0.10 -> 3600  对应 0 -> 360.0
*函数作者:菜菜菜了一批的菜鸟
*完成日期:01.25.2018
**********************************************************************************************/
void usart1_report_imu(short aacx,short aacy,short aacz,short gyrox,short gyroy,short gyroz,short roll,short pitch,short yaw)
{
        u8 tbuf[28];
        u8 i;
        for(i=0;i<28;i++)tbuf=0;//0
        tbuf[0]=(aacx>>8)&0XFF;
        tbuf[1]=aacx&0XFF;
       
        tbuf[2]=(aacy>>8)&0XFF;
        tbuf[3]=aacy&0XFF;
       
        tbuf[4]=(aacz>>8)&0XFF;
        tbuf[5]=aacz&0XFF;
       
        tbuf[6]=(gyrox>>8)&0XFF;
        tbuf[7]=gyrox&0XFF;
       
        tbuf[8]=(gyroy>>8)&0XFF;
        tbuf[9]=gyroy&0XFF;
       
        tbuf[10]=(gyroz>>8)&0XFF;
        tbuf[11]=gyroz&0XFF;
       
        tbuf[18]=(roll>>8)&0XFF;
        tbuf[19]=roll&0XFF;
       
        tbuf[20]=(pitch>>8)&0XFF;
        tbuf[21]=pitch&0XFF;
       
        tbuf[22]=(yaw>>8)&0XFF;
        tbuf[23]=yaw&0XFF;
       
        usart1_niming_report(0XAF,tbuf,28);//飞控显示帧,0XAF
}
void ADC_Data2PC(short adcvalue)
{
        u8 tbuf[28];
       
        u8 i;
       
        for(i=0;i<28;i++)tbuf=0;//0
        tbuf[0]=(adcvalue>>8)&0XFF;
        tbuf[1]=adcvalue&0XFF;
       
        usart1_niming_report(0XAF,tbuf,2);//飞控显示帧,0XAF
}
       
anoflyscope.h文件
#ifndef __ANOFLYSCOPE_H
#define __ANOFLYSCOPE_H
#include "sys.h"
/**********************************************************************************************
*函数原型:void usart1_send_char(u8 c)
*函数功能:串口1发送1个字符
*函数参数:c:要发送的字符
*函数作者:菜菜菜了一批的菜鸟
*完成日期:01.25.2018
**********************************************************************************************/
void usart1_send_char(u8 c);
/**********************************************************************************************
*函数原型:void usart1_niming_report(u8 fun,u8*data,u8 len)
*函数功能:传送数据给匿名四轴上位机软件(V2.6版本)
*函数参数:fun:功能字. 0XA0~0XAF||data:数据缓存区,最多28字节!!||len:data区有效数据个数
*函数作者:菜菜菜了一批的菜鸟
*完成日期:01.25.2018
**********************************************************************************************/
void usart1_niming_report(u8 fun,u8*data,u8 len);
void ADC_Data2PC(short adcvalue);
#endif
第二个为飞思卡尔上位机,这个上位机是调试飞思卡尔小车时用的,它的数据通道也比较多,可以清晰的看出数据变化,也是我们日常调试程序必备的有力工具。
freecarscope.c文件
#include "freecarscope.h"
#include "usart.h"
#include "dma.h"
/**********************飞思卡尔上位机专区*************************/
u8 uSendBuf[UartDataNum * 2] = {0};
u8 FreeCarsDataNum = UartDataNum * 2;
/**********************************************************************************************
*函数原型:void USendOneByte(u8 date)
*函数功能:发送一个字节
*函数参数:date:数据
*函数作者:菜菜菜了一批的菜鸟
*完成日期:01.25.2018
**********************************************************************************************/
void USendOneByte(u8 date)
{
        USART1->DR = date;
       
        while((USART1->SR & 0X40) == 0);
}
/**********************************************************************************************
*函数原型:void SendDataToScope(void)
*函数功能:轮询法发送一帧数据消耗时间与数据长度有关不可以放在中断里面周期性调用消耗时间计算看
                   帮助文档
*函数参数:无
*函数作者:菜菜菜了一批的菜鸟
*完成日期:01.25.2018
**********************************************************************************************/
void SendDataToScope(void)  //  数据发送协议
{
        s8 i,sum = 0;
        USendOneByte(251);                        //使用轮询的方式发送数据,当数据未发送,程序停在此处直到发送完成
        USendOneByte(109);
        USendOneByte(37);
        sum += (251);                                //全部数据加入校验
        sum += (109);
        sum += (37);
        for(i = 0; i < FreeCarsDataNum; i++)
        {
                USendOneByte(uSendBuf);
                sum += uSendBuf;                        //全部数据加入校验
        }
        USendOneByte(sum);  
}
/**********************************************************************************************
*函数原型:void Push_Packet(u8 chanel,u16 data)
*函数功能:向某个通道缓冲区填充数据
*函数参数:chanel:通道||data:数据
*函数作者:菜菜菜了一批的菜鸟
*完成日期:01.25.2018
**********************************************************************************************/
void Push_Packet(u8 chanel,u16 data)
{
        uSendBuf[chanel * 2] = data >> 8;
        uSendBuf[chanel * 2 + 1] = data % 256;
}
/**********************************************************************************************
*函数原型:void PC_ADC_Scope(void)
*函数功能:上传ADC采集值,绘制ADC曲线图
*函数参数:无
*函数作者:菜菜菜了一批的菜鸟
*完成日期:01.15.2018
**********************************************************************************************/
void PC_ADC_Scope(void)
{
        Push_Packet(0,(s16)ADC_ConvertedValue);
        Push_Packet(1,(s16)ADC_ConvertedValue);
        Push_Packet(2,(s16)ArithmeticalAvergeValueFilter()+100);
        SendDataToScope();  // 数据发送协议
}
freecarscope.h文件
#ifndef __FREECARSCOPE_H
#define __FREECARSCOPE_H         
#include "sys.h"
#define UartDataNum 17    //上位机数据通道数量,必须与上位机设置一样 首先,FreeCarsDataNum是已经知道的,他是通道数UartDataNum*2(因为数据是Int16型的).
/**********************************************************************************************
*函数原型:void USendOneByte(u8 date)
*函数功能:发送一个字节
*函数参数:date:数据
*函数作者:菜菜菜了一批的菜鸟
*完成日期:01.25.2018
**********************************************************************************************/
void USendOneByte(u8 date);
/**********************************************************************************************
*函数原型:void SendDataToScope(void)
*函数功能:轮询法发送一帧数据消耗时间与数据长度有关不可以放在中断里面周期性调用消耗时间计算看
                   帮助文档
*函数参数:无
*函数作者:菜菜菜了一批的菜鸟
*完成日期:01.25.2018
**********************************************************************************************/
void SendDataToScope(void);  //  数据发送协议
/**********************************************************************************************
*函数原型:void Push_Packet(u8 chanel,u16 data)
*函数功能:向某个通道缓冲区填充数据
*函数参数:chanel:通道||data:数据
*函数作者:菜菜菜了一批的菜鸟
*完成日期:01.25.2018
**********************************************************************************************/
void Push_Packet(u8 chanel,u16 data);
/**********************************************************************************************
*函数原型:void PC_ADC_Scope(void)
*函数功能:上传ADC采集值,绘制ADC曲线图
*函数参数:无
*函数作者:菜菜菜了一批的菜鸟
*完成日期:01.15.2018
**********************************************************************************************/
void PC_ADC_Scope(void);
#endif
上面就是两个上位机的通信协议程序,支持任意调用,方便移植,上位机在日常的调试中及其重要,下次给大家分享一下如何写自己的上位机。

此帖出自创意市集论坛

最新回复

感谢楼主的无私分享啊!   详情 回复 发表于 2021-9-25 00:12
点赞 关注(3)
 
 

回复
举报

693

帖子

7

TA的资源

版主

沙发
 
如果有需要两种上位机和源工程代码的同学请公布邮箱
此帖出自创意市集论坛
 
 
 

回复

1025

帖子

1

TA的资源

一粒金砂(高级)

板凳
 
来一份有空学学,多谢。
wudianjun2001@163.com
此帖出自创意市集论坛

点评

好的,下午发您邮箱  详情 回复 发表于 2018-8-23 11:25
 
 
 

回复

419

帖子

0

TA的资源

一粒金砂(高级)

4
 
匿名四轴的上位机用过,确实很好用。飞思卡尔的没用过。请楼主发我一份。woody00h@gmail.com
此帖出自创意市集论坛

点评

好的,下午发您邮箱  详情 回复 发表于 2018-8-23 11:25
 
 
 

回复

693

帖子

7

TA的资源

版主

5
 
woody_chen 发表于 2018-8-23 10:14
匿名四轴的上位机用过,确实很好用。飞思卡尔的没用过。请楼主发我一份。

好的,下午发您邮箱
此帖出自创意市集论坛
 
 
 

回复

693

帖子

7

TA的资源

版主

6
 
wudianjun2001 发表于 2018-8-23 10:00
来一份有空学学,多谢。

好的,下午发您邮箱
此帖出自创意市集论坛
 
 
 

回复

151

帖子

3

TA的资源

一粒金砂(中级)

7
 
楼主可以给我发一份  谢谢
wanyisq@163.com
此帖出自创意市集论坛
 
 
 

回复

693

帖子

7

TA的资源

版主

8
 
本帖最后由 bqgup 于 2018-8-25 12:00 编辑

为了方便大家观看,上传文件一份 上位机配套软件 源工程代码.rar (18.01 MB, 下载次数: 68)
此帖出自创意市集论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

9
 

感谢楼主的无私分享啊!

此帖出自创意市集论坛
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表