产品简介
BMI323 是一款低功耗、高性能的 6 轴 IMU 传感器,集成了 3 轴加速度计和 3 轴陀螺仪。它通过 I2C 接口通信,提供全面的运动检测功能,包括计步、任意运动检测、无运动检测、显著运动检测、敲击检测、倾斜检测、方向检测和平面检测。
该传感器非常适合可穿戴设备、智能手表、健身追踪器和物联网应用,这些应用对运动感知和能效要求很高。BMI323 具有基于硬件的运动检测算法,可独立运行,无需 MCU 持续干预即可实现超低功耗。通过可配置的中断引脚(INT1 和 INT2),传感器可以高效地通知主机系统运动事件,非常适合电池供电的应用。
产品参数
基本参数
| 参数 | 数值 |
|---|---|
| 工作电压 | DC 3.3V |
| 工作电流 | 720μA |
| 低功耗电流 | 356μA |
| 通讯接口 | I2C |
| 接口类型 | SH1.0-5P 接口/2.54mm 排针孔 |
| I2C 地址 | 0x69(默认)/0x68 |
| 可编程中断引脚 | BMI323:2 个 |
BMI323参数
| 参数 | 数值 |
|---|---|
| 加速度测量范围 | ±2g, ±4g, ±8g, ±16g |
| 加速度 ADC 分辨率 | 16 位 |
| 加速度灵敏度 | ±2g 量程:16384 LSB/g ±4g 量程:8192 LSB/g ±8g 量程:4096 LSB/g ±16g 量程:2048 LSB/g |
| 加速度灵敏度误差 | ±0.5% |
| 加速度零 g 偏移 | ±50 mg |
| 加速度输出数据率 (ODR) | 高性能 / 正常模式:12.5 Hz ~ 6400 Hz 低功耗模式:0.78125 Hz ~ 400 Hz |
| 陀螺仪角速度量程 | ±125, ±250, ±500, ±1000, ±2000 °/s |
| 陀螺仪 ADC 分辨率 | 16 位 |
| 陀螺仪灵敏度 | ±2000 °/s 量程:16.384 LSB/(°/s) ±1000 °/s 量程:32.768 LSB/(°/s) ±500 °/s 量程:65.536 LSB/(°/s) ±250 °/s 量程:131.072 LSB/(°/s) |
| 陀螺仪灵敏度误差 | ±3%(无自动校准)/±0.7%(自动校准后) |
| 陀螺仪零速率偏移 | ±1 °/s |
| 陀螺仪输出数据率 (ODR) | 高性能 / 正常模式:12.5 Hz ~ 6400 Hz 低功耗模式:0.78125 Hz ~ 400 Hz |
物理尺寸
| 参数 | 数值 |
|---|---|
| PCB尺寸 | 16mm*16mm |
| 安装孔间距 | 11mm |
| 安装孔直径 | 2mm |
尺寸图
单位:mm

引脚说明

| 引脚丝印 | 功能描述 |
|---|---|
| 3V3 | 电源正极(供电输入3.3V) |
| GND | 电源负极(接地) |
| SCL | I2C模式时钟线(SCL) |
| SDA | I2C模式数据线(SDA) |
| INT1 | BMI323中断输出引脚1 |
| INT2 | BMI323中断输出引脚2 |
注意:本传感器供电与通信电平均为 3.3V,推荐搭配 3.3V 供电、3.3V 电平的主控使用。直接接入5V主控易导致传感器损坏。
焊盘配置说明(I2C地址选择)
传感器板载 1 个独立焊盘,对应 BMI323 的 I2C 地址切换。通过焊盘的 “断开 / 连接” 状态即可灵活配置目标地址,无需额外硬件修改。

