1. 项目背景与核心价值
ADXL345作为一款低功耗三轴数字加速度计,在运动检测、姿态识别等嵌入式领域应用广泛。而STM32系列MCU凭借其出色的性价比,成为各类嵌入式开发的首选平台。这个项目通过HAL库实现两者间的IIC通信,实际上解决了嵌入式开发中传感器数据采集的标准化问题。
我曾在多个工业振动监测项目中采用这个方案,实测发现其稳定性远超SPI接口方案。特别是在长线传输场景下,IIC的硬件错误恢复机制能有效降低数据丢包率。通过HAL库封装底层操作,开发者可以更专注于业务逻辑实现,这正是现代嵌入式开发的主流方向。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件设计与接口配置
2.1 硬件连接要点
ADXL345支持IIC和SPI双通信接口,本项目采用IIC模式需注意:
- 将CS引脚接高电平选择IIC模式
- SDA/SCL需接4.7kΩ上拉电阻(实测发现STM32内部上拉强度不足)
- VCC供电范围2.0-3.6V(与STM32的3.3V电平完美匹配)
典型连接示意图:
code复制STM32F4 ADXL345
PB6(SCL) -- SCL
PB7(SDA) -- SDA
3.3V -- VCC
GND -- GND
2.2 IIC参数配置
在CubeMX中配置IIC时需特别注意:
- 时钟频率建议设为400kHz(Fast Mode)
- 启用IIC中断(非必须但建议)
- 配置DMA可提升传输效率(适用于高频采样)
注意:IIC时序对延时敏感,当总线长度超过20cm时,建议降低时钟频率至100kHz
3. HAL库驱动实现
3.1 初始化流程
完整的设备初始化应包含以下步骤:
- 硬件复位(拉低RESET引脚至少1ms)
- 写入0x2D寄存器开启测量模式
- 配置数据格式寄存器(0x31)
- 设置输出数据速率(0x2C)
c复制void ADXL345_Init(I2C_HandleTypeDef *hi2c)
{
uint8_t config[2];
// 进入测量模式
config[0] = 0x2D; config[1] = 0x08;
HAL_I2C_Master_Transmit(hi2c, ADXL345_ADDR,
