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. 重要说明
- 校准要求:使用前需进行磁力计校准,执行8字校准法获取偏移量
- 安装方向:注意传感器安装方向,Y轴数据对应实际东向,X轴对应北向
- 干扰处理:远离金属物体和强磁场,PCB布局时避免靠近大电流线路
- 温度补偿:长时间使用需考虑温度漂移,必要时添加温度补偿算法
- 数据滤波:建议添加滑动平均滤波或卡尔曼滤波处理数据
4. 常见问题排查
- 检查I2C地址是否正确(0x1E)
- 确认I2C总线上拉电阻已启用(通常4.7kΩ)
- 验证电源电压稳定在3.0-3.3V
- 检查字节顺序(HMC5883L输出顺序为X、Z、Y)
如果需要完整工程示例或更详细的校准实现,可以进一步说明具体需求。
浅谈HMC5883L和QMC5883P磁力计的区别及STM32F103驱动
HMC5883L和QMC5883P是两款硬件兼容但软件不兼容的磁力计芯片,主要区别在于寄存器地址、设备地址和磁场方向定义。本文提供了HMC5883L
2025-08-30 10:10:19
HMC5883L传感器的sampling rate tolerance指的是什么?
我用到一个传感器HMC5883L,有人提出必须考虑传感器的sampling rate tolerance,可是我不明白这是什么意思???
磁力计HMC5883L传感器特性
霍尼韦尔 HMC5883L 是一种表面贴装的高集成模块,并带有数字接口的弱磁传感器芯片,应用于低成本罗盘和磁场检测领域(指南针、GPS)。 HMC5883L 包括最先进的高分辨率
2023-07-20 10:40:39
HMC5883L的应用和引脚与寄存器及读写数据等详细资料说明
本文档的主要内容详细介绍的是HMC5883L的应用和引脚与寄存器及读写数据的详细资料说明。
资料下载
张涛
2019-08-16 17:32:00
Noob使用ESP8266校准HMC5883L一直报错是怎么回事?
传感器避开障碍物的驾驶机器人。 我附上了一个罗盘,可以让它产生一些准确的读数,但我知道它需要校准。 我一直在尝试让这段代码与我的 gy273 罗盘(已确认 HMC5883L)一起使用https
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线,我用
如何基于VHDL语言通过IIC总线电路获取HMC5883L芯片的数据并转存到PFGA上,最终在LCD上显示结果?
要求是利用IIC总线电路实现霍尼韦尔HMC5883L芯片的设置和数据读取,要求利用VHDL语言,并实时显示。如何通过IIC总线电路对HMC5883L芯片进行数据的读取?用VHDL语言该如何描述?仿真坏境是Quartu
请问MPU6050,HMC5883L,ADXL345之间我该选择哪个?
我想测量一个物体的自身旋转角度(应该是相当于自身的偏航角yaw),最近一段时间一直在看相关的资料和一些程序。MPU6050是 3轴角度+3轴加速度,HMC5883L是磁力计,ADXL345是加速度计
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- amoled屏幕和oled区别
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机
- 元宇宙概念龙头股一览