BMI323 传感器 I2C 地址配置规则
焊盘状态直接决定 BMI323 的 I2C 通信地址,配置规则如下:
- 焊盘断开:I2C 地址为 0x69
- 焊盘连接:I2C 地址为 0x68
Arduino IDE 使用教程
说明:本传感器支持任意运动、无运动、显著运动等多种运动状态检测,以及敲击、倾斜、方向、平面检测等手势识别功能。Wiki 仅展示核心基础用法,更多运动状态检测与高级功能实现,请直接参考库文件中完整的 examples 示例程序及API,此处不再逐一展开。
通过I2C读取数据的Arduino示例代码
目标
本教程旨在演示如何初始化6轴IMU传感器,并通过轮询方式直接读取加速度和角速度数据。
硬件准备
- DFR1222 FireBeetle 2 ESP32-C5 ×1
- SEN0693 Fermion: BMI323 6轴惯性运动传感器 ×1
软件准备
- 下载并安装 Arduino IDE:下载 Arduino IDE
- 下载并安装 DFRobot_BMI323 库:下载 DFRobot_BMI323 库
- 库安装指南:查看安装指南
接线配置

- 按图示连接6轴IMU传感器与 ESP32-C5,核心对应关系:
- 传感器引脚 “3V3” → ESP32-C5 3.3V
- 传感器引脚 “GND” → ESP32-C5 GND
- 传感器 I2C 引脚 “SCL” → ESP32-C5 SCL(默认 GPIO10)
- 传感器 I2C 引脚 “SDA” → ESP32-C5 SDA(默认 GPIO9)
- I2C地址焊盘配置:将焊盘断开,此时 I2C 地址为 0x69(出厂默认模式)
样例代码
#include "DFRobot_BMI323.h"
#define BMI323_I2C_ADDR 0x69
DFRobot_BMI323 bmi323(&Wire, BMI323_I2C_ADDR);
void setup()
{
Serial.begin(115200);
while (!Serial) {
delay(10);
}
Serial.println("BMI323 Six-Axis Data");
Serial.println("====================");
while (!bmi323.begin()) {
Serial.println("Sensor init failed, please check wiring. Retry in 1s.");
delay(1000);
}
if (!bmi323.configAccel(bmi323.eAccelODR50Hz, bmi323.eAccelRange8G, bmi323.eAccelModeNormal)) {
Serial.println("Accel config failed!");
while (1) {
delay(1000);
}
}
if (!bmi323.configGyro(bmi323.eGyroODR800Hz, bmi323.eGyroRange2000DPS, bmi323.eGyroModeNormal)) {
Serial.println("Gyro config failed!");
while (1) {
delay(1000);
}
}
delay(1000);
Serial.println("Setup complete!\n");
}
void loop()
{
DFRobot_BMI323::sSensorData accel;
DFRobot_BMI323::sSensorData gyro;
if (bmi323.getAccelGyroData(&accel, &gyro)) {
Serial.print("Accel (g) : ");
Serial.print(accel.x, 3);
Serial.print(", ");
Serial.print(accel.y, 3);
Serial.print(", ");
Serial.println(accel.z, 3);
Serial.print("Gyro (dps) : ");
Serial.print(gyro.x, 2);
Serial.print(", ");
Serial.print(gyro.y, 2);
Serial.print(", ");
Serial.println(gyro.z, 2);
Serial.println("---");
} else {
Serial.println("Failed to read sensor data.");
}
delay(200);
}
结果

通过I2C读取累计步数的Arduino示例代码
目标
本教程旨在演示如何使用 ESP32-C5 主控配置 BMI323 六轴传感器的内置硬件计步器,并通过每秒轮询的方式稳定读取累计步数。
硬件准备
- DFR1222 FireBeetle 2 ESP32-C5 ×1
- SEN0693 Fermion: BMI323 6轴惯性运动传感器 ×1
软件准备
- 下载并安装 Arduino IDE:下载 Arduino IDE
- 下载并安装 DFRobot_BMI323 库:下载 DFRobot_BMI323 库
- 库安装指南:查看安装指南
接线配置

