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

news2025/3/9 18:12:01

本篇文章源码: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,每次晃动传感器,都会触发中断

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2312265.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥杯备赛:炮弹

题目解析 这道题目是一道模拟加调和级数&#xff0c;难的就是调和级数&#xff0c;模拟过程比较简单。 做法 这道题目的难点在于我们在玩这个跳的过程&#xff0c;可能出现来回跳的情况&#xff0c;那么为了解决这种情况&#xff0c;我们采取的方法是设定其的上限步数。那么…

Mysql中的常用函数

1、datediff(date1,date2) date1减去date2&#xff0c;返回两个日期之间的天数。 SELECT DATEDIFF(2008-11-30,2008-11-29) AS DiffDate -- 返回1 SELECT DATEDIFF(2008-11-29,2008-11-30) AS DiffDate -- 返回-1 2、char_length(s) 返回字符串 s 的字符数 3、round(x,d)…

【AD】5-14 多跟走线设置

多跟走线 快捷键UM 先拉出线头并框选或线选&#xff08;快捷键SL&#xff09;&#xff0c;点击交互式总线布线&#xff08;快捷键UM&#xff09;&#xff0c;走线过程中CtrlB调小线间距&#xff0c;shiftB调大线间距或按TAB键直接修改

生物电阻抗技术:精准洞察人体营养的“智能窗口”

生物电阻抗技术&#xff1a;精准洞察人体营养的“智能窗口” 引言&#xff1a;营养监测的新兴力量 在健康管理日益受到重视的今天&#xff0c;人体营养监测成为保障健康的关键环节。 传统营养评估方法往往依赖于主观问卷或侵入性检测&#xff0c;存在诸多局限性。 而生物电阻…

大模型AI平台DeepSeek 眼中的SQL2API平台:QuickAPI、dbapi 和 Magic API 介绍与对比

目录 1 QuickAPI 介绍 2 dbapi 介绍 3 Magic API 介绍 4 简单对比 5 总结 统一数据服务平台是一种低代码的方式&#xff0c;实现一般是通过SQL能直接生成数据API&#xff0c;同时能对产生的数据API进行全生命周期的管理&#xff0c;典型的SQL2API的实现模式。 以下是针对…

快速理清 Attention 注意力和 Encoder, Decoder 概念

之前一直以为 Attention 和 RNN 没关系是凭空蹦出来的新概念&#xff1b;以为 Transformer, Encoder, Decoder 这几个概念是绑在一起的。并不尽然。 Encoder 和 Decoder RNN 里就有 Encoder Decoder 的概念。其中&#xff0c;encoder 接受用户输入&#xff0c;写入 hidden stat…

爬虫案例八js逆向爬取网易音乐

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、js逆向的前期准备二、网站分析三、代码 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 爬取网易音乐 提示&#xff1a;以下是本篇…

Sentinel 笔记

Sentinel 笔记 1 介绍 Sentinel 是阿里开源的分布式系统流量防卫组件&#xff0c;专注于 流量控制、熔断降级、系统保护。 官网&#xff1a;https://sentinelguard.io/zh-cn/index.html wiki&#xff1a;https://github.com/alibaba/Sentinel/wiki 对比同类产品&#xff1…

使用 vxe-table 导出 excel,支持带数值、货币、图片等带格式导出

使用 vxe-table 导出 excel&#xff0c;支持带数值、货币、图片等带格式导出&#xff0c;通过官方自动的导出插件 plugin-export-xlsx 实现导出功能 查看官网&#xff1a;https://vxetable.cn gitbub&#xff1a;https://github.com/x-extends/vxe-table gitee&#xff1a;htt…

powershell@宝塔面板批量建站脚本@批量设置@批量部署伪静态设置

