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

使用MPU6050产生中断,唤醒休眠中的STM32

本篇文章源码:STM32L431_RT_Thread_PM_mpu6050_wakeup: 使用MPU6050产生中断,唤醒休眠中的STM32L4

书接上回【笔记】STM32L4系列使用RT-Thread Studio电源管理组件(PM框架)实现低功耗-CSDN博客

上一篇文章使用PA0外接一个按键实现唤醒单片机,因为公司项目需求,需要设备在MPU6050产生位移时唤醒单片机,话不多说直接开始

一.使用MPU6XXX软件包

 

去掉磁力计,打开示例工程

 保存,编译

二.配置RTT工程

 打开模拟I2C

打开I2C1宏定义

 将packages\mpu6xxx-v1.1.1\samples\mpu6xxx_sample.c里边的i2c2改为i2c1

 编译下载,然后终端输入mpu6xxx_test,现象:

 MPU6050驱动成功

三.修改MPU6050驱动

因为MPU6050要经过配置,才能产生正确的中断信号,我们直接去修改源码

packages\mpu6xxx-v1.1.1\src\mpu6xxx.c里找到struct mpu6xxx_device *mpu6xxx_init(const char *dev_name, rt_uint8_t param)

在源码的配置下边加入我们自己的配置

    // 复位设备
    mpu6xxx_write_reg(dev, MPU6XXX_RA_PWR_MGMT_1, 0x80); // 复位
    HAL_Delay(100);

    // 清除复位并配置电源管理
    mpu6xxx_write_reg(dev, MPU6XXX_RA_PWR_MGMT_1, 0x01); // 设置时钟源为 PLL with X axis gyro reference
    mpu6xxx_write_reg(dev, MPU6XXX_RA_PWR_MGMT_2, 0x00); // 启用所有传感器

    // 配置加速度计
    mpu6xxx_write_reg(dev, MPU6XXX_RA_ACCEL_CONFIG, 0x00); // ±2g

    // 配置陀螺仪
    mpu6xxx_write_reg(dev, MPU6XXX_RA_GYRO_CONFIG, 0x08); // ±500°/s

    // 配置数字低通滤波器
    mpu6xxx_write_reg(dev, MPU6XXX_RA_CONFIG, 0x00); // 禁用 DLPF

    // 配置采样率分频器
    mpu6xxx_write_reg(dev, MPU6XXX_RA_SMPLRT_DIV, 0x00); // 不分频

    // 配置运动检测
    mpu6xxx_write_reg(dev, MPU6XXX_RA_MOT_THR, 0x20); // 设置运动检测阈值
    mpu6xxx_write_reg(dev, MPU6XXX_RA_MOT_DUR, 0x01); // 设置运动检测持续时间

    // 配置中断引脚
    mpu6xxx_write_reg(dev, MPU6XXX_RA_INT_PIN_CFG, 0x10); // 高电平有效,推挽输出

    // 启用运动检测中断
    mpu6xxx_write_reg(dev, MPU6XXX_RA_INT_ENABLE, 0x40); // 启用运动检测中断

修改packages\mpu6xxx-v1.1.1\samples\mpu6xxx_sample.c整个文件

/*
 * Copyright (c) 2006-2022, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2018-10-23     flybreak     the first version
 */

#include <rtthread.h>
#include "mpu6xxx.h"

/* Default configuration, please change according to the actual situation, support i2c and spi device name */
#define MPU6XXX_DEVICE_NAME "i2c1"


static void mpu6xxx_thread_entry(void *parameter)
{
    struct mpu6xxx_device *dev;
    struct mpu6xxx_3axes accel, gyro;

    /* Initialize mpu6xxx, The parameter is RT_NULL, means auto probing for i2c*/
    dev = mpu6xxx_init(MPU6XXX_DEVICE_NAME, RT_NULL);

    if (dev == RT_NULL)
    {
        rt_kprintf("mpu6xxx init failed\n");
        return;
    }
    rt_kprintf("mpu6xxx init succeed\n");

    while (1)
    {
        mpu6xxx_get_accel(dev, &accel);
        mpu6xxx_get_gyro(dev, &gyro);

        rt_kprintf("accel.x = %3d, accel.y = %3d, accel.z = %3d ", accel.x, accel.y, accel.z);
        rt_kprintf("gyro.x = %3d gyro.y = %3d, gyro.z = %3d\r\n", gyro.x, gyro.y, gyro.z);

        rt_thread_mdelay(500);
    }

    mpu6xxx_deinit(dev);
}

static int mpu6xxx_test()
{
    rt_thread_t tid;

    /* Create a thread to run the mpu6xxx sensor test */
    tid = rt_thread_create("mpu6xxx_test", mpu6xxx_thread_entry, RT_NULL, 1024, 25, 10);
    if (tid != RT_NULL)
    {
        rt_thread_startup(tid);
        rt_kprintf("mpu6xxx test thread created successfully\n");
    }
    else
    {
        rt_kprintf("Failed to create mpu6xxx test thread\n");
        return -1;
    }

    return 0;
}

MSH_CMD_EXPORT(mpu6xxx_test, mpu6xxx sensor test function);

编译下载,将MPU6050的INT引脚接在板子的PA0,在终端输入mpu6xxx_test,每次晃动传感器,都会触发中断

相关文章:

  • 蓝破云可以实现500M以下文件的百度云到阿里云的转存的云计算服务平台(大约每天50个的限制)
  • 元组(Tuple)详解——c#
  • JVM常用概念之移动GC和局部性
  • hadoop集群环境配置
  • JavaWeb学习——过滤器和监听器
  • 北京大学第五弹:《DeepSeek私有化部署和一体机》
  • Ubuntu-docker安装mysql
  • yoloV5训练visDrone2019-Det无人机视觉下目标检测
  • 开启焊接设备安全管控新纪元
  • 安装完flash-attn,使用时报错undefined symbol
  • Android View设置圆角方式大全
  • Vue3实战学习(Vue3的基础语法学习与使用(超详细))(3)
  • 【Linux】外接硬盘管理
  • Selenium库打开指定端口(9222、9333等)浏览器【已解决!!!】
  • 【JAVA架构师成长之路】【电商系统实战】第9集:订单超时关闭实战(Kafka延时队列 + 定时任务补偿)
  • 计算机视觉|MAE 的项目实战:从图像重建到目标检测
  • Maven的学习以及安装配置 2024/3/1 idea
  • python从入门到精通(二十二):python文件操作之Excel全攻略(基于pandas)
  • Django小白级开发入门
  • [网络爬虫] 动态网页抓取 — Selenium 介绍 环境配置
  • 做b2b网站项目技巧/推广注册app拿佣金平台
  • 网站cc攻击用什么来做/建站平台哪家好
  • 从化企业网站建设/seo怎么读
  • 政府网站建设合同/百度词条搜索排行
  • 做前端网站用什么软件写代码/深圳网络营销推广专员
  • 找人做网站需要什么/企业查询系统