STM32硬件接口I2C应用(基于MP6050)
目录
概述
1 STM32Cube控制配置I2C
1.1 I2C参数配置
1.2 使用STM32Cube产生工程
2 HAL库函数介绍
2.1 初始化函数
2.2 写数据函数
2.3 读数据函数
3 认识MP6050
3.1 MP6050功能介绍
3.2 加速计测量寄存器
编辑3.3 温度计量寄存器
3.4 陀螺仪测量寄存器
4 MP6050驱动程序实现
4.1 驱动函数实现
4.2 完整驱动代码
5 测试
6 逻辑分析仪捕捉波形
概述
本文主要介绍STM32F4的内部I2C接口的使用方法,包括使用STM32Cube配置i2c接口函数,还介绍了STM32 HAL库中的接口函数,为了验证接口函数的是否能够正常工作,还使用mp6050
作为device,以I2C接口作为通信接口,以实现该芯片数据的读写操作。
1 STM32Cube控制配置I2C
STM32CubeMX 版本: 6.11
HAL库版本: STM32Cube_FW_F4_V1.27.1
1.1 I2C参数配置
STM32F407 的标准I2C接口最大支持100K工作频率,笔者选择最大工作频100k,以配置I2C的参数。
I2C使用的GPIO接口如下:
使用MCU类型和HAL库的版本
1.2 使用STM32Cube产生工程
在配置完成项目后,点击GENERATE生成项目,打开项目后项目目录如下,和I2C相关的代码如下:
代码第40行:选择I2C2作为硬件接口
代码第41行:I2C通信速率为100K
代码第44行:定义地址位7bit
2 HAL库函数介绍
STM32 HAL库函数数量很多,本文仅介绍笔者使用的一些函数接口。其他函数在使用的时候在具体研究,而不许把每个函数搞清楚才去应用。
2.1 初始化函数
函数原型:
HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c);
参数介绍
hi2c: 指向I2C_HandleTypeDef结构体的指针,该结构体包含指定I2C的配置信息。
一个使用案例: 如果已经初始化完成hi2c结构,初始化时,直接调用该结构体即可。
2.2 写数据函数
函数原型:
HAL_StatusTypeDef HAL_I2C_Mem_Write( I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
参数介绍:
hi2c: 指向I2C_HandleTypeDef结构体的指针,该结构体包含指定I2C的配置信息。
DevAddress: 目标设备地址:设备的7位地址值在调用接口之前,必须将数据表向左移动
MemAddress:内存地址
MemAddSize:内存地址大小
pData: 写数据指针
Size: 写数据大小
Timeout: 写数据超时时间
2.3 读数据函数
函数原型:
HAL_StatusTypeDef HAL_I2C_Mem_Read( I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
参数介绍:
hi2c: 指向I2C_HandleTypeDef结构体的指针,该结构体包含指定I2C的配置信息。
DevAddress: 目标设备地址:设备的7位地址值在调用接口之前,必须将数据表向左移动
MemAddress:内存地址
MemAddSize:内存地址大小
pData: 读数据指针
Size: 读数据大小
Timeout: 读数据超时时间
3 认识MP6050
3.1 MP6050功能介绍
™ MPU-6000™ 和MPU-6050™, 统称为MPU-60X0™ 或MPU™.MPU设备提供了世界上第一个集成的6轴运动处理器解决方案,消除了与离散解决方案相关的封装级陀螺仪和加速度计交叉轴未对准。这个该设备将同一硅芯片上的3轴陀螺仪和3轴加速度计与车载数字运动处理器™ (DMP)™) 温度单元:能够处理复杂的9轴传感器融合算法使用经过现场验证的专有MotionFusion™ 发动机MPU-6000和MPU-6050的集成9轴MotionFusion算法可访问外部磁力计或通过辅助主I2C总线的其他传感器,允许设备收集全套传感器数据而不需要系统处理器的干预。这些设备采用相同的4x4x0.9 mm QFN与当前MPU-3000一样的占地面积和引脚™ 集成3轴陀螺仪家族,提供了一个简单的升级路径并便于在已经空间受限的电路板上放置。
对于快速和慢速运动的精确跟踪,MPU-60X0具有用户可编程功能陀螺仪满刻度范围为±250、±500、±1000和±2000°/秒(dps)。这些零件还具有用户可编程的加速度计满量程范围,分别为±2g、±4g、±8g和±16g。MPU-6000系列由两部分组成,即MPU-6000和MPU-6050。这些部件与我会处理好的。
MPU-6050支持高达400kHz的I2C通信,并具有定义其接口电压电平的VLOGIC引脚;MPU-6000还支持高达20MHz的SPI到I2C,并且具有单个电源引脚VDD,VDD既是设备的逻辑参考电源,也是模拟电源供应零件。有关MPU-60X0设备的更多详细信息,请参阅“MPU-6000和MPU-6050产品规范”。
3.2 加速计测量寄存器
寄存器59至64–加速计测量:ACCEL_XOUT_H、ACCEL_QUEUT_L、ACCE_YOUT_H,ACCEL_YOUT_L,ACCE_ZOUT_H和ACCEL_ZOUT_L
这些寄存器存储最新的加速度计测量值。加速度计测量值以中定义的采样率写入这些寄存器寄存器25。加速度计测量寄存器与温度测量寄存器一起,陀螺仪测量寄存器和外部传感器数据寄存器由两组寄存器:内部寄存器集和面向用户的读取寄存器集。加速度计传感器内部寄存器组中的数据总是在采样时更新速度同时,面向用户的读取寄存器集复制内部寄存器集的数据值每当串行接口空闲时。这保证了传感器寄存器的突发读取来自相同采样时刻的测量。请注意,如果不使用突发读取,则用户负责确保一组单字节读取对应于单个采样瞬间检查数据就绪中断。每个16位加速度计测量都具有在ACCEL_FS(寄存器28)中定义的满刻度。对于每个满刻度设置,加速度计ACCEL_xOUT中每个LSB的灵敏度如表所示在下面:
3.3 温度计量寄存器
寄存器65 and 66: TEMP_OUT_H and TEMP_OUT_L
这些寄存器存储最新的温度传感器测量值。温度测量值以寄存器中定义的采样率写入这些寄存器
25.这些温度测量寄存器与加速度计测量寄存器一起,陀螺仪测量寄存器和外部传感器数据寄存器由两组寄存器:内部寄存器集和面向用户的读取寄存器集。温度传感器内部寄存器组中的数据始终以采样率进行更新。同时,面向用户的读取寄存器集复制内部寄存器集的数据值每当串行接口空闲时。这保证了传感器寄存器的突发读取来自相同采样时刻的测量。请注意,如果不使用突发读取,则用户负责确保一组单字节读取对应于单个采样瞬间检查数据就绪中断。温度传感器的比例因子和偏移可在电气规格表中找到。
3.4 陀螺仪测量寄存器
寄存器67至72——陀螺仪测量:GYRO_XOUT_H、GYRO_XOUT_L、GYRO_YOUT_H,GYRO_YOUT_L,GYRO_ZOUT_H和GYRO_ ZOUT_L
这些寄存器存储最新的陀螺仪测量值。陀螺仪测量值以寄存器中定义的采样率写入这些寄存器
25.这些陀螺仪测量寄存器与加速度计测量寄存器一起,温度测量寄存器和外部传感器数据寄存器由两组寄存器:内部寄存器集和面向用户的读取寄存器集。陀螺仪传感器内部寄存器组中的数据始终以采样率进行更新。同时,面向用户的读取寄存器集复制内部寄存器集的数据值每当串行接口空闲时。这保证了传感器寄存器的突发读取来自相同采样时刻的测量。请注意,如果不使用突发读取,则用户负责确保一组单字节读取对应于单个采样瞬间检查数据就绪中断。每个16位陀螺仪测量都具有FS_SEL(寄存器27)中定义的满刻度。对于每满刻度设置,GYRO_xOUT中每个LSB的陀螺仪灵敏度如下表所示:
4 MP6050驱动程序实现
4.1 驱动函数实现
1)写寄存器函数
代码第25行: 调用HAL_I2C_Mem_Write实现写寄存器功能
2)读寄存器函数
代码第37行: 调用HAL_I2C_Mem_Read实现读寄存器功能
4.2 完整驱动代码
1)创建mp6050.c文件,编写如下代码
/* USER CODE BEGIN Header */
/**
******************************************************************************
* File Name : mpu6050.c
* Description : I2C drive based on STM32F4
* STM32 HAL library ver: STM32Cube_FW_F4_V1.27.1
*
******************************************************************************
* @attention
*
* Copyright (c) 2024~2029 mingfei.tang
* All rights reserved.
*
*************************************************************************
*/
/* USER CODE END Header */
#include "mpu6050.h"MPU6050_T g_tMPU6050;static uint8_t mpu6050_WeReg( uint16_t regAdd, uint8_t *pData, uint16_t Size )
{HAL_StatusTypeDef status;status = HAL_I2C_Mem_Write( &hi2c2, MPU6050_SLAVE_ADDRESS, regAdd, I2C_MEMADD_SIZE_8BIT, pData, Size, 1000);if( status == HAL_OK)return MPU6050_OK;elsereturn MPU6050_ERROR;
}static uint8_t mpu6050_RdReg( uint16_t regAdd, uint8_t *pData, uint16_t Size )
{HAL_StatusTypeDef status;status = HAL_I2C_Mem_Read( &hi2c2, MPU6050_SLAVE_ADDRESS, regAdd, I2C_MEMADD_SIZE_8BIT, pData, Size, 1000);if( status == HAL_OK)return MPU6050_OK;elsereturn MPU6050_ERROR;
}void mpu6050_Init(void)
{uint8_t cmd;cmd = 0x00;mpu6050_WeReg(PWR_MGMT_1, &cmd,1); //解除休眠状态cmd = 0x07;mpu6050_WeReg(SMPLRT_DIV, &cmd,1);cmd = 0x06;mpu6050_WeReg(CONFIG, &cmd,1);cmd = 0xE8;mpu6050_WeReg(GYRO_CONFIG, &cmd,1);cmd = 0x01;mpu6050_WeReg(ACCEL_CONFIG, &cmd,1);
}void mpu6050_ReadData(void)
{uint8_t ucReadBuf[14];mpu6050_RdReg( ACCEL_XOUT_H, ucReadBuf,14);/* 将读出的数据保存到全局结构体变量 */g_tMPU6050.Accel_X = (ucReadBuf[0] << 8) + ucReadBuf[1];g_tMPU6050.Accel_Y = (ucReadBuf[2] << 8) + ucReadBuf[3];g_tMPU6050.Accel_Z = (ucReadBuf[4] << 8) + ucReadBuf[5];g_tMPU6050.Temp = (int16_t)((ucReadBuf[6] << 8) + ucReadBuf[7]);g_tMPU6050.GYRO_X = (ucReadBuf[8] << 8) + ucReadBuf[9];g_tMPU6050.GYRO_Y = (ucReadBuf[10] << 8) + ucReadBuf[11];g_tMPU6050.GYRO_Z = (ucReadBuf[12] << 8) + ucReadBuf[13];
}void mpu6050_test( void )
{mpu6050_Init();while(1){HAL_Delay(1000);mpu6050_ReadData();{printf("AX=%6d,AY=%6d,AZ=%6d,",g_tMPU6050.Accel_X,g_tMPU6050.Accel_Y,g_tMPU6050.Accel_Z);printf("GX=%6d,GY=%6d,GZ=%6d,T=%6d \r",g_tMPU6050.GYRO_X,g_tMPU6050.GYRO_Y,g_tMPU6050.GYRO_Z,g_tMPU6050.Temp); }}
}/* End of this file */
2)创建mp6050.h,编写如下代码
/* USER CODE BEGIN Header */
/********************************************************************************* File Name : mpu9050.h* Description : I2C drive based on STM32F4* ******************************************************************************* @attention** Copyright (c) 2024~2029 mingfei.tang* All rights reserved.***************************************************************************/
/* USER CODE END Header */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __MPU6050_H
#define __MPU6050_H#ifdef __cplusplusextern "C" {
#endif#include "stdio.h"
#include "main.h"#define MPU6050_OK 1
#define MPU6050_ERROR 0#define bsp_DelayMS HAL_Delay#define MPU6050_SLAVE_ADDRESS 0xD0 /* I2C从机地址 *///****************************************
// 定义MPU6050内部地址
//****************************************
#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
#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
#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 WHO_AM_I 0x75 //IIC地址寄存器(默认数值0x68,只读)typedef struct
{int16_t Accel_X;int16_t Accel_Y;int16_t Accel_Z;int16_t Temp;int16_t GYRO_X;int16_t GYRO_Y;int16_t GYRO_Z;
}MPU6050_T;extern MPU6050_T g_tMPU6050;void mpu6050_test( void );#ifdef __cplusplus
}
#endif#endif /*__MPU6050_H */
5 测试
1)编写测试代码
void mpu6050_test( void )
{mpu6050_Init();while(1){HAL_Delay(1000);mpu6050_ReadData();{printf("AX=%6d,AY=%6d,AZ=%6d,",g_tMPU6050.Accel_X,g_tMPU6050.Accel_Y,g_tMPU6050.Accel_Z);printf("GX=%6d,GY=%6d,GZ=%6d,T=%6d \r",g_tMPU6050.GYRO_X,g_tMPU6050.GYRO_Y,g_tMPU6050.GYRO_Z,g_tMPU6050.Temp); }}
}
2)编写代码,并下载到板卡中,运行代码
6 逻辑分析仪捕捉波形
读取数据的波形
相关文章:
STM32硬件接口I2C应用(基于MP6050)
目录 概述 1 STM32Cube控制配置I2C 1.1 I2C参数配置 1.2 使用STM32Cube产生工程 2 HAL库函数介绍 2.1 初始化函数 2.2 写数据函数 2.3 读数据函数 3 认识MP6050 3.1 MP6050功能介绍 3.2 加速计测量寄存器 编辑3.3 温度计量寄存器 3.4 陀螺仪测量寄存器 4 MP60…...
基于JSP的贝儿米幼儿教育管理系统
开头语: 你好呀,我是计算机学长猫哥!如果您对本系统感兴趣或者有相关需求,文末可以找到我的联系方式。 开发语言: Java 数据库: MySQL 技术: JSP技术 工具: IDEA/Eclipse、…...
数字化与文化交融,树莓集团助力园区文化升级
树莓集团在产业园运营领域建设了特色空间布局,包括产业实训基地、产业办公中心、业务资源平台、产学研中心、数字资产空间、双创孵化空间、产业实验室和人才项目转化中心等八大板块,共同构建了一个全面而深入的产业支撑体系,为园区文化建设提…...
【原创课程】如何制作安装板
具体步骤如下: 第一步:新建页类型为“安装板布局图(交互式)”并修改页描述为“安装板布局图”。 第二步:新建安装板 第三步:设置图纸上符号元件的部件,双击符号,弹出常规设备窗口,点击部件进行选择 第四步:打开2D安装板导航器,将图纸中的设备拖拽到安装板上 第五步…...
简单聊聊【java.util.Stream】,更新中
public class Main {public static void main(String[] args) {List<Integer> numbers Arrays.asList(1, 2, 3, 4, 5, 6); // 原始容器:java.util.Arrays.ArrayList#ArrayList// 创建一个 Stream,过滤出偶数,并打印它们numbers.str…...
GIS之arcgis系列07:conda环境下安装arcpy环境
首先将python27环境下的“Desktop10.8.pth”拷贝到anaconda环境下。 路径如下(仅参考): C:\Python27\ArcGIS10.8\Lib\site-packages\Desktop10.8.pth D:\Anaconda\Lib\site-packages 在anaconda prompt中穿创建一个新环境 conda create -…...
容器运行nslookup提示bash: nslookup: command not found【笔记】
在容器中提示bash: nslookup: command not found,表示容器中没有安装nslookup命令。 可以通过以下命令安装nslookup: 对于基于Debian/Ubuntu的容器,使用以下命令: apt-get update apt-get install -y dnsutils对于基于CentOS/R…...
解析 Spring 框架中的三种 BeanName 生成策略
在 Spring 框架中,定义 Bean 时不一定需要指定名称,Spring 会智能生成默认名称。本文将介绍 Spring 的三种 BeanName 生成器,包括在 XML 配置、Java 注解和组件扫描中使用的情况,并解释它们如何自动创建和管理 Bean 名称。 1. Be…...
细说ARM MCU的串口接收数据的实现过程
目录 一、硬件及工程 1、硬件 2、软件目的 3、创建.ioc工程 二、 代码修改 1、串口初始化函数MX_USART2_UART_Init() (1)MX_USART2_UART_Init()串口参数初始化函数 (2)HAL_UART_MspInit()串口功能模块初始化函数 2、串口…...
000-基于sklearn的机器学习入门:工作环境搭建与配置
本专栏将介绍基于Scikit-learn(简称sklearn)的机器学习入门知识。包括但不一定限于,机器学习基本知识、sklearn库简介,基于Sklearn库的机器学习实践。 这是本专栏的第000篇,将介绍如何安装和配置sklearn环境,不仅包括Sklearn库的…...
就业班 第四阶段(k8s) 2401--6.5 day3 Yaml语法解析+钩子函数
Yaml语法解析 今天学的都是在pod里面操作的 格式 这个文件要创建的资源对象是什么 kind: Pod 这个资源对象所在的api版本是什么 apiVersion: v1 元数据 metadata: 对这个pod中的镜像的描述 spec: 字典无序 同一级可以调换顺序 :比如kind和apiVersion …...
电脑开机出现英文字母,如何解决这个常见问题?
电脑开机时出现英文字母的情况通常意味着系统在启动过程中遇到了问题。这些英文字母可能是错误信息、系统提示或BIOS设置问题。通过理解这些信息并采取适当的措施,您可以解决大多数启动问题。本文将介绍三种解决电脑开机出现英文字母问题的方法,帮助您恢…...
一张试卷
目录 问题 1: 1.时间 题目描述1 输入1 输出1 样例输入1 样例输出1 提示1 代码1 问题 2: 超酷的电话号码 题目描述2 输入2 输出2 样例输入2 样例输出2 提示2 代码2 问题 3:3.爸爸的数学题 题目描述3 输入3 输出3 样例输入3 样例输出3 提示3 代码3 问题 4: 4. 营养膳食 题目描述4…...
记一次 .NET某游戏币自助机后端 内存暴涨分析
一:背景 1. 讲故事 前些天有位朋友找到我,说他们的程序内存会偶发性暴涨,自己分析了下是非托管内存问题,让我帮忙看下怎么回事?哈哈,看到这个dump我还是非常有兴趣的,居然还有这种游戏币自助机…...
计算机考研|哪些985/211院校不歧视双非二本生?
说句残酷的话,能对某一专业做出贡献,那么你的水平肯定是很高的。如果普通学生,普通本科的话可能很难做到这一点。这也是现在考研风气比较强的原因,一部分专业能力不突出的学生来选择深造3年。 对于基础较差想要考计算机研究生的同…...
Spring Boot:简化 Java 应用开发的艺术
Spring Boot 是一种用于快速开发、运行和管理 Java 应用程序的开源框架。它简化了基于 Spring 的应用程序的配置和部署,使得开发者能够更加专注于业务逻辑的实现。本文将介绍 Spring Boot 的核心特性、优势以及如何在项目中使用 Spring Boot。 一、核心特性 自动配…...
elasticsearch安装与使用(2)-基于term匹配的简单搜索引擎搭建
把一篇pdf论文解析后,放入es数据库中,建立倒排索引表,并实现简单搜索。 1、pdf论文解析(英文) 安装pdf解析包 pip install pdfminer.sixdef extract_text_from_pdf(filename, page_numbersNone, min_line_length1):从pdf文件中提取文字:pa…...
速盾:ddos防护与高防ip区别?
在网络安全领域,DDOS 防护和高防 IP 都是重要的防护手段,但它们之间存在着一些明显的区别。 DDOS 防护是一种针对分布式拒绝服务攻击的防御策略。它通过多种技术和方法来识别和抵御 DDOS 攻击。常见的 DDOS 防护手段包括流量清洗、连接限制、协议分析等。…...
Java中StringBulider详解
StringBuilder 是 Java 中一个用来创建可变字符串的类。与 String 类不同,StringBuilder 对象能够被修改,不会创建新的对象,因此在需要进行大量字符串操作时,StringBuilder 更高效。以下是 StringBuilder 的详细讲解。 创建 Stri…...
基于springboot高校就业招聘系统的设计
管理员账户功能包括:系统首页,个人中心,就业咨询管理,毕业去向管理,简历管理,管理员管理,基础数据管理 辅导员账户功能包括:系统首页,个人中心,就业咨询管理…...
嵌入式C语言编码规范要点
1.函数命名方法 骆驼命名法(Camel) 帕斯卡命名法((pascal),也叫大驼峰命名法(Upper Camel Case) 匈牙利命名法 下划线命名法(也称为蛇形命名法) 详述见之前文…...
Python中的全局解释器锁:深入解析与应对策略
1. 引言 在Python的世界里,全局解释器锁(GIL)是一个经常被讨论的话题。它既是Python并发编程中的一个重要概念,也是许多开发者感到困惑的源头。本文将深入探讨GIL的工作原理、它对Python程序性能的影响 2. 全局解释器锁的历史背…...
【java计算机毕设】图书商城管理系统MySQL springboot vue html maven送文档
1项目功能介绍 【java计算机毕设】图书商城管理系统 Java Spring Boot vue HTML MySQL 赠送文档 PPT 2项目简介 系统功能: 图书商城管理系统包括管理员和用户两种角色。 管理员的功能包括在个人中心修改个人信息,以及在基础数据管理中管理会员等级类型和…...
【Java刷题】二叉树
相同的树 public boolean isSameTree(TreeNode p, TreeNode q) {if(p null && q null) {return true;} else if(p ! null && q ! null) {if(p.val ! q.val) {return false;} else {return isSameTree(p.left, q.left) && isSameTree(p.right, q.rig…...
【Linux】程序地址空间之动态库的加载
我们先进行一个整体轮廓的了解,随后在深入理解细节。 在动态库加载之前还要说一下程序的加载,因为理解了程序的加载对动态库会有更深的理解。 轮廓: 首先,不管是程序还是动态库刚开始都是在磁盘中的,想要执行对应的可…...
LabVIEW处理大量数据时,怎样确保数据的准确性和完整性?
在LabVIEW处理中,确保大量数据的准确性和完整性至关重要。以下是详细的多角度分析和建议,以确保在LabVIEW中处理大量数据时,数据的准确性和完整性: 1. 数据采集阶段 1.1 高精度硬件选择 选择高精度的数据采集硬件,如…...
容器是什么?
概念 容器可以被看作是一种轻量级的虚拟化技术。与传统虚拟化技术相比,容器不需要为每个应用程序提供单独的操作系统,它们共享宿主机的操作系统内核。这使得容器更加轻便和高效。 想象一下,容器就像是一艘艘可以在海洋中独立航行的货轮&…...
#15 从Stable Diffusion生成的艺术中寻找灵感
文章目录 前言1. Stable Diffusion简介2. 寻找灵感的途径2.1 深入探索主题2.2 结合多种艺术风格2.3 实验不同的创意组合 3. 灵感应用3.1 艺术创作3.2 设计项目3.3 故事讲述 4. 实践建议4.1 记录和迭代4.2 开放实验4.3 结合个人风格 结论 前言 在当今的数字时代,人工…...
git rebase
1. git rebase的意义 首先理解这个rebase,它的意思是re base,翻译过来就是“重新基于”。 意义是:重新整理当前分支的开发线,使其变成基于某个开发节点的开发线。 2. rebase用于并行开发 构造两个分支master和feature…...
Docker引起的漏洞问题
前言 测试环境上的中间件和java应用都是由docker进行部署的,但是因为docker的镜像访问有时候需要外网,由此引发了问题,在docker文件中 /usr/lib/systemd/system/docker.service 原有的配置为,可以看到进行了加密 ExecStart/usr/bin/dockerd --tlsverify --tlscacert/etc/docker…...
郑州网站建设网站推广/哪个网站做推广效果好
android:resizeableActivity[“true” | “false”] 如果该属性设置为 true,Activity 将能以分屏和自由形状模式启动。 如果此属性设置为 false,Activity 将不支持多窗口模式。 如果该值为 false,且用户尝试在多窗口模式下启动 Activity&…...
wordpress分类自定义title/网络销售真恶心
题目描述 学校植树节开展植树活动,已知CoCo所在的班级分到树苗m株,班里参加植树的同学有n人(m>n),请问每位同学平均可以植树几株?还有几株剩余?输入要求 输入两个整数m和n,分别…...
c2c网站开发策划/公众号软文是什么意思
Latex基本语法的备忘录 Latex基本语法前言一、常见的数学符号1. 数学上的“**属于**”、“**不属于**”符号。2. 数学的矩阵的**转置符号**书写。3. 数学中求和公式。4.数学中字母代上标5.数字或公式上添加方框6.数学分式7.数学公式中在某些符号下添加花括号8.数学中的垂直符号…...
wordpress分类编辑器/深圳市seo上词贵不贵
-- 最快的从库搭建方法0,准备从库第一次数据备份,临时锁所有表开启窗口1mysql> flush tables with read lock;Query OK, 0 rows affected (0.00 sec)mysql> show master status;------------------------------------------------------------| Fi…...
惠州网站建设制作/网站建设公司大型
一、链表题目 1、从尾到头打印链表 使用栈(也可以使用数组,逆序输出) /** * public class ListNode { * int val; * ListNode next null; * * ListNode(int val) { * this.val val; * } * …...
dz做的网站容易收录吗/百度seo优化教程免费
在Linux当中查找文件的命令但多,但个人觉得最重要的搜索文件的命令是find,这个命令使用非常频繁,需要熟练掌握 文章目录前言find 使用详解1.介绍2.语法详解3. find 选项示例(option)4、可选项总结友情链接前言 在Linux当中查找文件的命令但多…...