文章目录 abstract批量设置 abstract 对于需要大量建站,并且站点类型都很接近的宝塔用户,可以考虑使用如下powershell脚本进行批量建站语句生成 请根据宝塔的要求的批量建站语句格式创建脚本 例如 function Get-BatchSiteBuilderLines {<# .SYNOPSIS获取批量站点生成器的…

基于multisim的自动干手器设计与仿真

1 设计的任务与要求 设计一个输出 5V 的直流稳压电源。用开关的闭合模拟手挡住光线的功能。用灯的亮灭模拟烘干吹风功能。 2 方案论证与选择 2.1 自动干手器的系统方案 本设计由5V直流电源、红外发射电路、红外接收电路、灯模拟电路构成。 1. 5V直流电源系统 这一部分是整…

webflux响应式编程

webflux&webclient 尚硅谷SpringBoot响应式编程教程&#xff0c;最新springboot3入门到实战 响应式编程设计实战及SpringWebFlux源码剖析 - 拉勾 文章目录 前置知识1、Lambda2、Function3、StreamAPI中间操作&#xff1a;Intermediate Operations终止操作&#xff1a;Ter…

关于tresos Studio(EB)的MCAL配置之GPT

概念 GPT&#xff0c;全称General Purpose Timer&#xff0c;就是个通用定时器&#xff0c;取的名字奇怪了点。定时器是一定要的&#xff0c;要么提供给BSW去使用&#xff0c;要么提供给OS去使用。 配置 General GptDeinitApi控制接口Gpt_DeInit是否启用 GptEnableDisable…

Uniapp项目运行到微信小程序、H5、APP等多个平台教程

摘要&#xff1a;Uniapp作为一款基于Vue.js的跨平台开发框架&#xff0c;支持“一次开发&#xff0c;多端部署”。本文将手把手教你如何将Uniapp项目运行到微信小程序、H5、APP等多个平台&#xff0c;并解析常见问题。 一、环境准备 在开始前&#xff0c;请确保已安装以下工具…

C/C++蓝桥杯算法真题打卡(Day4)

一、P11041 [蓝桥杯 2024 省 Java B] 报数游戏 - 洛谷 算法代码&#xff1a; #include<bits/stdc.h> using namespace std;// 计算第 n 个满足条件的数 long long findNthNumber(long long n) {long long low 1, high 1e18; // 二分查找范围while (low < high) {lo…

C++编写Redis客户端

目录 安装redis-plus-plus库 ​编辑 编译Credis客户端 redis的通用命令使用 get/set exists del keys expire /ttl type string类型核心操作 set和get set带有超时时间 set带有NX string带有XX mset mget getrange和setrange incr和decr list类型核心操作…

记录一下Django的密码重置(忘记密码)

一. Django默认的密码重置 1.路由 # url.pyfrom django.contrib.auth import views as auth_viewsurlpatterns [# 密码重置path(password_reset/, auth_views.PasswordResetView.as_view(), namepassword_reset),# 用户输入邮箱后&#xff0c;跳转到此页面path(password_res…

【运维篇】KubeSphere-02(经验汇总)

一、使用建议 1.对于数据库、对像存储比较重的要不能丢失&#xff0c;有异地存储备份需求的有状态服务&#xff0c;不建议采用k8s进行部署&#xff0c;会导致运维难度更大。 2.对于中间件如redis、MQ、harbor、seata、nacos、zookeeper可采用k8s部署。 3.对于无状态服务tomc…

Qt:多线程

目录 初识Qt多线程 QThread常用API QThread的使用 Qt中的锁 条件变量和信号量 初识Qt多线程 Qt 多线程 和 Linux 中的线程本质是一个东西 Linux 中学过的 多线程 APl&#xff0c;Linux 系统提供的 pthread 库 Qt 中针对系统提供的线程 API 重新封装了 C11 中&#xff0c;…

算法系列之广度优先搜索解决妖怪和尚过河问题

在算法学习中&#xff0c;广度优先搜索&#xff08;BFS&#xff09;是一种常用的图搜索算法&#xff0c;适用于解决最短路径问题、状态转换问题等。本文将介绍如何利用广度优先搜索解决经典的“妖怪和尚过河问题”。 问题描述 有三个妖怪和三个和尚需要过河。他们只有一条小船…