RT-Thread+STM32L475VET6——icm20608传感器


文章目录

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

测试代码

c 复制代码
#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;
}

相关推荐
创界工坊工作室7 小时前
DPJ-120 基于STC89C52的多功能清扫消杀车控制系统设计(源代码+proteus仿真)
stm32·单片机·嵌入式硬件·51单片机·proteus
Darken037 小时前
引脚重映射是什么意思?如何使用?
stm32·单片机·引脚重映射
知南x8 小时前
【正点原子STM32MP157 可信任固件TF-A学习篇】(2) STM32MP1 中的 TF-A
stm32·嵌入式硬件·学习·stm32mp157
逐步前行9 小时前
C51_OLED
单片机
欢鸽儿9 小时前
Vitis】Linux 下彻底清除启动界面 Recent Workspaces 历史路径
linux·嵌入式硬件·fpga
LaoZhangGong12310 小时前
深度学习uip中“uip_arp.c“
c语言·stm32·以太网·arp·uip·enc28j60
Bona Sun11 小时前
单片机手搓掌上游戏机(二十三)—esp32运行简单街机模拟器软硬件准备
c语言·c++·单片机
做一道光12 小时前
电机控制——电流采样(三电阻)
单片机·嵌入式硬件·学习·电机控制
d111111111d13 小时前
STM32外设学习-WDG看门狗-(学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习
LCG米13 小时前
实战:利用恩智浦RT1180的TSN功能,打造高实时性PLC从站IO控制器
嵌入式硬件