You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过串口接口实现Teensy4.1与Raspberry Pi 4之间的数据交互

问题核心原因

你遇到的是字节序(端序)不匹配和缓冲区读取顺序错误两个问题:

  • Teensy 4.1采用的Cortex-M7内核默认是小端模式,你直接把float转成字节发送,输出的4个字节是小端排序
  • Java的ByteBuffer默认使用大端(网络字节序)解析数据,和Teensy的字节顺序完全相反
  • 你的代码中先调用getInt()读取了全部4个字节,后续调用getFloat()时缓冲区已经没有数据,自然返回0.0

你收到的4个字节本身是正确的:输出的51、179、63、67对应十六进制是0x33、0xB3、0x3F、0x43,按小端拼接后得到单精度浮点编码0x433FB333,对应的数值正好是你要的191.699997。


修正方法

只需要修改Java端的ByteBuffer解析逻辑即可,不需要改动Teensy的代码:

  1. 为ByteBuffer指定小端字节序匹配Teensy的输出
  2. 不需要额外读取int值,直接读取float即可

修正后的代码片段:

import java.nio.ByteBuffer;
import java.nio.ByteOrder;

// 你原有读取4个字节到data数组的逻辑保持不变
ByteBuffer buffer = ByteBuffer.wrap(data);
// 关键配置:指定使用小端字节序解析
buffer.order(ByteOrder.LITTLE_ENDIAN);
// 直接读取float值
float result = buffer.getFloat();

System.out.printf("解析得到的数值: %f \n", result);
// 输出结果为 191.699997

可选优化建议

如果后续你需要传输更多数据,建议增加简单的帧校验规则:比如在每次发送数据前先发送2个固定的帧头字节(例如0xAA 0xBB),树莓派端先识别到帧头后再读取后续的有效数据,可以避免串口偶发丢包导致的数据解析错位问题。


内容的提问来源于stack exchange,提问作者bzc0fq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:54:04