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

STM32CubeMX-H7-12-IIC读写MPU6050模块(中)-MPU6050模块详解以及软件IIC驱动

前言

上一篇我们已经完成对IIC代码基本框架的编写,以及获取MPU6050的ID,接下来我们逐一分析这个模块的功能,并用IIC驱动

建议看完上一篇再来看这篇

MPU6050寄存器介绍

1.电源管理寄存器(PWR_MGMT_1,地址:0x6B)

         

     我们要对0x6b这个地址给0以唤醒

    IIC_Write_REG(MPU6050_ADDR_AD0_LOW, PWR_MGMT_1, 0x00);  // 唤醒 MPU6050

    2.陀螺仪配置寄存器(GYRO_CONFIG,地址:0x1B)

    IIC_Write_REG(MPU6050_ADDR_AD0_LOW, GYRO_CONFIG, 0x18);  // 设置陀螺仪自检及测量范围

    选择满量程为±2000°/s

    3.加速度计配置寄存器(ACCEL_CONFIG,地址:0x1C)

        IIC_Write_REG(MPU6050_ADDR_AD0_LOW, ACCEL_CONFIG, 0x18);  // 设置加速度计自检、测量范围及高通滤波频率
    

    加速度计配置寄存器,选择满量程为±16g

    4.加速度计数据寄存器

           等会获取加速度的时候会用,主要获取加速度

    5.陀螺仪数据寄存器

    等会获取角度的时候会用,主要获取角度

    6.中断使能寄存器(INT_ENABLE,地址:0x38)

            看情况使用

    7.采样率分频寄存器(SMPLRT_DIV,地址:0x19)

    IIC_Write_REG(MPU6050_ADDR_AD0_LOW, SMPLRT_DIV, 0x09);  // 设置采样率分频

    8.CONFIG 寄存器主要用于配置 MPU6050 的外部帧同步(FSYNC)引脚输入以及数字低通滤波器(DLPF),以此来改善传感器数据的噪声性能和采样延迟。

    名称描述配置效果
    7 - 3保留这些位为保留位,用户不应进行设置,一般默认置为 0。-
    2EXT_SYNC_SET[2:0]用于配置外部帧同步(FSYNC)引脚输入。
    - 000:无 FSYNC 输入
    - 001:FSYNC 引脚输入同步加速度计采样
    - 010:FSYNC 引脚输入同步陀螺仪 X 轴采样
    - 011:FSYNC 引脚输入同步陀螺仪 Y 轴采样
    - 100:FSYNC 引脚输入同步陀螺仪 Z 轴采样
    - 101:FSYNC 引脚输入同步温度传感器采样
    - 110:保留
    - 111:保留
    可利用外部信号对特定传感器的采样进行同步,从而保证多个传感器采样时间的一致性。
    1 - 0DLPF_CFG[1:0]用于配置数字低通滤波器(DLPF)的设置。
    - 000:带宽 260Hz,延迟 0.98ms,陀螺仪输出率 8kHz
    - 001:带宽 184Hz,延迟 2.9ms,陀螺仪输出率 1kHz
    - 010:带宽 94Hz,延迟 3.9ms,陀螺仪输出率 1kHz
    - 011:带宽 44Hz,延迟 5.9ms,陀螺仪输出率 1kHz
    - 100:带宽 21Hz,延迟 9.9ms,陀螺仪输出率 1kHz
    - 101:带宽 10Hz,延迟 17.85ms,陀螺仪输出率 1kHz
    - 110:带宽 5Hz,延迟 33.48ms,陀螺仪输出率 1kHz
    - 111:保留
    通过选择不同的滤波器配置,可以在噪声抑制和数据延迟之间进行权衡。较高的带宽会减少延迟,但可能会引入更多噪声;较低的带宽则能有效抑制噪声,但会增加数据延迟。

    MPU6050模块功能指令使用-函数封装

    1.指令寄存器的宏定义

    #define M_PI 3.14
    #define SMPLRT_DIV   0x19  // 采样率分频,典型值:0x07(125Hz) */
    #define CONFIG       0x1A  // 低通滤波频率,典型值:0x06(5Hz) */
    #define GYRO_CONFIG  0x1B  // 陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s) */
    #define ACCEL_CONFIG 0x1C  // 加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,5Hz) */#define ACCEL_XOUT_H 0x3B  // 存储最近的X轴、Y轴、Z轴加速度感应器的测量值 */
    #define ACCEL_XOUT_L 0x3C
    #define ACCEL_YOUT_H 0x3D
    #define ACCEL_YOUT_L 0x3E
    #define ACCEL_ZOUT_H 0x3F
    #define ACCEL_ZOUT_L 0x40#define TEMP_OUT_H   0x41  // 存储的最近温度传感器的测量值 */
    #define TEMP_OUT_L   0x42#define GYRO_XOUT_H  0x43  // 存储最近的X轴、Y轴、Z轴陀螺仪感应器的测量值 */
    #define GYRO_XOUT_L  0x44 
    #define GYRO_YOUT_H  0x45
    #define GYRO_YOUT_L  0x46
    #define GYRO_ZOUT_H  0x47
    #define GYRO_ZOUT_L  0x48#define PWR_MGMT_1   0x6B   // 电源管理,典型值:0x00(正常启用) */
    #define PWR_MGMT_2   0x6C   // 电源管理,典型值:0x00(正常启用) */
    #define WHO_AM_I     0x75 	// IIC地址寄存器(默认数值0x68,只读) */// HAL库的读写只需要使用7位地址
    #define MPU6050_ADDR_AD0_LOW 0x68	// AD0低电平时7位地址为0X68 iic写时许发送0XD0
    #define MPU6050_ADDR_AD0_HIGH 0x69	

    2.初始化的基本配置

            根据上面的自己配置下寄存器就好

    // MPU6050 初始化函数
    uint8_t MPU6050_Init(void) {IIC_Init();  // 初始化 I2C 总线// 唤醒 MPU6050IIC_Write_REG(MPU6050_ADDR_AD0_LOW, PWR_MGMT_1, 0x00); HAL_Delay(100);  // 等待唤醒// 设置采样率分频IIC_Write_REG(MPU6050_ADDR_AD0_LOW, SMPLRT_DIV, 0x07); // 设置低通滤波器IIC_Write_REG(MPU6050_ADDR_AD0_LOW, CONFIG, 0x06); // 设置陀螺仪量程 ±250°/sIIC_Write_REG(MPU6050_ADDR_AD0_LOW, GYRO_CONFIG, 0x00); // 设置加速度计量程 ±2gIIC_Write_REG(MPU6050_ADDR_AD0_LOW, ACCEL_CONFIG, 0x00); HAL_Delay(100);  // 等待传感器稳定return 0;
    }

    3.获取模块ID

    // 读取 MPU6050 的设备 ID
    uint8_t MPU6050_GetDeviceID(void) {uint8_t data;data=IIC_Read_REG(MPU6050_ADDR_AD0_LOW, WHO_AM_I);  // 读取设备 ID 寄存器return data;  // 返回设备 ID	
    }

    上篇文章提到过,返回设备ID

    4.获取温度

    float MPU6050_GET_Tempure(void)
    {uint16_t temp;  // 用于存储温度传感器数据uint8_t H,L;  // 用于存储高字节和低字节的数据H = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, TEMP_OUT_H);  // 读取温度传感器高字节L = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, TEMP_OUT_L);  // 读取温度传感器低字节temp = (H << 8) | L;  // 将高字节和低字节合并为一个 16 位数据return (float)temp / 340.0 + 36.53-200;  // 计算温度值并返回
    }

    手册上是没有-200的,但是我的温度都显示两百多,减去200后看起来正常,大家根据具体情况把这个-200修改,补偿值修改到正常

    5.获取X轴加速度

    float MPU6050_GetAccelX(void) {int16_t accel;  // 用于存储加速度传感器数据uint8_t H,L;  // 用于存储高字节和低字节的数据H = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, ACCEL_XOUT_H);  // 读取加速度传感器 X 轴高字节L = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, ACCEL_XOUT_L);  // 读取加速度传感器 X 轴低字节accel = (H << 8) | L;  // 将高字节和低字节合并为一个 16 位数据return (float)accel / 16384.0;  // 计算加速度值并返回
    }

    6.获取Y轴加速度

    float MPU6050_GetAccelY(void) {int16_t accel;  // 用于存储加速度传感器数据uint8_t H,L;  // 用于存储高字节和低字节的数据H = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, ACCEL_YOUT_H);  // 读取加速度传感器 Y 轴高字节L = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, ACCEL_YOUT_L);  // 读取加速度传感器 Y 轴低字节accel = (H << 8) | L;  // 将高字节和低字节合并为一个 16 位数据return (float)accel / 16384.0;  // 计算加速度值并返回	
    }

    7.获取z轴加速度

    float MPU6050_GetAccelZ(void) {int16_t accel;  // 用于存储加速度传感器数据uint8_t H,L;  // 用于存储高字节和低字节的数据H = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, ACCEL_ZOUT_H);  // 读取加速度传感器 Z 轴高字节L = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, ACCEL_ZOUT_L);  // 读取加速度传感器 Z 轴低字节accel = (H << 8) | L;  // 将高字节和低字节合并为一个 16 位数据return (float)accel / 16384.0;  // 计算加速度值并返回
    }

    8.获取x的角度

    float MPU6050_GetAngleX(void) {int16_t gyro;  // 用于存储陀螺仪数据uint8_t H,L;  // 用于存储高字节和低字节的数据H = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, GYRO_XOUT_H);  // 读取陀螺仪 X 轴高字节L = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, GYRO_XOUT_L);  // 读取陀螺仪 X 轴低字节gyro = (H << 8) | L;  // 将高字节和低字节合并为一个 16 位数据return (float)gyro / 131.0;  // 计算角速度值并返回	
    }

    9.获取y的角度

    float MPU6050_GetAngleY(void) {int16_t gyro;  // 用于存储陀螺仪数据uint8_t H,L;  // 用于存储高字节和低字节的数据H = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, GYRO_YOUT_H);  // 读取陀螺仪 Y 轴高字节L = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, GYRO_YOUT_L);  // 读取陀螺仪 Y 轴低字节gyro = (H << 8) | L;  // 将高字节和低字节合并为一个 16 位数据return (float)gyro / 131.0;  // 计算角速度值并返回
    }

    10.获取z轴角度

    float MPU6050_GetAngleZ(void) {int16_t gyro;  // 用于存储陀螺仪数据uint8_t H,L;  // 用于存储高字节和低字节的数据H = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, GYRO_ZOUT_H);  // 读取陀螺仪 Z 轴高字节L = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, GYRO_ZOUT_L);  // 读取陀螺仪 Z 轴低字节gyro = (H << 8) | L;  // 将高字节和低字节合并为一个 16 位数据return (float)gyro / 131.0;  // 计算角速度值并返回
    }

    完整代码

    .c

    #include "MPU6050.h"
    #include "math.h"
    #include "SOFT_IIC.h"
    #include <stdio.h>
    // MPU6050 初始化函数
    uint8_t MPU6050_Init(void) {IIC_Init();  // 初始化 I2C 总线// 唤醒 MPU6050IIC_Write_REG(MPU6050_ADDR_AD0_LOW, PWR_MGMT_1, 0x00); HAL_Delay(100);  // 等待唤醒// 设置采样率分频IIC_Write_REG(MPU6050_ADDR_AD0_LOW, SMPLRT_DIV, 0x07); // 设置低通滤波器IIC_Write_REG(MPU6050_ADDR_AD0_LOW, CONFIG, 0x06); // 设置陀螺仪量程 ±250°/sIIC_Write_REG(MPU6050_ADDR_AD0_LOW, GYRO_CONFIG, 0x00); // 设置加速度计量程 ±2gIIC_Write_REG(MPU6050_ADDR_AD0_LOW, ACCEL_CONFIG, 0x00); HAL_Delay(100);  // 等待传感器稳定return 0;
    }// 读取 MPU6050 的设备 ID
    uint8_t MPU6050_GetDeviceID(void) {uint8_t data;data=IIC_Read_REG(MPU6050_ADDR_AD0_LOW, WHO_AM_I);  // 读取设备 ID 寄存器return data;  // 返回设备 ID	
    }float MPU6050_GET_Tempure(void)
    {int16_t temp;  // 用于存储温度传感器数据uint8_t H,L;  // 用于存储高字节和低字节的数据H = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, TEMP_OUT_H);  // 读取温度传感器高字节L = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, TEMP_OUT_L);  // 读取温度传感器低字节temp = (H << 8) | L;  // 将高字节和低字节合并为一个 16 位数据return (float)temp / 340.0 + 36.53-200;  // 计算温度值并返回
    }float MPU6050_GetAccelX(void) {int16_t accel;  // 用于存储加速度传感器数据uint8_t H,L;  // 用于存储高字节和低字节的数据H = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, ACCEL_XOUT_H);  // 读取加速度传感器 X 轴高字节L = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, ACCEL_XOUT_L);  // 读取加速度传感器 X 轴低字节accel = (H << 8) | L;  // 将高字节和低字节合并为一个 16 位数据return (float)accel / 16384.0;  // 计算加速度值并返回
    }float MPU6050_GetAccelY(void) {int16_t accel;  // 用于存储加速度传感器数据uint8_t H,L;  // 用于存储高字节和低字节的数据H = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, ACCEL_YOUT_H);  // 读取加速度传感器 Y 轴高字节L = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, ACCEL_YOUT_L);  // 读取加速度传感器 Y 轴低字节accel = (H << 8) | L;  // 将高字节和低字节合并为一个 16 位数据return (float)accel / 16384.0;  // 计算加速度值并返回	
    }float MPU6050_GetAccelZ(void) {int16_t accel;  // 用于存储加速度传感器数据uint8_t H,L;  // 用于存储高字节和低字节的数据H = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, ACCEL_ZOUT_H);  // 读取加速度传感器 Z 轴高字节L = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, ACCEL_ZOUT_L);  // 读取加速度传感器 Z 轴低字节accel = (H << 8) | L;  // 将高字节和低字节合并为一个 16 位数据return (float)accel / 16384.0;  // 计算加速度值并返回
    }float MPU6050_GetAngleX(void) {int16_t gyro;  // 用于存储陀螺仪数据uint8_t H,L;  // 用于存储高字节和低字节的数据H = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, GYRO_XOUT_H);  // 读取陀螺仪 X 轴高字节L = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, GYRO_XOUT_L);  // 读取陀螺仪 X 轴低字节gyro = (H << 8) | L;  // 将高字节和低字节合并为一个 16 位数据return (float)gyro / 131.0;  // 计算角速度值并返回	
    }float MPU6050_GetAngleY(void) {int16_t gyro;  // 用于存储陀螺仪数据uint8_t H,L;  // 用于存储高字节和低字节的数据H = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, GYRO_YOUT_H);  // 读取陀螺仪 Y 轴高字节L = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, GYRO_YOUT_L);  // 读取陀螺仪 Y 轴低字节gyro = (H << 8) | L;  // 将高字节和低字节合并为一个 16 位数据return (float)gyro / 131.0;  // 计算角速度值并返回
    }float MPU6050_GetAngleZ(void) {int16_t gyro;  // 用于存储陀螺仪数据uint8_t H,L;  // 用于存储高字节和低字节的数据H = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, GYRO_ZOUT_H);  // 读取陀螺仪 Z 轴高字节L = IIC_Read_REG(MPU6050_ADDR_AD0_LOW, GYRO_ZOUT_L);  // 读取陀螺仪 Z 轴低字节gyro = (H << 8) | L;  // 将高字节和低字节合并为一个 16 位数据return (float)gyro / 131.0;  // 计算角速度值并返回
    }

    .h

    #ifndef __MPU6050_H
    #define __MPU6050_H#include "main.h"
    #define M_PI 3.14
    #define SMPLRT_DIV   0x19  // 采样率分频,典型值:0x07(125Hz) */
    #define CONFIG       0x1A  // 低通滤波频率,典型值:0x06(5Hz) */
    #define GYRO_CONFIG  0x1B  // 陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s) */
    #define ACCEL_CONFIG 0x1C  // 加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,5Hz) */#define ACCEL_XOUT_H 0x3B  // 存储最近的X轴、Y轴、Z轴加速度感应器的测量值 */
    #define ACCEL_XOUT_L 0x3C
    #define ACCEL_YOUT_H 0x3D
    #define ACCEL_YOUT_L 0x3E
    #define ACCEL_ZOUT_H 0x3F
    #define ACCEL_ZOUT_L 0x40#define TEMP_OUT_H   0x41  // 存储的最近温度传感器的测量值 */
    #define TEMP_OUT_L   0x42#define GYRO_XOUT_H  0x43  // 存储最近的X轴、Y轴、Z轴陀螺仪感应器的测量值 */
    #define GYRO_XOUT_L  0x44 
    #define GYRO_YOUT_H  0x45
    #define GYRO_YOUT_L  0x46
    #define GYRO_ZOUT_H  0x47
    #define GYRO_ZOUT_L  0x48#define PWR_MGMT_1   0x6B   // 电源管理,典型值:0x00(正常启用) */
    #define PWR_MGMT_2   0x6C   // 电源管理,典型值:0x00(正常启用) */
    #define WHO_AM_I     0x75 	// IIC地址寄存器(默认数值0x68,只读) */// HAL库的读写只需要使用7位地址
    #define MPU6050_ADDR_AD0_LOW 0x68	// AD0低电平时7位地址为0X68 iic写时时发送0XD0
    #define MPU6050_ADDR_AD0_HIGH 0x69	// 函数声明
    uint8_t MPU6050_Init(void);
    uint8_t MPU6050_GetDeviceID(void);
    float MPU6050_GET_Tempure(void);
    float MPU6050_GetAccelX(void);
    float MPU6050_GetAccelY(void);
    float MPU6050_GetAccelZ(void);
    float MPU6050_GetAngleX(void);
    float MPU6050_GetAngleY(void);
    float MPU6050_GetAngleZ(void);#endif
    

    相关文章:

    STM32CubeMX-H7-12-IIC读写MPU6050模块(中)-MPU6050模块详解以及软件IIC驱动

    前言 上一篇我们已经完成对IIC代码基本框架的编写&#xff0c;以及获取MPU6050的ID&#xff0c;接下来我们逐一分析这个模块的功能&#xff0c;并用IIC驱动 建议看完上一篇再来看这篇 MPU6050寄存器介绍 1.电源管理寄存器&#xff08;PWR_MGMT_1&#xff0c;地址&#xff1a;0…...

    基于Go语言实现一个网络聊天室(连接Redis版)

    基于Go语言和Redis的实时聊天室项目详解 项目概述 在这个项目中&#xff0c;我们实现了一个基于Go语言和Redis的实时聊天室系统。该系统允许用户通过客户端连接到服务器&#xff0c;进行实时聊天&#xff0c;并且支持以下功能&#xff1a; 用户网名注册和验证消息广播和接收…...

    深入解析 RocketMQ 中的 BrokerOuterAPI 组件​

    在 RocketMQ 这一高性能分布式消息队列系统中&#xff0c;BrokerOuterAPI 组件犹如一座桥梁&#xff0c;连接着 Broker 与外部世界&#xff0c;在系统的运行、管理以及与其他组件交互过程中发挥着极为关键的作用。本文将深入探讨 BrokerOuterAPI 组件的内部机制、核心功能以及其…...

    make_01_Program_06_:: 是什么功能

    在 Makefile 中&#xff0c;:: 是一种特殊的分隔符&#xff0c;用于创建多重规则&#xff08;multiple rules&#xff09;。当您使用 :: 定义目标时&#xff0c;您可以为同一个目标指定多个命令或多个依赖关系。每个命令将在构建目标时按顺序执行&#xff0c;不会影响其他命令的…...

    springboot2.7.x整合nacos+seata

    1、nacos及seata下载地址 Nacos Server 下载 | Nacos 官网 Seata Java Download | Apache Seata 这里的seata版本用2.1.0版本。 2、启动nacos D:\本地-seata-nacos\nacos-server\bin>startup.cmd -m standalone 3、修改seata的conf下的application的内容 这里的数据库…...

    为 IDEA 设置管理员权限

    IDEA 安装目录 兼容性选择管理员身份运行程序 之后 IDEA 中的操作&#xff08;包括终端中的操作&#xff09;都是管理员权限的了...

    Apache Doris 2.1.9 版本正式发布

    亲爱的社区小伙伴们&#xff0c;Apache Doris 2.1.9 版本已正式发布。2.1.9 版本对湖仓一体、倒排索引、半结构化数据类型、查询优化器、执行引擎、存储管理进行了若干改进优化。欢迎大家下载使用。 官网下载&#xff1a;https://doris.apache.org/download GitHub 下载&…...

    单片机学习笔记8.定时器

    IAP15W4K58S4定时/计数器结构工作原理 定时器工作方式控制寄存器TMOD 不能进行位寻址&#xff0c;只能对整个寄存器进行赋值 寄存器地址D7D6D5D4D3D2D1D0复位值TMOD89HGATEC/(T低电平有效)M1M0GATEC/(T低电平有效)M1M000000000B D0-D3为T0控制&#xff0c;D4-D7为T1控制 GAT…...

    vue3实现markdown预览和编辑

    Markdown作为一种轻量级标记语言&#xff0c;已经成为开发者编写文档的首选工具之一。在Vue3项目中集成Markdown编辑和预览功能可以极大地提升内容管理体验。本文将介绍如何使用Vditor这一强大的开源Markdown编辑器在Vue3项目中实现这一功能。 一、Vditor简介 Vditor是一款浏…...

    高并发秒杀系统接入层如何设计

    博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…...

    C++异常处理 throw try catch

    C 异常处理概述 C 异常处理机制提供了一种在程序运行时捕获错误或异常情况的方式。异常处理的目的是使得程序在遇到错误时能够优雅地终止或恢复&#xff0c;并防止程序出现崩溃。C 使用 try, throw, 和 catch 关键字来实现异常处理。 异常处理的基本结构&#xff1a; throw: …...

    纯css实现环形进度条

    需要在中实现一个定制化的环形进度条&#xff0c;最终效果如图&#xff1a; 使用代码 <divclass"circular-progress":style"{--progress: nextProgress,--color: endSliderColor,--size: isFull ? 60rpx : 90rpx,}"><div class"inner-conte…...

    0基础 | 硬件 | 电源系统 一

    降压电路LDO 几乎所有LDO都是基于此拓扑结构 图 拓扑结构 LDO属于线性电源&#xff0c;通过控制开关管的导通程度实现稳压&#xff0c;输出纹波小&#xff0c;无开关噪声 线性电源&#xff0c;IoutIin&#xff0c;发热功率P电压差△U*电流I&#xff0c;转换效率Vo/Vi LDO不适…...

    详解 MySQL 索引的最左前缀匹配原则

    MySQL 的最左前缀匹配原则主要是针对复合索引&#xff08;也称为联合索引&#xff09;而言的。其核心思想是&#xff1a;只有查询条件中包含索引最左侧&#xff08;第一列&#xff09;开始的连续一段列&#xff0c;才能让 MySQL 有效地利用该索引。 一、 复合索引的结构 复合…...

    蓝桥杯算法题1

    前言 双指针 唯一的雪花 Unique Snowflakes #include<iostream> #include<unordered_map> using namespace std; //这道题的意思就是在一个数组找一个最大的1区间的长度&#xff0c;这个区间里面没有重复数据 //如果暴力解法&#xff0c;每次求出以a[i]开头的满…...

    【愚公系列】《高效使用DeepSeek》053-工艺参数调优

    🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…...

    Cortex-M系列MCU的位带操作

    Cortex-M系列位带操作详解 位带&#xff08;Bit-Banding&#xff09;是Cortex-M3/M4等处理器提供的一种硬件特性&#xff0c;允许通过别名地址对内存或外设寄存器中的单个位进行原子读-改-写操作&#xff0c;无需禁用中断或使用互斥锁。以下是位带操作的完整指南&#xff1a; …...

    大坑!GaussDB数据库批量插入数据变只读

    大坑!GaussDB数据库批量插入数据变只读 GaussDB插入数据时变只读df和du为什么不一致GaussDB磁盘空间使用阈值GaussDB变只读怎么办正确删除表的姿势GaussDB插入数据时变只读 涉及的数据库版本为:GaussDB Kernel 505.1.0 build da28c417。 GuassDB TPCC灌数报错DML失败,数据…...

    35信号和槽_信号槽小结

    Qt 信号槽 1.信号槽是啥~~ 尤其是和 Linux 中的信号进行了对比&#xff08;三要素&#xff09; 1) 信号源 2) 信号的类型 3)信号的处理方式 2.信号槽 使用 connect 3.如何查阅文档. 一个控件&#xff0c;内置了哪些信号&#xff0c;信号都是何时触发 一…...

    获取KUKA机器人诊断文件KRCdiag的方法

    有时候在进行售后问题时需要获取KUKA机器人的诊断文件KRCdiag&#xff0c;通过以下方法可以获取KUKA机器人的诊断文件KRCdiag&#xff1a; 1、将U盘插到控制柜内的任意一个USB接口&#xff1b; 2、依次点【主菜单】—【文件】—【存档】—【USB&#xff08;控制柜&#xff09…...

    一周学会Pandas2 Python数据处理与分析-NumPy数据类型

    锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili NumPy 提供了丰富的数据类型&#xff08;dtypes&#xff09;&#xff0c;主要用于高效数值计算。以下是 NumPy 的主要…...

    Redis核心机制-缓存、分布式锁

    目录 缓存 缓存更新策略 定期生成 实时生成 缓存问题 缓存预热&#xff08;Cache preheating&#xff09; 缓存穿透&#xff08;Cache penetration&#xff09; 缓存雪崩&#xff08;Cache avalanche&#xff09; 缓存击穿&#xff08;Cache breakdown&#xff09; 分…...

    Three.js 系列专题 1:入门与基础

    什么是 Three.js? Three.js 是一个基于 WebGL 的 JavaScript 库,它简化了 3D 图形编程,让开发者无需深入了解底层 WebGL API 就能创建复杂的 3D 场景。它广泛应用于网页游戏、可视化、虚拟现实等领域。 学习目标 理解 Three.js 的核心组件:场景(Scene)、相机(Camera)…...

    [C++面试] 如何在特定内存位置上分配内存、构造对象

    new面试-高阶题&#xff08;可以主动讲给面试官&#xff09;&#xff0c;适用于内存池、高性能场景或需要精确控制内存布局的编程需求。 一、核心方法&#xff1a;placement new placement new 是C中一种特殊形式的new运算符&#xff0c;允许在预先分配好的内存地址上构造对象…...

    针对Ansible执行脚本时报错“可执行文件格式错误”,以下是详细的解决步骤和示例

    针对Ansible执行脚本时报错“可执行文件格式错误”&#xff0c;以下是详细的解决步骤和示例&#xff1a; 目录 一、错误原因分析二、解决方案1. 检查并添加可执行权限2. 修复Shebang行3. 转换文件格式&#xff08;Windows → Unix&#xff09;4. 检查脚本内容兼容性5. 显式指定…...

    如何在Ubuntu上安装Dify

    如何在Ubuntu上安装Dify 如何在Ubuntu上安装docker 使用apt安装 # Add Dockers official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg…...

    Python FastApi(13):APIRouter

    如果你正在开发一个应用程序或 Web API&#xff0c;很少会将所有的内容都放在一个文件中。FastAPI 提供了一个方便的工具&#xff0c;可以在保持所有灵活性的同时构建你的应用程序。假设你的文件结构如下&#xff1a; . ├── app # 「app」是一个 Python 包…...

    Harmony OS“一多” 详解:基于窗口变化的断点自适应实现

    一、一多开发核心概念&#xff08;18N模式&#xff09; 目标&#xff1a;一次开发多端部署 解决的问题&#xff1a; 1、界面级一多&#xff1a;适配不同屏幕尺寸 2、功能级一多&#xff1a;设备功能兼容性处理(CanIUser) 3、工…...

    【算法竞赛】状态压缩型背包问题经典应用(蓝桥杯2019A4分糖果)

    在蓝桥杯中遇到的这道题&#xff0c;看上去比较普通&#xff0c;但其实蕴含了很巧妙的“状态压缩 背包”的思想&#xff0c;本文将从零到一&#xff0c;详细解析这个问题。 目录 一、题目 二、思路分析&#xff1a;状态压缩 最小覆盖 1. 本质&#xff1a;最小集合覆盖问题…...

    kali——masscan

    目录 前言 使用方法 前言 Masscan 是一款快速的端口扫描工具&#xff0c;在 Kali Linux 系统中常被用于网络安全评估和渗透测试。 使用方法 对单个IP进行端口扫描&#xff1a; masscan -p11-65535 192.168.238.131 扫描指定端口&#xff1a; masscan -p80,22 192.168.238.131…...