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

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;
}

在这里插入图片描述


相关文章:

  • Maven 基础环境搭建与配置(一)
  • 固态电容寿命
  • 【Java学习】抽象类与接口
  • 14.5 基于LangChain重构Auto-GPT:新一代自主智能体架构设计实践
  • Deepseek存算分离安全部署手册
  • Baklib革新数字化内容管理流程安全策略
  • Git常见命令--助力开发
  • 论文绘图工具
  • 【多模态处理篇八】【DeepSeek增强现实:AR导航实时推理优化】
  • Vue 不同大版本与 Node.js 版本匹配的详细参数
  • 蓝桥杯真题 - 缴纳过路费 - 题解
  • 【Agent的革命之路——LangGraph】工作流中的 Command 模式
  • 【C语言】(一)数据在计算机中的存储与表示
  • 解决Excel文件格式损坏问题:如何通过程序读取并复制内容
  • MySQL 中的索引数量是否越多越好?
  • hot100_139. 单词拆分
  • Linux-Ansible模块进阶
  • 【我的Android进阶之旅】Android Studio SDK Update Site 国内的腾讯云镜像配置指南
  • 【Arduino小项目】控制步进电机
  • 通俗易懂的DOM1级标准介绍
  • 这个五月,有三部纪录电影值得一看
  • 8小时《大师与玛格丽特》:长度可以是特点,但不是价值标准
  • 潘功胜:降准0.5个百分点,降低政策利率0.1个百分点
  • 儿童文学作家周晴病逝,享年57岁
  • 特朗普考虑任命副幕僚长米勒任国安顾问,曾策划驱逐移民行动
  • 演员扎堆音乐节,是丰富了舞台还是流量自嗨?