上下位机设置:匿名上位机 V7,TFMiniPlus 激光雷达测距

匿名上位机V7通信协议

#include <string.h>#define BYTE0(dwTemp)       (*( (char *)(&dwTemp)    ))   /* !< uint32_t 数据拆分 byte0 */
#define BYTE1(dwTemp)       (*( (char *)(&dwTemp) + 1))   /* !< uint32_t 数据拆分 byte1 */
#define BYTE2(dwTemp)       (*( (char *)(&dwTemp) + 2))   /* !< uint32_t 数据拆分 byte2 */
#define BYTE3(dwTemp)       (*( (char *)(&dwTemp) + 3))   /* !< uint32_t 数据拆分 byte3 */#define USERDATALEN 2                      // 数据长度uint8_t waveform[6 + USERDATALEN] = {0};     // 数据帧缓存/** @name:       void Wireless_Send(void)* @notion:     V7*/
void Wireless_Send(void)
{uint8_t waveform[6 + UserDataLen] = {0};    // 数据帧缓存uint8_t _cnt = 0;memset(waveform, 0, sizeof(waveform));waveform[_cnt++] = 0xAA;                  // 帧头waveform[_cnt++] = 0xFF;                    // 目标地址waveform[_cnt++] = 0xF1;                  // 功能码ID
//  waveform[_cnt++] = sizeof(waveform) - 6;     // 有效数据长度
//  waveform[_cnt++] = UserDataLen;waveform[_cnt++] = 0;int16_t UserData_1 = (int16_t)(Mortor1.Speed_Read);//数据区使用小端模式, 低字节在前。waveform[_cnt++] = BYTE0(UserData_1);       // 数据内容waveform[_cnt++] = BYTE1(UserData_1);waveform[3] = _cnt - 4;                     // 写入有效数据字节数uint8_t sumcheck = 0;                          // 和校验SCuint8_t addcheck = 0;                      // 附加校验ACfor(uint8_t i = 0; i < waveform[3] + 4; i++) {sumcheck += waveform[i];                // 从帧头开始, 一直到 data 区结束, 对每一字节进行累加操作, 只取低8位addcheck += sumcheck;                   // 计算和校验时, 每进行一字节的加法运算, 同时进行一次 sumcheck 的累加操作, 只取低8位}waveform[_cnt++] = sumcheck;waveform[_cnt++] = addcheck;// 串口发送数据seekfree_wireless_send_buff(waveform, sizeof(waveform));
//  HAL_UART_Transmit(&huart1, (uint8_t*)waveform, _cnt, 2);
}
  • 定义USERDATALEN为要发送的数据长度。比如要发送一个int16就是两位,以此类推叠加。
  • 需要在匿名上位机高级收码 - 点击右侧绿色的竖条 - 展开用户帧F1 - 设置数据类型,依次设置要发送的发送的几个数据的数据类型。记得勾选使能F1帧
  • 浮点数可以数值放大100倍转化成int16处理,提高传输效率

waveform[_cnt++] = BYTE0(float * 100.000f); waveform[_cnt++] = BYTE1(float * 100.000f);

然后在匿名上位机高级收码 - 点击右侧绿色的竖条 - 展开用户帧F1再把数据缩放设为1.0E+2,这样即可显示原始的浮点数据

  • 逐飞无线串口一次发送数据最好不要超过30字节。要是单片机有额外的io建议开启无线串口的控流引脚

  • 双击匿名上位机波形显示右侧的实时值数字,可以在波形上显示具体数值

TFMiniPlus 激光雷达测距接收协议

