参考资料

  1. 数据手册:LIS3DH.pdf
  2. 官方驱动代码:lis3dh与lis3dsh官方驱动及例子.rar
  3. 其他资料:
    1. STM32F03通过模拟IIC读取LIS3DH 解析数据获取加速度和角度.rar
    2. LIS3DH完整资料.tar
    3. i2c总线协议(中文版pdf).pdf

调试记录

关于CS脚和I2C地址

CS脚接高时表示使用I2C接口,接低时表示使用SPI接口。

使用I2C接口时,通信地址高6位是0b001100,第7位由SDO/SA0脚决定,接高电平时为1,接低电平时为0,第8位是读写标志位,读取时为1,写入时为0,地址组合关系如下:

测试I2C通信是否成功,可以读取0x0f寄存器,这个是LIS3DH的ID寄存器,值为0x33表示通信成功。

/*
 * CS=1, use I2C, CS=0, use SPI
 * on I2C mode, SDO=0, I2C addr is 0x31 & 0x30, SDO=1, addr is 0x33 & 0x32
*/
#if 0
#define LIS3DH_I2C_ADD_READ    0x31U
#define LIS3DH_I2C_ADD_WRITE   0x30U
#else
#define LIS3DH_I2C_ADD_READ    0x33U
#define LIS3DH_I2C_ADD_WRITE   0x32U
#endif

#define LIS3DH_WHO_AM_I        0x0FU
#define LIS3DH_ID              0x33U

关于IO模拟I2C的通信过程

参考下代码:

void lis3dh_write_one_byte(uint8_t addr, uint8_t data)
{
	iic_start();

	iic_send_byte(LIS3DH_I2C_ADD_WRITE);
	iic_wait_ack();
	iic_send_byte(addr);
	iic_wait_ack();

	iic_send_byte(data);
	iic_wait_ack();

	iic_stop();
	delay_ms(10);
}

uint8_t lis3dh_read_one_byte(uint8_t addr)
{
	iic_start();

	iic_send_byte(LIS3DH_I2C_ADD_WRITE);
	iic_wait_ack();
	iic_send_byte(addr);
	iic_wait_ack();
	
	iic_start();
	iic_send_byte(LIS3DH_I2C_ADD_READ);
	iic_wait_ack();
	uint8_t data = iic_read_byte(0);
	
	iic_stop();
	return data;
}

STM32F103示例工程

LIS3DH测试工程.zip

参考链接

  1. LIS3DH 三轴加速度传感器使用流程及示例_三轴加速度传感器lis3dh_zhangfls的博客-CSDN博客
  2. stm32 硬件IIC使用方法说明与示例---LIS3DH的IIC通信_i2c_generatestart_zhangfls的博客-CSDN博客

  • 无标签