STM32CubeMX使用(五)之IIC及数字加速度计LIS2DW12、IIC遇到的问题、其他用到的IMU
2026/5/15 23:18:44 网站建设 项目流程

目录

  • 一、概述
  • 二、Pinout&Configuration
    • 2.1 选择端口
  • 三、LIS2DW12
  • 四、IIC遇到的问题
    • IIC无ACK
  • 五、其他IMU
    • 5.1 LSM6DSM
      • 5.1.1 资料获取
        • 关于IMU的一些基本概念
      • 5.1.2 初始化设置
      • IIC通信地址
        • 检测通信正常
        • 开启加速度/陀螺仪,设置量程
      • 5.1.3 获取测量值
      • 5.1.4 唤醒和阈值
    • 5.2 ICM-40607
    • 5.3 ICM-40627

一、概述

本文记录下IIC的使用过程,主要是后续使用,能有个参考。
CubeMX芯片: STM32G0B1RCT6
实际焊接STM32G0B1RET6

二、Pinout&Configuration

2.1 选择端口


好吧,老大希望使用软件IIC。so,关闭IIC外设,两个管脚设置开漏输出
关于IIC的时序,非常推荐的一篇博客:IIC原理超详细讲解—值得一看。
软件IIC已有非常多的资料,我使用了野火F103开发板的例程:

只不过例程操作EEPROM,而我这里是操作LIS2DW12,对应调整一下就好。

三、LIS2DW12

ST官方提供了LIS2DW12的驱动库和一些使用例程:点击跳转,根据自己的传感器型号选择进入:

可以看到LIS2DW12传感器里有driver和examples两个文件夹:

  1. 进入第一个driver @ d8457a1:
  2. 进入examples文件夹,这里是各种例程。

四、IIC遇到的问题

  1. 在模拟IIC时序过程中,需要读取SDA电平,不必设置成输入状态,一直为输出即可。
  2. 管脚切记设置成开漏状态,否则高电平拉不起来。

IIC无ACK

【IIC通信】Chap.1(I2C)IIC通信原理、IIC读写时序详解

总线上的数据格式
无数据(空闲):SCL=1,SDA=1;
开始位(Start):当SCL=1时,SDA由1向0跳变;
停止位(Stop):当SCL=1时,SDA由0向1跳变;
数据位:当SCL由0向1跳变时,由发送方控制SDA,此时SDA为有效数据,不可随意改变SDA;当SCL保持为0时,SDA上的数据可随意改变;
地址位:定义同数据位,但只由Master发给Slave;
应答位(ACK):当发送方传送完8位时,发送方释放SDA,由接收方控制SDA,且SDA=0;
否应答位(NACK):当发送方传送完8位时,发送方释放SDA,由接收方控制SDA,且SDA=1。 当数据为单字节传送时,格式为:开始位 +
8位地址位(含1位读写位) + 应答 + 8位数据 + 应答 + 停止位。 当数据为一串字节传送时,格式为:开始位 +
8位地址位(含1位读写位) + 应答 + 8位数据 + 应答 + 8位数据 + 应答 + …… + 8位数据 + 应答 + 停止位。

【IIC通信】Chap.2 (I2C)IIC协议的特点;为什么IIC需要开漏输出、上拉电阻?

IIC原理超详细讲解—值得一看
IIC接收不到从设备ack问题

IIC通信异常
I2C SDA SCL被拉低问题分析
IIC接口----解挂死
I2C 挂死原因分析及解决方案

五、其他IMU

本节主要是记录下用到的IMU,方便以后查找。

5.1 LSM6DSM

5.1.1 资料获取

在ST官网(点击进入)中直接搜索LSM6DSM,搜索结果如下:

选择 LSM6DSM,跳转后选择文档,就可以找到芯片手册和应用手册等资料:

github上,ST官方给出的源文件:添加链接描述。只有寄存器的.c.h

关于IMU的一些基本概念

姿态角解算(MPU6050 加速度计加陀螺仪):

从ADC值到 dps
通过I2C接口读出来的转换结果ADC值,并不是以度每秒为单位。一般按以下公式进行转 换:Anglerate = ADCrate /灵敏度 以量程为±1000º/s为例,说明如何转换。假设读取x轴的ADC值为200,从上表中得知在 ±1000º/s下的灵敏度为32.8LSB/(º/s) 。根据上面的公式: Anglerate = 200/32.8 = 6.09756º/s 这就是说,MPU6050检测到模块正在以约6度每秒的速度绕X轴(或者叫在YZ平面上)旋转.
ADC值并不都是正的,请注意,当出现负数时,意味着该设备从现有的正方向相反的方向旋转.

陀螺仪参数中 °/sec/LSB 和 LSB/°/sec 是什么关系?

两个单位互为倒数关系,LSB为最小有效位

LSB/g,count/g,V/g,V/°几种方式之间的说明及转换公式

圆点博士陀螺仪和加速度计MPU6050的单位换算方法

G-sensor概述及常用芯片整理:

ODR(Output Data Rate),表示G-sensor的输出数据的刷新频率。ODR越高,输出数据更新越快,功耗越高。G-sensor的ODR往往都是可以配置的。

5.1.2 初始化设置

初始化IIC后,还有两部分

IIC通信地址

使用IIC通信
6.4.1 I2C operation一节中有说明:

由SDO/SAO决定

检测通信正常

WHO_AM_I (0Fh)

通过

不同的型号,这里可能是不同的。比如《lsm6dsr.pdf》中是6B

《lsm6ds3_datasheet.pdf》中是69

开启加速度/陀螺仪,设置量程

CTRL1_XL (10h)
设置加速度模式、量程

ORD:output data rate

寄存器设置为0x60,
XL_HM_MODE 没有影响,都是416Hz (high performance),XL_HM_MODE的含义具体见CTRL6_C (15h)

选择±2g
CTRL2_G (11h)
设置陀螺仪模式、量程

5.1.3 获取测量值

《AN4987__LSM6DSM_ 始终开启的3D 加速度计和3D 陀螺仪.pdf》中4.2 使用状态寄存器
OUTX_L_G (22h)
OUTX_L_XL (28h)

添加链接描述:参考头文件即可。负数没有求原值????

5.1.4 唤醒和阈值

《AN4987__LSM6DSM_ 始终开启的3D 加速度计和3D 陀螺仪.pdf》中5.3 唤醒中断
TAP_CFG (58h)
开启中断

WAKE_UP_DUR

MD1_CFG

5.2 ICM-40607

下载链接:点击进入

5.3 ICM-40627

官网下载手册:点击进入

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询