Movesense加速度传感器数据与Showcase App不符及打印异常咨询
解决Movesense加速度传感器数据匹配与打印问题
一、解决float类型打印为空/数值不匹配的问题
Movesense固件基于ARM GCC编译,默认printf为节省Flash空间未开启浮点数格式化支持,导致%f/%0.6f输出空值或乱码。此外,Movesense加速度原始数据是int16_t类型的ADC原始值,直接用%d打印的是未转换的整数,并非Showcase App显示的g单位物理值,自然不匹配。
解决步骤:
- 启用浮点数printf支持:在项目
CMakeLists.txt中添加编译选项:target_compile_options(${PROJECT_NAME} PRIVATE -u_printf_float) target_link_options(${PROJECT_NAME} PRIVATE -u_printf_float) - 将原始数据转换为g单位:根据传感器量程计算转换系数,公式为:
若设置其他量程,转换系数对应为:4g→8192.0f、8g→4096.0f、16g→2048.0f。// 量程2g时,转换系数为32767/2 ≈ 16384.0f float acc_x = (float)raw_acc.x / 16384.0f; float acc_y = (float)raw_acc.y / 16384.0f; float acc_z = (float)raw_acc.z / 16384.0f;
二、让数据与Showcase App图表一致的关键检查点
- 匹配量程设置:Showcase App默认量程为2g,确保代码中设置一致:
// 0=2g,1=4g,2=8g,3=16g const uint8_t accRange = 0; MovesenseSensorConfig config = {.accRange = accRange}; Movesense_SetSensorConfig(&config); - 匹配采样频率:Showcase默认采样频率多为50Hz,代码中同步设置:
const uint16_t accSampleRate = 50; Movesense_SetAccSampleRate(accSampleRate); - 确保读取最新数据:从传感器回调函数中获取实时采样数据,避免读取缓存旧数据:
void OnAccDataReceived(const MovesenseAccData* pData) { float x = (float)pData->x / 16384.0f; float y = (float)pData->y / 16384.0f; float z = (float)pData->z / 16384.0f; printf("ACC: x=%.6f, y=%.6f, z=%.6f\n", x, y, z); }
三、验证步骤
- 重新编译固件并烧录到设备;
- 查看调试日志,确认打印数值与Showcase App图表一致;
- 若仍有差异,检查是否开启低通滤波(Showcase默认可能启用,代码需同步配置)。
内容的提问来源于stack exchange,提问作者Vadaliya
相关产品推荐
相关产品推荐