- 按图示连接6轴IMU传感器与 ESP32-C5,核心对应关系:
- 传感器引脚 “3V3” → ESP32-C5 3.3V
- 传感器引脚 “GND” → ESP32-C5 GND
- 传感器引脚“INT1” → ESP32-C5 GPIO27
- 传感器 I2C 引脚 “SCL” → ESP32-C5 SCL(默认 GPIO10)
- 传感器 I2C 引脚 “SDA” → ESP32-C5 SDA(默认 GPIO9)
- I2C地址焊盘配置:将焊盘断开,此时 I2C 地址为 0x69(出厂默认模式)
样例代码
#include "DFRobot_BMI323.h"
#define BMI323_I2C_ADDR 0x69
DFRobot_BMI323 bmi323(&Wire, BMI323_I2C_ADDR);
volatile bool gStepReady = false;
// ESP32 中断函数需放在 IRAM 中
void IRAM_ATTR interrupt() {
gStepReady = true;
}
void setup() {
Serial.begin(115200);
while (!Serial) {
delay(10); // 等待串口初始化
}
Serial.println("BMI323 Step Counter Demo");
Serial.println("========================");
// 初始化 BMI323,失败则重试
while (!bmi323.begin()) {
Serial.println("I2C init failed, retry in 1s");
delay(1000);
}
// 配置加速度计:50Hz 采样率,±8g 范围,普通模式
bmi323.configAccel(bmi323.eAccelODR50Hz, bmi323.eAccelRange8G, bmi323.eAccelModeNormal);
// 使能步数计数器中断到 INT1 引脚
if (!bmi323.enableStepCounterInt(bmi323.eINT1)) {
Serial.println("Enable step counter interrupt failed!");
while (1) delay(1000);
}
// 将 BMI323 的 INT1 连接到 ESP32 的 GPIO 27(可根据需要修改)
attachInterrupt(digitalPinToInterrupt(27), interrupt, RISING);
/* AVR系列 Arduino 中断引脚与端子号对应表
* ---------------------------------------------------------------------------------------
* | | 数字引脚 | 2 | 3 | |
* | Uno、Nano、Mini 及其他 328 系列主控 |--------------------------------------------|
* | | 中断编号 | 0 | 1 | |
* |-------------------------------------------------------------------------------------|
* | | 引脚 | 2 | 3 | 21 | 20 | 19 | 18 |
* | Mega2560 |--------------------------------------------|
* | | 中断编号 | 0 | 1 | 2 | 3 | 4 | 5 |
* |-------------------------------------------------------------------------------------|
* | | 引脚 | 3 | 2 | 0 | 1 | 7 | |
* | Leonardo 及其他 32u4 系列主控 |--------------------------------------------|
* | | 中断编号 | 0 | 1 | 2 | 3 | 4 | |
* |--------------------------------------------------------------------------------------
* ---------------------------------------------------------------------------------------------------------------------------------------------
* micro:bit 中断引脚与端子号对应表
* ---------------------------------------------------------------------------------------------------------------------------------------------
* | micro:bit | 数字引脚 | P0~P20 均可作为外部中断使用 |
* | (作为外部中断使用时, |---------------------------------------------------------------------------------------------|
* | 无需使用 pinMode 将其设置为输入模式) | 中断编号 | 中断号为引脚数字值,如 P0 中断号为 0,P1 为 1 |
* |-------------------------------------------------------------------------------------------------------------------------------------------|
*/
Serial.println("Connect BMI323 INT1 to the defined MCU pin.");
Serial.println("Every step will trigger an interrupt and update the counter.\n");
}
void loop() {
if (gStepReady) {
gStepReady = false;
uint16_t status = bmi323.getIntStatus();
if (status & BMI3_INT_STATUS_STEP_DETECTOR) {
uint16_t steps = 0;
if (bmi323.readStepCounter(&steps) == BMI3_OK) {
Serial.print("Steps: ");
Serial.println(steps);
}
}
}
}
结果

