登录/注册

hmc5883l stm32程序

更多

以下是一个基于STM32的HMC5883L磁力计驱动程序示例(使用HAL库和I2C接口):

1. 硬件连接

HMC5883L   STM32
VCC  →  3.3V
GND  →  GND
SCL  →  PB6 (I2C1_SCL)
SDA  →  PB7 (I2C1_SDA)

2. 代码实现

#include "main.h"
#include <math.h>

#define HMC5883L_ADDR 0x1E << 1  // I2C地址
I2C_HandleTypeDef hi2c1;         // 已初始化的I2C句柄

// 初始化传感器
void HMC5883L_Init(void)
{
    // 设置配置寄存器A
    // 8次平均采样,15Hz输出速率,正常测量模式
    uint8_t configA = (0x03 << 5) | (0x06 << 2) | 0x00;
    HAL_I2C_Mem_Write(&hi2c1, HMC5883L_ADDR, 0x00, 1, &configA, 1, 100);

    // 设置模式寄存器为连续测量模式
    uint8_t mode = 0x00;
    HAL_I2C_Mem_Write(&hi2c1, HMC5883L_ADDR, 0x02, 1, &mode, 1, 100);
}

// 读取原始数据
void HMC5883L_ReadRaw(int16_t* x, int16_t* y, int16_t* z)
{
    uint8_t data[6];

    // 从0x03开始读取6个字节的数据(X、Z、Y各两个字节)
    HAL_I2C_Mem_Read(&hi2c1, HMC5883L_ADDR, 0x03, 1, data, 6, 100);

    // 数据重组(注意X/Y/Z顺序)
    *x = (int16_t)(data[0] << 8 | data[1]);
    *z = (int16_t)(data[2] << 8 | data[3]);
    *y = (int16_t)(data[4] << 8 | data[5]);
}

// 获取校准后的磁力值(单位:高斯)
void HMC5883L_GetData(float* mx, float* my, float* mz)
{
    int16_t x, y, z;
    HMC5883L_ReadRaw(&x, &y, &z);

    // 转换为高斯(假设量程为±1.3Ga,灵敏度1090 LSB/Gauss)
    *mx = (float)x / 1090.0;
    *my = (float)y / 1090.0;
    *mz = (float)z / 1090.0;
}

// 示例主循环
int main(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_I2C1_Init();  // 需提前配置I2C外设

    HMC5883L_Init();

    while (1)
    {
        float mx, my, mz;
        HMC5883L_GetData(&mx, &my, &mz);

        // 计算方位角(电子罗盘)
        float heading = atan2(my, mx) * 180 / M_PI;
        if (heading < 0) heading += 360;

        HAL_Delay(100);
    }
}

3. 重要说明

  1. 校准要求:使用前需进行磁力计校准,执行8字校准法获取偏移量
  2. 安装方向:注意传感器安装方向,Y轴数据对应实际东向,X轴对应北向
  3. 干扰处理:远离金属物体和强磁场,PCB布局时避免靠近大电流线路
  4. 温度补偿:长时间使用需考虑温度漂移,必要时添加温度补偿算法
  5. 数据滤波:建议添加滑动平均滤波或卡尔曼滤波处理数据

4. 常见问题排查

如果需要完整工程示例或更详细的校准实现,可以进一步说明具体需求。

浅谈HMC5883L和QMC5883P磁力计的区别及STM32F103驱动

HMC5883L和QMC5883P是两款硬件兼容但软件不兼容的磁力计芯片,主要区别在于寄存器地址、设备地址和磁场方向定义。本文提供了HMC5883L

2025-08-30 10:10:19

HMC5883L传感器的sampling rate tolerance指的是什么?

我用到一个传感器HMC5883L,有人提出必须考虑传感器的sampling rate tolerance,可是我不明白这是什么意思???

2023-12-15 07:29:13

磁力计HMC5883L传感器特性

霍尼韦尔 HMC5883L 是一种表面贴装的高集成模块,并带有数字接口的弱磁传感器芯片,应用于低成本罗盘和磁场检测领域(指南针、GPS)。 HMC5883L 包括最先进的高分辨率

2023-07-20 10:40:39

霍尼韦尔HMC5883L详细资料下载

霍尼韦尔HMC5883L详细资料下载

资料下载 塞北的雪和大海 2021-12-08 10:51:39

QMC5883L磁力计介绍(硬件+软件)(附STM32程序~~~)

QMC5883L磁力计介绍(硬件+软件)(附STM32程序~~~)

资料下载 王磊 2021-12-08 10:51:03

stm32L编程手册

本参考手册面向应用程序开发人员。 它提供了有关的完整信息如何使用STM32L151xx,STM32L152xx和

资料下载 姚小熊27 2021-04-28 16:00:38

MPU6050和HMC5883的驱动程序免费下载

本文档的主要内容详细介绍的是MPU6050和HMC5883的驱动程序免费下载。

资料下载 佚名 2019-09-05 16:37:00

HMC5883L的应用和引脚与寄存器及读写数据等详细资料说明

本文档的主要内容详细介绍的是HMC5883L的应用和引脚与寄存器及读写数据的详细资料说明。

资料下载 张涛 2019-08-16 17:32:00

Noob使用ESP8266校准HMC5883L一直报错是怎么回事?

传感器避开障碍物的驾驶机器人。 我附上了一个罗盘,可以让它产生一些准确的读数,但我知道它需要校准。 我一直在尝试让这段代码与我的 gy273 罗盘(已确认 HMC5883L)一起使用https

2023-06-01 13:16:04

HMC5883L磁力传感器使用指南

霍尼韦尔 HMC5883L 是一种表面贴装的高集成模块,并带有数字接口的弱磁传感器芯片,应用于低成本罗盘和磁场检测领域(指南针、GPS)。

2023-04-17 18:00:09

如何利用HMC5883L实现三轴磁力计的设计

在这个中,我们的 HMC5883L 3 项目设备可以测量地球将磁力计连接到 Arduino 方向。 Uno。它是一种以低轴设备中的设备,可以在手机或导航中,找到提供准确的您航还可以使用它们来检测含铁(含铁)金属,因为金属中的铁在靠近传感器的时候会改变磁场。

2022-06-10 16:24:04

HMC5883L接51单片机没有响应

各位大神们好!在TB上买了一块HMC5883L的地磁传感器,就是用来做指南针的,拿来直接就接5V IO的单片机了,开始偶尔能响应一下,响应是指,芯片接到数据后能发出应答信号,拉低SDA线,我用

2020-03-18 04:35:25

如何基于VHDL语言通过IIC总线电路获取HMC5883L芯片的数据并转存到PFGA上,最终在LCD上显示结果?

要求是利用IIC总线电路实现霍尼韦尔HMC5883L芯片的设置和数据读取,要求利用VHDL语言,并实时显示。如何通过IIC总线电路对HMC5883L芯片进行数据的读取?用VHDL语言该如何描述?仿真坏境是Quartu

2019-12-04 23:43:18

请问MPU6050,HMC5883L,ADXL345之间我该选择哪个?

我想测量一个物体的自身旋转角度(应该是相当于自身的偏航角yaw),最近一段时间一直在看相关的资料和一些程序。MPU6050是 3轴角度+3轴加速度,HMC5883L是磁力计,ADXL345是加速度计

2019-07-31 04:36:16

如何处理磁力计HMC5883L获取的三轴数据?

用HMC5883L来矫正陀螺仪使用四元数法来求偏航角,想问问如何处理磁力计HMC5883L获取的三轴数据?

2019-07-25 19:44:00
7天热门专题 换一换
相关标签