#define TFMINI_DATA_Len     9
#define TFMINT_DATA_HEAD    (0x59)uint16_t TFmin_Dist = 0;    // 距离信息 单位 cm
uint16_t TFmin_Strength = 0;// 信号强度 小于 100 或等于 65535 时, Dist的测量值被认为不可信输出置0
uint16_t TFmin_Temp = 0;    // 表征芯片内部温度值 摄氏度 = Temp / 8 - 256uint8_t TFminiPlus_buf[TFMINI_DATA_Len] = {0};  // 暂存数据帧
uint8_t TFminiPlus_num = 0;                     // 暂存本字节数据编码
uint8_t TFminiPlus_flag = 0;                    // 接收数据标志位 1-成功;2-帧头错误;3-SC校验错误/** @name:       void TFminiPlus_Proc2(uint8_t date)* @function:   TFminiPlus单字节接收方式* @example:    TFminiPlus_Proc2(rx_receive);*/
void TFminiPlus_Proc2(uint8_t data)
{uint8_t i = 0;uint8_t checksum = 0;if (TFminiPlus_num == 0 && data == TFMINT_DATA_HEAD) {                      // 校验并记录帧头TFminiPlus_buf[0] = TFMINT_DATA_HEAD;TFminiPlus_num = 1;} else if (TFminiPlus_num == 1 && data == TFMINT_DATA_HEAD) {               // 校验并记录帧头TFminiPlus_buf[1] = TFMINT_DATA_HEAD;TFminiPlus_num = 2;} else if (TFminiPlus_num >= 2 && TFminiPlus_num <= (TFMINI_DATA_Len - 2)) {TFminiPlus_buf[TFminiPlus_num] = data;TFminiPlus_num++;} else if (TFminiPlus_num == (TFMINI_DATA_Len - 1)) {for (i = 0; i < (TFMINI_DATA_Len - 1); i++) {checksum += TFminiPlus_buf[i];                                      // 从帧头开始到数据区结束, 做checksum校验}if (checksum == data) {                                                 // 校验Checksum//数据为小端模式, 低字节在前保存在数据帧的低地址中TFmin_Dist = TFminiPlus_buf[2] | (TFminiPlus_buf[3] << 8);TFmin_Strength = TFminiPlus_buf[4] | (TFminiPlus_buf[5] << 8);TFmin_Temp = TFminiPlus_buf[6] | (TFminiPlus_buf[7] << 8);TFminiPlus_flag = 1;} else {TFminiPlus_flag = 3;}TFminiPlus_num = 0;} else {TFminiPlus_flag = 2;TFminiPlus_num = 0;}
}/** @name:       void TFminiPlus_GetOnce(void)* @function:   TFminiPlus单次触发指令* @notion:     将输出帧率设置为0后, 才可使用单次触发指令*/
void TFminiPlus_GetOnce(void)
{uint8_t TFminiPlus_cmd[4] = {0};  // 暂存命令帧
//  memset(TFminiPlus_cmd, 0, sizeof(TFminiPlus_cmd));TFminiPlus_cmd[0] = 0x5A;            //指令帧帧头TFminiPlus_cmd[1] = 0x04;           //指令帧总长度TFminiPlus_cmd[2] = 0x04;          //IDTFminiPlus_cmd[3] = 0x62;          //Datauart_putbuff(UART_3, TFminiPlus_cmd, sizeof(TFminiPlus_cmd)); //串口发送指令
}
  • 使用的是TFMiniPlus的串口标准数据输出格式,没有用I2C和字符串数据格式(Pix Mode)
  • 没有用沁恒的串口接收DMA,用的简易的单字节接收方式

智能车常用的上下位机:匿名上位机 V7,TFMiniPlus 激光雷达测距相关推荐

  1. android串口上位机,匿名上位机(V7)基于串口的简单使用

    匿名上位机(V7)简单使用 本文简介:本文主要介绍匿名上位机V7版本的一些基本的功能使用,以及基于匿名上位机协议写下位机代码.使用的下位机为STM32F103C8T6 匿名上位机 V7版本的选项简介, ...

  2. 匿名上位机V7波形显示教程

    1. 下位机程序 1.1 协议文档分析 匿名科创在V7版本的协议文档上给出了很详细的范例,所以下位机程序非常好写,笔者是第一次写匿名上位机的下位机程序.以STM32发送一个无符号16位的数据为例讲解下 ...

  3. ANO匿名上位机V7协议STM32

    ANO匿名上位机V7协议&STM32 说明:以下程序为自己编写,若有误欢迎各位指出. 基于ANO匿名V7上位机的通信协议编写的代码 文章目录 ANO匿名上位机V7协议&STM32 前言 ...

  4. STM32 MPU6050与匿名上位机通讯(V2.6版)

    0.系列目录 STM32 软件模拟IIC STM32 使用DMP库处理MPU6050数据 STM32 MPU6050与匿名上位机通讯(V2.6版) 1.简介 在四轴的调试中,经常要使用地面站与飞控之间 ...

  5. 驱动LSM6DS3TR-C实现高效运动检测与数据采集(4)----上报匿名上位机实现可视化

    概述 LSM6DS3TR-C是单芯片"3轴陀螺仪 + 3轴加速度计"的惯性 测量单元(IMU), 五种种可选满量程的陀螺仪(125/250/500/1000/2000 dps)和加 ...

  6. 匿名上位机使用方法分享--高级收码

    匿名上位机总体介绍移步:https://blog.csdn.net/wangjt1988/article/details/83684188 本文视频介绍:https://www.bilibili.co ...

  7. 匿名上位机V7与stm32通信协议

    一,通信介绍 1.通信帧格式介绍 为了适应多种数据类型的传输,保证高效的通信效率,所有数据的通信,均需要遵守本通信帧格式.本格式在 确保通信高效.源码简单.可移植性高的基础上,实现数据正确性判断,有效 ...

  8. 详细介绍如何从0开始写一个数据通信,将数据从单片机发送到上位机(或者虚拟示波器)进行数据或图像显示,以及常见问题或注意事项解答,本文主要以匿名上位机为例,适合新手和小白

      本文主要内容:详细介绍如何从0开始写一个数据通信,将数据从单片机发送到上位机(或者虚拟示波器)进行数据或图像显示,帮助我们调节一些参数,比如电机PID的调节.波形融合等,以及在我们写通信协议的时候 ...

  9. 匿名上位机使用方法分享--波形显示

    匿名上位机总体介绍移步:https://blog.csdn.net/wangjt1988/article/details/83684188 波形显示可以说是上位机的功能重点,是各种调试.数据分析的有力 ...

  10. 匿名上位机v7波形显示

    根据匿名上位机灵活格式帧设置对应的 帧头 由于格式较为简单直接贴上原码供参考(一般调试pid都是两个数据对比调试,所以我只写了两个发送对比的函数,一个int16和一个int32,已经完全够用了) 注意 ...

最新文章

  1. linux shell 代码太长换行 续行
  2. OVS DPDK vhost-user详解(十三)
  3. python元胞自动机模拟交通_大师兄带你复现 -gt; 难度超高的二维CA元胞自动机模型...
  4. 纪念品分组pascal程序
  5. org.apache.ibatis.builder.BuilderException: Could not find value method on SQL annotation
  6. lol英雄联盟符文助手源码/一键应用符文
  7. 怎么样用 Google Analytics 区分 Google Shopping 页的流量
  8. 小户型吊顶的注意事项有哪些
  9. Web 性能优化:使用 CSS font-display 控制字体加载和替换
  10. 第4届(2020)大学生集成电路创新创业大赛赛题分类
  11. python画简便的图-特征锦囊:常用的统计图在Python里怎么画?
  12. 评分卡模型开发(七)--基于逻辑回归的标准评分卡实现
  13. 使用spring的事务的三种方法
  14. bigemap中下载边界_BIGEMAP地图下载器-全能版
  15. 进去springstrap显示无响应_何为优秀显示器?显示器参数标准主观讨论
  16. 【JavaScript】用原生js实现幻灯片效果
  17. 计算机专业英语四个部分思维导图,一张思维导图,彻底分清英语五大基本句型...
  18. java+springboot+mysql个人理财管理系统
  19. 练习使用Geogebra【下载】中的SpreadSheet辅助作图
  20. Prodigal基因预测

热门文章

  1. 医疗检测产品设计规范有哪些?
  2. Markdown 4 印象笔记之马克飞象
  3. Android安全测试
  4. python中的for什么意思_python中的for是什么
  5. xpath兄弟结点语法
  6. 熵值法原理、应用及其Python实现
  7. Nginx reopen reload作用及工作过程
  8. python中转义字符与格式化字符的混合使用
  9. zabbix微信报警
  10. C语言取得int的位数