当前位置: 首页 > article >正文

RT-Thread+STM32L475VET6——icm20608传感器


文章目录

  • 前言
  • 一、板载资源
  • 二、具体步骤
    • 1.打开CubeMX进行配置
      • 1.1 使用外部高速时钟,并修改时钟树
      • 1.2 打开I2C3,参数默认即可(I2C根据自己需求调整)
      • 1.3 打开串口
      • 1.4 生成工程
    • 2. 添加icm20608软件包
    • 3. 使能传感器,打开动态链接库
    • 4. 配置I2C
      • 4.1 使能I2C
      • 4.2 声明I2C
      • 4.3 添加I2C对应引脚
    • 5. 烧录,下载


前言

本文采用开发板为STM32L475VET6(潘多拉开发板),使用RT_Thread Studio基于芯片开发模式,系统版本为4.0.3,完成icm20608传感器实验,实现加速度和陀螺仪数据的采集


一、板载资源

icm20608传感器采用I2C协议,本文采用软件模拟I2C
查阅数据手册:开发板使用的是 PC0 模拟时钟线SCL、PC1 模拟数据线 SDA,
在这里插入图片描述

二、具体步骤

1.打开CubeMX进行配置

1.1 使用外部高速时钟,并修改时钟树

在这里插入图片描述
在这里插入图片描述

1.2 打开I2C3,参数默认即可(I2C根据自己需求调整)

在这里插入图片描述

1.3 打开串口

在这里插入图片描述

1.4 生成工程

在这里插入图片描述

2. 添加icm20608软件包

在这里插入图片描述

3. 使能传感器,打开动态链接库

在这里插入图片描述

4. 配置I2C

打开borad.h,按照官方步骤配置
在这里插入图片描述

4.1 使能I2C

在这里插入图片描述

4.2 声明I2C

在这里插入图片描述

4.3 添加I2C对应引脚

在这里插入图片描述

5. 烧录,下载

测试代码

#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
#include <icm20608.h>

int main(void)
{
    icm20608_device_t dev;
    rt_err_t result;
    dev=icm20608_init("i2c3");
    if(dev!=RT_NULL){
        rt_kprintf("icm20608 init success!");
    }else {
        rt_kprintf("icm20608 init fialure!");
    }

    // icm20608较准
    result=icm20608_calib_level(dev, 10);
    if(result==RT_EOK) //较准成功
    {
        rt_kprintf("calibation success!\r\n");
        rt_kprintf("accel_offset: X%6d  Y%6d  Z%6d\r\n", dev->accel_offset.x, dev->accel_offset.y, dev->accel_offset.z);
        rt_kprintf("gyro_offset : X%6d  Y%6d  Z%6d\r\n", dev->gyro_offset.x, dev->gyro_offset.y, dev->gyro_offset.z);
    }
    else
    {
        rt_kprintf("cablibation failure!\r\n");
    }

    //icm20608开始采集数据
    while (1)
    {
        rt_int16_t accel_x, accel_y, accel_z;
        rt_int16_t gyros_x, gyros_y, gyros_z;

        /* 读取三轴加速度 */
        result = icm20608_get_accel(dev, &accel_x, &accel_y, &accel_z);
        if (result == RT_EOK)
        {
            rt_kprintf("current accelerometer: accel_x%6d, accel_y%6d, accel_z%6d\r\n", accel_x, accel_y, accel_z);
        }
        else
        {
            rt_kprintf("The sensor does not work\r\n");
            break;
        }

        /* 读取三轴陀螺仪 */
        result = icm20608_get_gyro(dev, &gyros_x, &gyros_y, &gyros_z);
        if (result == RT_EOK)
        {
            rt_kprintf("current gyroscope    : gyros_x%6d, gyros_y%6d, gyros_z%6d\r\n", gyros_x, gyros_y, gyros_z);
        }
        else
        {
            rt_kprintf("The sensor does not work\r\n");
            break;
        }
        rt_thread_mdelay(1000);

    }

    return RT_EOK;
}

在这里插入图片描述



http://www.kler.cn/a/557748.html

相关文章:

  • 可变参数学习
  • 论文略:ACloser Look into Mixture-of-Experts in Large Language Models
  • 详解单例模式、模板方法及项目和源码应用
  • 基于Spring Boot的兴顺物流管理系统设计与实现(LW+源码+讲解)
  • Linux提权篇之内核提权(三)
  • Rust并发编程实践:10分钟入门系统级编程
  • reacct hook useState
  • Linux 在云计算中的应用有哪些?
  • Flutter 启动优化
  • Part 3 第十二章 单元测试 Unit Testing
  • 二叉树-翻转二叉树
  • Spring Boot项目@Cacheable注解的使用
  • 探索YOLO技术:目标检测的高效解决方案
  • ChatGPT平替自由!DeepSeek-R1私有化部署全景攻略
  • vue3 采用xlsx库实现本地上传excel文件,前端解析为Json数据
  • 【Java高级篇】——第16篇:高性能Java应用优化与调优
  • 07.Docker 数据管理
  • ok113i平台——qt+tslib支持usb触摸屏热插拔功能实现
  • 3.Docker常用命令
  • 深入解析设计模式之单例模式