当前位置: 首页 > news >正文

TI MSPM0蓝牙串口通信数据包制作

				        int ret = snprintf(buffer, sizeof(buffer), "%.2f\r", yaw);// 检查格式化结果if(ret > 0 && ret < sizeof(buffer)){uart0_send_string(buffer);} else {// 发送错误标记,方便调试uart0_send_string("Err\r");}

格式化问题可以参考上期

发送格式化数据:

        // 存储格式化后的yaw字符串char yaw_str[20];int str_len = snprintf(yaw_str, sizeof(yaw_str), "%f", yaw);// 检查字符串格式化是否成功if(str_len > 0 && str_len < sizeof(yaw_str)){// 计算数据包总长度:帧头(1) + 数据长度 + 校验位(1) + 帧尾(1)int packet_len = 1 + str_len + 2;char packet[packet_len];uint8_t checksum = 0;int i = 0;// 1. 添加帧头packet[i++] = 0xA5;// 2. 添加数据并计算校验和for(int j = 0; j < str_len; j++){packet[i++] = yaw_str[j];checksum += yaw_str[j];  // 累加所有数据字节}// 3. 添加校验位(只取低8位)packet[i++] = checksum & 0xFF;// 4. 添加帧尾packet[i++] = 0x5A;// 发送完整数据包for(int j = 0; j < packet_len; j++){uart0_send_char(packet[j]);}} else {// 发送错误标记数据包const char err_packet[] = {0xA5, 'E', 'r', 'r', 0x03, 0x5A}; // 0x03是"Err"的校验和for(int j = 0; j < sizeof(err_packet); j++){uart0_send_char(err_packet[j]);}}

发送字节数据

        // 定义数据包:帧头(1) + float数据(4) + 校验位(1) + 帧尾(1),共7字节uint8_t packet[7];uint8_t checksum = 0;int i = 0;// 1. 添加帧头packet[i++] = 0xA5;// 2. 将float拆分为4个字节并添加到数据包// 使用指针将float转换为字节数组(注意大小端问题)uint8_t* yaw_bytes = (uint8_t*)&yaw;for(int j = 0; j < 4; j++){packet[i++] = yaw_bytes[j];checksum += yaw_bytes[j];  // 累加数据字节计算校验和}// 3. 添加校验位(只取低8位)packet[i++] = checksum & 0xFF;// 4. 添加帧尾packet[i++] = 0x5A;// 发送完整数据包(共7字节)for(int j = 0; j < 7; j++){uart0_send_char(packet[j]);}

蓝牙单字节遥控

//            //将保存的数据再发送出去
//            uart0_send_char(uart_data);//static int speed = 600;
//						if(uart_data == 'A'){
//motor(speed,speed);
//}else if(uart_data == 'Z'){
//motor(0,0);
//}else if(uart_data == 'C'){
//motor(speed,-speed);
//}else if(uart_data == 'G'){
//motor(-speed,speed);
//}else if(uart_data == 'E'){
//motor(-speed,-speed);
//}else if(uart_data == 'B'){
//motor(speed,speed - 200);
//}else if(uart_data == 'H'){
//motor(speed - 200,speed);
//}else if(uart_data == 'F'){
//motor(-speed + 200,-speed);
//}else if(uart_data == 'D'){
//motor(-speed,-speed + 200);
//}else if(uart_data == 'X'){
//speed += 100;
//}else if(uart_data == 'Y'){
//speed -= 100;
//}else if(uart_data == 'a'){
//DL_GPIO_setPins(GPIOB, TRACE_PIN_BEEP_PIN);
//delay_ms(200);
//DL_GPIO_clearPins(GPIOB, TRACE_PIN_BEEP_PIN);
//}

http://www.dtcms.com/a/300233.html

相关文章:

  • C++11 -- emplace、包装器
  • 标准库开发和寄存器开发的区别
  • nfls dp 刷题 题解
  • AutoCAD_2025下载与保姆级安装教程
  • 【安全漏洞】防范未然:如何有效关闭不必要的HTTP请求方法,保护你的Web应用
  • cursor使用方法
  • MGER作业
  • Python 面向对象基础
  • 26考研英语词汇的逻辑笔记
  • 【PCIe 总线及设备入门学习专栏 5.1.3 -- PCIe PERST# 时序要求】
  • 从治理到共情——平台伦理的乡村共建之路
  • DeepSeek-LLM模块解析
  • 多项目终端环境初始化开发环境方案
  • 【RHCSA 问答题】第 10 章 配置和保护 SSH
  • cacti漏洞CVE-2022-46169的复现
  • 界面规范2-列表上
  • NTLite Ent Version
  • 文件IO——bmp图像处理
  • GRE、MGRE实验
  • 机器学习(重学版)基础篇(概念与评估)
  • 算子推理是什么
  • GStreamer中Pipeline(管道)
  • 速通python加密之base64
  • 《C++》模板详解
  • odoo代码分析(二)
  • 一键实现推送服务:Docker部署ntfy开源通知系统指南
  • STM32-定时器的基本定时/计数功能实现配置教程(寄存器版)
  • 数据结构习题--删除排序数组中的重复项
  • Linux内核设计与实现 - 第13章 虚拟文件系统(VFS)
  • TCP如何解决网络切换问题