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
    

    本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
    如若轉載,請注明出處:http://www.pswp.cn/diannao/77384.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/diannao/77384.shtml
    英文地址,請注明出處:http://en.pswp.cn/diannao/77384.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    量子計算模擬中的GPU加速:從量子門操作到Shor算法實現

    一、量子模擬的算力困境與GPU破局 量子計算模擬面臨?指數級增長的資源需求?&#xff1a;n個量子比特的態向量需要2^n個復數存儲空間。當n>30時&#xff0c;單機內存已無法承載&#xff08;1TB需求&#xff09;。傳統CPU模擬器&#xff08;如Qiskit的Aer&#xff09;在n28…

    spring mvc 異常處理中@RestControllerAdvice 和 @ControllerAdvice 對比詳解

    RestControllerAdvice 和 ControllerAdvice 對比詳解 1. 基本概念 注解等效組合核心作用ControllerAdviceComponent RequestMapping&#xff08;隱式&#xff09;定義全局控制器增強類&#xff0c;處理跨控制器的異常、數據綁定或全局響應邏輯。RestControllerAdviceControll…

    JavaScript的回調函數:異步編程的基石

    引言 在JavaScript的世界里&#xff0c;回調函數是一種強大而基礎的編程模式&#xff0c;它是異步編程的核心概念之一。隨著Web應用程序變得越來越復雜&#xff0c;理解和掌握回調函數變得尤為重要。本文將深入探討JavaScript回調函數的概念、應用場景以及最佳實踐。 什么是回…

    測試用例 [軟件測試 基礎]

    目錄 測試用例 1. 概念 1.1 什么是測試用例 1.2 什么是要素 1.3 為什么需要測試用例 2. 設計測試用例的萬能公式 2.1 常規思維 逆向思維 發散性思維 2.2 萬能公式 3. 設計測試用例的方法 3.1 基于需求的設計方法 3.2 具體的設計方法 3.3 更多用例練習 測試用例 …

    Jupyter notebook定制字體

    一、生成配置文件 運行Anaconda Powershell Prompt終端&#xff0c;輸入下面一行代碼&#xff1a; jupyter notebook --generate-config 將生成文件“C:\Users\XXX\.jupyter\jupyter_notebook_config.py”&#xff0c;XXX為計算機賬戶名字。 二、修改配置文件 c.NotebookAp…

    miniconda安裝R語言圖文教程(詳細步驟)

    本篇教程介紹,如何在Windows使用miniconda安裝R語言。 一、創建1個conda 虛擬環境 # 創建虛擬環境 conda create -n r_env # 激活虛擬環境 conda activate r_env二、安裝 R 語言 conda install -c r r-ggplot2三、運行測試 檢查安裝: 輸入 R 進入 R 的交互式命令行,檢查是…

    【day1】AI軟件測試學習筆記

    以下為整理的 AI軟件測試學習筆記&#xff0c;涵蓋性能測試工具鏈、AI大模型應用及開發實踐&#xff0c;分為四大模塊&#xff1a; 一、性能測試工具鏈與數據分析 1. 工具鏈整合效果 JMeter InfluxDB Grafana JMeter壓測數據存儲至云端InfluxDB&#xff0c;實現分布式壓測和…

    WPF 資源加載問題:真是 XAML 的鍋嗎?

    你的觀察很敏銳&#xff01;確實&#xff0c;在 WPF 項目中&#xff0c;.cs 文件主要負責邏輯實現&#xff0c;而資源加載的問題通常跟 XAML&#xff08;以及它背后的 .csproj 配置&#xff09;關系更大。我會圍繞這個觀點&#xff0c;用 CSDN 博客風格詳細解釋一下 .cs、XAML …

    C++17模板編程與if constexpr深度解析

    一、原理深化 1.1 模板編程 1.1.1 編譯器如何處理模板&#xff08;補充&#xff09; 模板的實例化機制存在兩種模式&#xff1a; 隱式實例化&#xff1a;編譯器在遇到模板具體使用時自動生成代碼&#xff0c;可能導致多翻譯單元重復實例化&#xff0c;增加編譯時間。顯式實…

    408 計算機網絡 知識點記憶(6)

    前言 本文基于王道考研課程與湖科大計算機網絡課程教學內容&#xff0c;系統梳理核心知識記憶點和框架&#xff0c;既為個人復習沉淀思考&#xff0c;亦希望能與同行者互助共進。&#xff08;PS&#xff1a;后續將持續迭代優化細節&#xff09; 往期內容 408 計算機網絡 知識…

    MySQL學習筆記十四

    第十六章創建高級聯結 16.1使用表別名 輸入&#xff1a; SELECT CONCAT(vend_name,(,RTRIM(vend_country),)) AS vend_title FROM vendors ORDER BY vend_name; 輸出&#xff1a; 輸入&#xff1a; SELECT cust_name, cust_contact FROM customers AS c, orders AS o, or…

    Spring MVC 框架 的核心概念、組件關系及流程的詳細說明,并附表格總結

    以下是 Spring MVC 框架 的核心概念、組件關系及流程的詳細說明&#xff0c;并附表格總結&#xff1a; 1. 核心理念 Spring MVC 是基于 MVC&#xff08;Model-View-Controller&#xff09;設計模式 的 Web 框架&#xff0c;其核心思想是 解耦&#xff1a; Model&#xff1a;數…

    Android里藍牙使用流程以及問題詳解

    一、基礎流程 請簡述 Android 藍牙開發的基本流程 1. 權限處理&#xff1a;動態申請藍牙和定位權限&#xff08;注意Android 12新權限&#xff09; 2. 初始化藍牙適配器&#xff1a;通過BluetoothManager獲取BluetoothAdapter 3. 設備發現&#xff1a;- 注冊BroadcastReceive…

    OpenWrt 上安裝Tailscale

    在 OpenWrt 上安裝 Tailscale 非常簡單&#xff0c;主要步驟如下&#xff1a; 1. 確保 OpenWrt 設備可聯網 首先&#xff0c;確保你的 OpenWrt 設備已經聯網&#xff0c;可以訪問外網&#xff0c;并且 SSH 進入你的路由器&#xff08;通常是 192.168.1.1&#xff09;&#xff…

    藍橋杯刷題總結 + 應賽技巧

    當各位小伙伴們看到這篇文章的時候想必藍橋杯也快開賽了&#xff0c;那么本篇文章博主就來總結一下一些藍橋杯的應賽技巧&#xff0c;那么依舊先來走個流程 那么接下來我們分成幾個板塊進行總結 首先是一些基本語法 編程語言的基本語法 首先是數組&#xff0c;在存數據的時候…

    TCP重傳率高與傳輸延遲問題

    目錄標題 排查步驟&#xff1a;TCP重傳率高與傳輸延遲問題v1.0通過 rate(node_netstat_Tcp_RetransSegs[3m]) 排查 TCP 重傳問題的步驟1. **指標含義與初步分析**2. **關聯指標排查**3. **定位具體問題源**4. **解決方案**5. **驗證與監控** v2.0一、基礎檢查二、網絡層分析三、…

    【LeetCode 熱題100】73:矩陣置零(詳細解析)(Go語言版)

    &#x1f680; 力扣熱題 73&#xff1a;矩陣置零&#xff08;詳解 多種解法&#xff09; &#x1f4cc; 題目描述 給定一個 m x n 的整數矩陣 matrix&#xff0c;如果一個元素為 0&#xff0c;則將其所在行和列的所有元素都設為 0。請你 原地 使用常量空間解決。 &#x1f3a…

    組播網絡構建:IGMP、PIM 原理及應用實踐

    IP組播基礎 組播基本架構 組播IP地址 一個組播IP地址并不是表示具體的某臺主機&#xff0c;而是一組主機的集合&#xff0c;主機聲明加入某組播組即標識自己需要接收目的地址為該組播地址的數據IP組播常見模型分為ASM模型和SSM模型ASM&#xff1a;成員接收任意源組播數據&…

    Unity UGUI使用手冊

    概述 UGUI(Unity Graphical User Interface) :Unity 圖像用戶界面 在游戲開發中&#xff0c;我們經常需要搭建一些圖形用戶界面。Unity內置的UGUI可以幫助開發者可視化地拼接界面&#xff0c;提高開發效率。UGUI提供不同樣式的UI組件&#xff0c;并且封裝了對應功能的API&am…

    Python web程序在服務器上面部署詳細步驟

    在服務器上部署Python web程序通常涉及以下步驟&#xff1a; 設置服務器環境: 選擇合適的服務器&#xff0c;如AWS EC2、DigitalOcean Droplet等。配置服務器操作系統&#xff0c;例如Ubuntu、CentOS等。安裝必要的軟件&#xff0c;如Python、pip、git等。 準備Python web程序…