注意:
- 启动或静止后重新开始计步时,设备需缓冲 3-5 步的时间(约 1-3 秒)以稳定信号和验证步数,期间步数显示为 0 或不变属于正常现象,后续会自动更新为实际步数。
- 避免在启动初期频繁晃动设备(如随手摆动),否则可能导致缓冲时间延长或误计数。
API函数
/**
* @fn DFRobot_BMI323
* @brief 构造函数
* @details 构造函数 - I2C 接口
* @param wire TwoWire 对象指针,默认为 &Wire
* @param i2cAddr I2C 地址,默认为 0x69
* @return 无
*/
DFRobot_BMI323(TwoWire *wire = &Wire, uint8_t i2cAddr = 0x69);
/**
* @fn begin
* @brief 初始化函数
* @details 初始化 I2C 接口、芯片寄存器和功能上下文
* @param 无
* @return bool 类型,表示初始化状态
* @retval true 初始化成功
* @retval false 初始化失败
*/
bool begin(void);
/**
* @fn configAccel
* @brief 配置加速度计
* @param odr 输出数据速率选择(参见:eAccelODR_t)
* @n 可用速率:
* @n - eAccelODR0_78125Hz: 0.78125 Hz
* @n - eAccelODR1_5625Hz: 1.5625 Hz
* @n - eAccelODR3_125Hz: 3.125 Hz
* @n - eAccelODR6_25Hz: 6.25 Hz
* @n - eAccelODR12_5Hz: 12.5 Hz
* @n - eAccelODR25Hz: 25 Hz
* @n - eAccelODR50Hz: 50 Hz
* @n - eAccelODR100Hz: 100 Hz
* @n - eAccelODR200Hz: 200 Hz
* @n - eAccelODR400Hz: 400 Hz
* @n - eAccelODR800Hz: 800 Hz
* @n - eAccelODR1600Hz: 1600 Hz
* @n - eAccelODR3200Hz: 3200 Hz
* @n - eAccelODR6400Hz: 6400 Hz
* @n @note ODR 范围限制(基于工作模式):
* @n - 低功耗模式:0.78Hz ~ 400Hz
* @n - 普通模式:12.5Hz ~ 6400Hz
* @n - 高性能模式:12.5Hz ~ 6400Hz
* @param range 量程选择(参见:eAccelRange_t)
* @n 可用量程:
* @n - eAccelRange2G: ±2g
* @n - eAccelRange4G: ±4g
* @n - eAccelRange8G: ±8g
* @n - eAccelRange16G: ±16g
* @param mode 工作模式选择(参见:eAccelMode_t),默认为 eAccelModeNormal
* @n 可用模式:
* @n - eAccelModeLowPower: 低功耗模式
* @n - eAccelModeNormal: 普通模式(默认)
* @n - eAccelModeHighPerf: 高性能模式
* @return bool 类型,表示配置状态
* @retval true 配置成功
* @retval false 配置失败
*/
bool configAccel(eAccelODR_t odr, eAccelRange_t range, eAccelMode_t mode = eAccelModeNormal);
/**
* @fn configGyro
* @brief 配置陀螺仪
* @param odr 输出数据速率选择(参见:eGyroODR_t)
* @n 可用速率:
* @n - eGyroODR0_78125Hz: 0.78125 Hz
* @n - eGyroODR1_5625Hz: 1.5625 Hz
* @n - eGyroODR3_125Hz: 3.125 Hz
* @n - eGyroODR6_25Hz: 6.25 Hz
* @n - eGyroODR12_5Hz: 12.5 Hz
* @n - eGyroODR25Hz: 25 Hz
* @n - eGyroODR50Hz: 50 Hz
* @n - eGyroODR100Hz: 100 Hz
* @n - eGyroODR200Hz: 200 Hz
* @n - eGyroODR400Hz: 400 Hz
* @n - eGyroODR800Hz: 800 Hz
* @n - eGyroODR1600Hz: 1600 Hz
* @n - eGyroODR3200Hz: 3200 Hz
* @n - eGyroODR6400Hz: 6400 Hz
* @n @note ODR 范围限制(基于工作模式):
* @n - 低功耗模式:0.78Hz ~ 400Hz
* @n - 普通模式:12.5Hz ~ 6400Hz
* @n - 高性能模式:12.5Hz ~ 6400Hz
* @param range 量程选择(参见:eGyroRange_t)
* @n 可用量程:
* @n - eGyroRange125DPS: ±125dps
* @n - eGyroRange250DPS: ±250dps
* @n - eGyroRange500DPS: ±500dps
* @n - eGyroRange1000DPS: ±1000dps
* @n - eGyroRange2000DPS: ±2000dps
* @param mode 工作模式选择(参见:eGyroMode_t),默认为 eGyroModeNormal
* @n 可用模式:
* @n - eGyroModeLowPower: 低功耗模式
* @n - eGyroModeNormal: 普通模式(默认)
* @n - eGyroModeHighPerf: 高性能模式
* @return bool 类型,表示配置状态
* @retval true 配置成功
* @retval false 配置失败
*/
bool configGyro(eGyroODR_t odr, eGyroRange_t range, eGyroMode_t mode = eGyroModeNormal);
/**
* @fn getAccelGyroData
* @brief 同时读取加速度计和陀螺仪数据并返回物理单位
* @details 一次性读取加速度计和陀螺仪原始数据,转换为 g/dps 并返回
* @param accel 加速度计输出
* @param gyro 陀螺仪输出
* @return bool 类型,表示读取状态
* @retval true 读取成功
* @retval false 读取失败
*/
bool getAccelGyroData(sSensorData *accel, sSensorData *gyro);
/**
* @fn getTemperature
* @brief 读取芯片温度(摄氏度)
* @details 从传感器读取温度原始值,并按官方公式换算:温度(°C) = (int16_t)raw / 512.0 + 23.0。
* 需先配置加速度计或陀螺仪。
* @return float 温度值(单位:°C);若传感器未初始化或读取失败则返回 0.0f
*/
float getTemperature(void);
/**
* @fn enableStepCounterInt
* @brief 使能计步器中断功能
* @details 配置计步器功能并映射到指定的中断引脚,当步数变化时将触发中断
* @param pin 绑定的中断引脚(eINT1 或 eINT2)
* @return bool 类型,表示配置状态
* @retval true 配置成功
* @retval false 配置失败
*/
bool enableStepCounterInt(eInt_t pin);
/**
* @fn readStepCounter
* @brief 读取计步器数据
* @param stepVal 步数输出指针,读取的步数将写入该指针指向的内存
* @return int8_t BMI3_OK 表示成功,其他值表示失败
*/
int8_t readStepCounter(uint16_t *stepVal);
/**
* @fn getIntStatus
* @brief 获取中断状态
* @details 读取并合并 INT1 和 INT2 引脚的中断状态,返回值为 INT1 和 INT2 状态寄存器的 OR 组合。
* @return uint16_t 合并的中断状态寄存器值(INT1 | INT2)。每一位代表不同的中断类型:
* @n - BMI3_INT_STATUS_ANY_MOTION: 检测到任意运动
* @n - BMI3_INT_STATUS_NO_MOTION: 检测到无运动
* @n - BMI3_INT_STATUS_FLAT: 平面检测
* @n - BMI3_INT_STATUS_ORIENTATION: 方向变化
* @n - BMI3_INT_STATUS_STEP_DETECTOR: 检测到步数
* @n - BMI3_INT_STATUS_SIG_MOTION: 检测到显著运动
* @n - BMI3_INT_STATUS_TILT: 检测到倾斜
* @n - BMI3_INT_STATUS_TAP: 检测到敲击
*/
uint16_t getIntStatus(void);
/**
* @fn enableAnyMotionInt
* @brief 配置任意运动阈值中断(使用官方结构体参数)
* @param config 任意运动配置结构体(参见 bmi3_any_motion_config)
* @n 参数说明:
* @n - slope_thres: 加速度斜率阈值,范围
* 0-4095,单位 1.953mg/LSB(官方示例:9 ≈ 17.6mg)
* @n - hysteresis: 滞回值,范围 0-1023,单位 1.953mg/LSB(官方示例:5 ≈ 9.8mg)
* @n - duration: 持续时间,范围 0-8191,单位 20ms(官方示例:9 = 180ms)
* @n - acc_ref_up: 加速度参考更新模式,0=事件触发时,1=始终更新(官方示例:1)
* @n - wait_time: 等待时间,范围 0-7,单位 20ms(官方示例:4-5 = 80-100ms)
* @param pin 绑定的中断引脚
* @param axisMask 轴选择掩码(默认:eAxisXYZ)
* @return bool 类型,表示配置状态
* @retval true 配置成功
* @retval false 配置失败
*/
bool enableAnyMotionInt(const struct bmi3_any_motion_config &config,
eInt_t pin, uint8_t axisMask = eAxisXYZ);
/**
* @fn enableNoMotionInt
* @brief 配置无运动阈值中断(使用官方结构体参数)
* @param config 无运动检测配置结构体(参见 bmi3_no_motion_config)
* @n 参数说明:
* @n - slope_thres: 加速度斜率阈值,范围
* 0-4095,单位 1.953mg/LSB(官方示例:9 ≈ 17.6mg)
* @n - hysteresis: 滞回值,范围 0-1023,单位 1.953mg/LSB(官方示例:5 ≈ 9.8mg)
* @n - duration: 持续时间,范围 0-8191,单位 20ms(官方示例:9 = 180ms)
* @n - acc_ref_up: 加速度参考更新模式,0=事件触发时,1=始终更新(官方示例:1)
* @n - wait_time: 等待时间,范围 0-7,单位 20ms(官方示例:5 = 100ms)
* @param pin 绑定的中断引脚
* @param axisMask 轴选择掩码(默认:eAxisXYZ)
* @return bool 类型,表示配置状态
* @retval true 配置成功
* @retval false 配置失败
*/
bool enableNoMotionInt(const struct bmi3_no_motion_config &config, eInt_t pin,
uint8_t axisMask = eAxisXYZ);
/**
* @fn enableSigMotionInt
* @brief 配置显著运动检测中断(使用官方结构体参数)
* @param config 显著运动配置结构体(参见 bmi3_sig_motion_config)
* @n 参数说明:
* @n - block_size: 检测段大小,范围 0-65535(官方示例:200)
* @n - peak_2_peak_min: 峰峰值加速度最小值,范围 0-1023(官方示例:30)
* @n - peak_2_peak_max: 峰峰值加速度最大值,范围 0-1023(官方示例:30)
* @n - mcr_min: 每秒平均交叉率最小值,范围 0-62(官方示例:0x10 = 16)
* @n - mcr_max: 每秒平均交叉率最大值,范围 0-62(官方示例:0x10 = 16)
* @param pin 绑定的中断引脚
* @return bool 类型,表示配置状态
* @retval true 配置成功
* @retval false 配置失败
*/
bool enableSigMotionInt(const struct bmi3_sig_motion_config &config,
eInt_t pin);
/**
* @fn enableFlatInt
* @brief 配置平面检测中断(使用官方结构体参数)
* @param config 平面检测配置结构体(参见 bmi3_flat_config)
* @n 参数说明:
* @n - theta: 最大允许倾斜角,范围 0-63,角度计算公式为 64 *
* (tan(angle)^2)(官方示例:9)
* @n - blocking: 阻塞模式,0=MODE_0(禁用),1=MODE_1(>1.5g),
* 2=MODE_2(>1.5g 或斜率>半阈值),3=MODE_3(>1.5g 或斜率>阈值)(官方示例:3)
* @n - hold_time: 设备保持平面状态的最小持续时间,范围 0-255,单位 20ms(官方示例:50 = 1000ms)
* @n - hysteresis: 平面检测的滞回角度,范围 0-255(官方示例:9)
* @n - slope_thres: 连续加速度样本之间的最小斜率,范围 0-255(官方示例:0xCD = 205)
* @param pin 绑定的中断引脚
* @return bool 类型,表示配置状态
* @retval true 配置成功
* @retval false 配置失败
*/
bool enableFlatInt(const struct bmi3_flat_config &config, eInt_t pin);
/**
* @fn enableOrientationInt
* @brief 配置方向检测中断(使用官方结构体参数)
* @param config 方向检测配置结构体(参见 bmi3_orientation_config)
* @n 参数说明:
* @n - ud_en: 是否检测翻转(正反面),0=禁用,1=使能(官方示例:1)
* @n - hold_time: 方向变化检测所需的持续时间,范围 0-255,单位 20ms(官方示例:4 = 80ms)
* @n - hysteresis: 方向检测的滞回值,范围 0-255(官方示例:5)
* @n - theta: 最大允许倾斜角,范围 0-63,角度=64*(tan(angle)^2)(官方示例:16)
* @n - mode: 方向检测模式,0/3=对称,1=高不对称,2=低不对称(官方示例:1)
* @n - slope_thres: 防止剧烈运动导致误检测的斜率阈值,范围 0-255(官方示例:30)
* @n - blocking: 阻塞模式,0-3(官方示例:3)
* @param pin 绑定的中断引脚
* @return bool 类型,表示配置状态
* @retval true 配置成功
* @retval false 配置失败
*/
bool enableOrientationInt(const struct bmi3_orientation_config &config,
eInt_t pin);
/**
* @fn readOrientation
* @brief 读取方向检测输出
* @param portraitLandscape 横竖屏状态输出指针,可为 NULL
* @param faceUpDown 正反面状态输出指针,可为 NULL
* @return bool 类型,表示读取状态
* @retval true 读取成功
* @retval false 读取失败或功能未使能
*/
bool readOrientation(uint8_t *portraitLandscape, uint8_t *faceUpDown);
/**
* @fn enableTapInt
* @brief 配置敲击检测中断(使用官方结构体参数)
* @param config 敲击检测配置结构体(参见 bmi3_tap_detector_config)
* @n 关键参数(参考 tap.c):
* @n - axis_sel: 选择敲击检测的轴(0=X,1=Y,2=Z)
* @n - mode: 检测模式(0=敏感,1=普通,2=稳健)
* @n - tap_peak_thres / tap_shock_settling_dur 等用于确定敲击的时序/幅度阈值
* @param pin 绑定的中断引脚
* @param enableSingle 是否使能单击检测(默认 true)
* @param enableDouble 是否使能双击检测(默认 true)
* @param enableTriple 是否使能三击检测(默认 true)
* @return bool 类型,表示配置状态
* @retval true 配置成功
* @retval false 配置失败
*/
bool enableTapInt(const struct bmi3_tap_detector_config &config, eInt_t pin,
bool enableSingle = true, bool enableDouble = true,
bool enableTriple = true);
/**
* @fn readTapStatus
* @brief 读取敲击检测状态(单击/双击/三击)
* @param tapMask 输出掩码(可组合 BMI3_TAP_DET_STATUS_SINGLE/DOUBLE/TRIPLE)
* @return bool 类型,表示读取状态
* @retval true 读取成功
* @retval false 读取失败
*/
bool readTapStatus(uint8_t *tapMask);
/**
* @fn enableTiltInt
* @brief 配置倾斜检测中断(使用官方结构体参数)
* @param config 倾斜检测配置结构体(参见 bmi3_tilt_config)
* @n 关键参数(参考 tilt.c):
* @n - segment_size: 用于平均参考向量的时间窗口,范围 0-255
* @n - min_tilt_angle: 需要超过的最小倾斜角,范围 0-255,角度=256*cos(angle)
* @n - beta_acc_mean: 低通平均系数,范围 0-65535
* @param pin 绑定的中断引脚
* @return bool 类型,表示配置状态
* @retval true 配置成功
* @retval false 配置失败
*/
bool enableTiltInt(const struct bmi3_tilt_config &config, eInt_t pin);