LSM303D磁传感器数据读取

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

最近需要使用磁传感器,之前使用的是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);									
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值