最近需要使用磁传感器,之前使用的是HMC5883,不过这次买的是LSM303D,记录一下。使用的单片机是STM32F407,模拟iic,正点原子的库。
数据手册参考的是:https://item.szlcsc.com/2776949.html
代码参考的是:https://blog.youkuaiyun.com/cp1300/article/details/75644988
修改的代码如下
#include "lsm303.h"
#include "delay.h"
#include "usart.h"
#include "myiic.h"
//参考手册25页
// 磁传感器那部分地址是写是0x3c, 读是0x3d. 加速度的应该是0x30跟0x31或者0x32和0x33
#define SlaveAddr_A 0x32
#define SlaveAddr_M 0x3C
// 传感器初始化
u8 LSM303DLH_Init()
{
u8 temp;
u8 retry = 0;
IIC_Init();//iic引脚初始化.直接使用正点原子的库,修改相对应的引脚即可.
for(retry = 0;retry < 3;retry ++)
{
LSM303DLH_WriteOneReg(LSM303_CTRL_REG1_A_0x20, 0x27); //正常模式,50Hz速度
delay_ms(3); //延时3ms
temp = LSM303DLH_ReadOneReg(LSM303_CTRL_REG1_A_0x20); //读取0x20寄存器,默认值为0x07
if(temp != 0x27) //值不对
{
printf("初始化失败,LSM303_CTRL_REG1_A_0x20默认值错误:0x%02X\r\n", temp);
delay_ms(10);
}
else break;
}
if(temp != 0x27) //值不对
{
return FALSE;
}
delay_ms(1); //延时1ms
for(retry = 0;retry < 3;retry ++)
{
LSM303DLH_WriteOneReg(LSM303_CRA_REG_M_0x00, 0x30); //磁场传感器30Hz,正常测量
delay_ms(1);

本文介绍如何使用LSM303D磁传感器,并提供了基于STM32F407单片机的代码实现。文章详细记录了传感器的初始化过程及磁场强度的读取方法。
最低0.47元/天 解锁文章
5万+





