LSM6DS3姿態芯片和LIS2MD磁力計芯片數據讀取(stm32)

上代碼

main.c? 代碼示例

#include "lsm6ds3.h"
#include "lis2md.h"

int16_t? ?Acc[3] = {0}, GYO[3] = {0},Mag[3] = {0};

int main(void)
{

? ? ?I2C_GPIO_Config();?? ??? ? ? //配置IIC使用端口
Delayms(500);?? ??? ??? ??? ? ? ?? ? //延時

? ? ?Lsm6ds3_Init( );? ? ? //姿態芯片初始化

LIS2MDL_Init();? ? ? //磁力計初始化

}

while(1)

{

?read_Ang_rate(&GYO[0], &GYO[1],&GYO[2]); //陀螺儀

?read_Acc_data(&Acc[0], &Acc[1],&Acc[2]); //加速度

?LIS2MDL_Read_XYZ(&Mag[0], &Mag[1], &Mag[2]); ?//地磁;

//printf("打印讀到數據");

}

lsm6ds3.h

#ifndef __lsm6ds3_H
#define __lsm6ds3_H#define LSM6DS3TR_C_WHO_AM_I   0x6A   //是否為0x6A#define LSM_ADDR   0xD6  //  0xD6#define ACC_ODR_1_6hz 	   0xB0
#define ACC_ODR_12_5hz 	   0x10
#define ACC_ODR_26hz   	   0x20
#define ACC_ODR_52hz  	   0x30
#define ACC_ODR_104hz 	   0x40
#define ACC_ODR_208hz  		 0x50
#define ACC_ODR_416hz  		 0x60
#define ACC_ODR_833hz  		 0x70
#define ACC_ODR_1_66khz	   0x80
#define ACC_ODR_3_33khz    0x90
#define ACC_ODR_6_66khz    0xA0
#define ACC_DISABLE        0X00#define ACC_CALE_2G        0X00  //加速度量程
#define ACC_CALE_16G       0X01
#define ACC_CALE_4G        0X02
#define ACC_CALE_8G        0X03#define ANG_ODR_12_5hz 	   0x10      //角速度采樣速度
#define ANG_ODR_26hz   	   0x20
#define ANG_ODR_52hz  	   0x30
#define ANG_ODR_104hz 	   0x40
#define ANG_ODR_208hz  		 0x50
#define ANG_ODR_416hz  		 0x60
#define ANG_ODR_833hz  		 0x70
#define ANG_ODR_1_66khz	   0x80
#define ANG_ODR_3_33khz    0x90
#define ANG_ODR_6_66khz    0xA0
#define ANG_DISABLE        0x00#define ANG_CALE_245       0X00  //角速度量程
#define ANG_CALE_500       0X04
#define ANG_CALE_1000      0X08
#define ANG_CALE_2000      0X0c   // 2000度/s
/*********************************************寄存器**********************************************/#define LSM6DS3_WHO_AM_I 0x0f       //#define CTRL1_XL  0X10
#define CTRL2_G   0X11
#define CTRL3_C   0X12
#define CTRL4_C   0X13
#define CTRL5_C   0X14
#define CTRL6_C   0X15
#define CTRL7_G   0X16
#define CTRL8_XL  0X17
#define CTRL9_XL  0X18
#define CTRL10_C  0X19#define OUTX_L_G   0X22      //角速度相關
#define OUTX_H_G   0X23
#define OUTY_L_G   0X24
#define OUTY_H_G   0X25
#define OUTZ_L_G   0X26
#define OUTZ_H_G   0X27#define OUTX_L_XL   0X28     //加速度相關
#define OUTX_H_XL   0X29
#define OUTY_L_XL   0X2A
#define OUTY_H_XL   0X2B
#define OUTZ_L_XL   0X2C
#define OUTZ_H_XL   0X2D#define TAP_CFG     0X58
#define WAKE_UP_THS 0X5B
#define WAKE_UP_DUR 0X5C
#define MD1_CFG     0X5E
#define TAP_THS_6D  0X59
#define  D6D_SRC  0x1dvoid Reset_LSM6D(void);
void lsm6ds3tr_c_device_id_get(uint8_t *buff);    //讀who_am_i
void SetAccelerateRate_LSM6D(void);
void SetAccelerateFullScale_LSM6D(void);
void SetAngleSpeedRate_LSM6D(void);
void SetAngleSpeedFullScale_LSM6D(void);
void SetAcceleratemeterBW_LSM6d(void);
void Set_gyro_band_pass(void);  //設置陀螺儀過濾器
bool Init_LSM6D(void);
void read_Ang_rate(int16_t* ps16X, int16_t* ps16Y, int16_t* ps16Z);
void read_Acc_data(int16_t* ps16X, int16_t* ps16Y, int16_t* ps16Z);#endif

lsm6ds3.c

#include <stm32f10x.h>#include "I2C.h"
#include "lsm6ds3.h"
#include "delay.h"void Lsm6ds3_Init(void)
{
//	unsigned char temp;//while(Lsm6ds3_ReadByte(LSM6DS3_WHO_AM_I)!=0x69);	       //檢測地址是否正確	Lsm6ds3_WriteByte(CTRL1_XL,ACC_ODR_104hz|ACC_CALE_8G);  //加速采樣頻率及量程Lsm6ds3_WriteByte(CTRL2_G,ANG_ODR_104hz|ANG_CALE_2000);//陀螺儀樣頻率及量程Lsm6ds3_WriteByte(CTRL3_C,0X20);                       //中斷輸出低電平//使能陀螺儀x,y,z軸Lsm6ds3_WriteByte(CTRL10_C,0x38);//WAKE_UP INTERRUPT ConfigurationLsm6ds3_WriteByte(TAP_CFG,0x90);Lsm6ds3_WriteByte(WAKE_UP_DUR,0x08);Lsm6ds3_WriteByte(WAKE_UP_THS,0x08);    //喚醒閾值Lsm6ds3_WriteByte(MD1_CFG,0x20);        //中斷1喚醒使能//6D Orientation ConfigurationLsm6ds3_WriteByte(TAP_THS_6D,0x40);Lsm6ds3_WriteByte(CTRL8_XL,0x01);}/*//[函數名稱]SetAccelerateRate_LSM6D
//[函數功能]設置加速度數據輸出速率#define RATE_208Hz	0x50
void SetAccelerateRate_LSM6D(void)
{uint8_t buf[1] = {0};IIC_Read(CTRL1_XL, buf, 1);		//讀取CTRL1_XL寄存器值buf[0] |= RATE_208Hz;			//設置加速度計的數據輸出速率為218HzIIC_Send(CTRL1_XL, buf, 1);		//
}//[函數名稱]SetAccelerateFullScale_LSM6D
//[函數功能]設置加速度計的滿量程//#define ACC_FSXL_4G 0x08
void SetAccelerateFullScale_LSM6D(void)
{uint8_t buf[1] = {0};IIC_Read(CTRL1_XL, buf, 1);		//讀取CTRL1_XL寄存器配置buf[0] |= ACC_CALE_8G;			//設置加速度計的滿量程IIC_Send(CTRL1_XL, buf, 1);
}//[函數名稱]SetAngleSpeedRate_LSM6D
//[函數功能]設置陀螺儀數據輸出速率void SetAngleSpeedRate_LSM6D(void)
{uint8_t buf[1] = {0};IIC_Read(CTRL2_G, buf, 1);		//讀取CTRL2_G寄存器的配置buf[0] |= RATE_208Hz;			//設置加速度計的數據采樣率為208HzIIC_Send(CTRL2_G, buf, 1);
}//[函數名稱]SetAngleSpeedFullScale_LSM6D
//[函數功能]設置陀螺儀滿量程#define GYR_FSG_500 0x04
void SetAngleSpeedFullScale_LSM6D(void)
{uint8_t buf[1] = {0};IIC_Read(CTRL2_G, buf, 1);buf[0] |= ANG_CALE_2000;		//設置陀螺儀計的最大量程IIC_Send(CTRL2_G, buf, 1);
}//[函數名稱]SetAcceleratemeterBW_LSM6d
//[函數功能]設置加速度計帶寬選擇#define LSM6DS3TRC_ACC_BW0XL_400HZ			0x01	//加速度計模擬帶寬
#define LSM6DS3TRC_ACC_LOW_PASS_ODR_50	    0x88	//低通濾波器
void SetAcceleratemeterBW_LSM6d(void)
{uint8_t buf[1] = {0};IIC_Read(CTRL1_XL, buf, 1);buf[0] |= LSM6DS3TRC_ACC_BW0XL_400HZ;IIC_Send(CTRL1_XL, buf, 1);IIC_Read(CTRL8_XL, buf, 1);buf[0] |= LSM6DS3TRC_ACC_LOW_PASS_ODR_50;IIC_Send(CTRL8_XL, buf, 1);
}#define LSM6DS3TR_C_HP_260mHz_LP1_STRONG         0xA8
void Set_gyro_band_pass(void)  //設置陀螺儀過濾器
{}	*///獲取角速度void read_Ang_rate(int16_t* ps16X, int16_t* ps16Y, int16_t* ps16Z)
{u8 valueL;u8 valueH;valueL= Lsm6ds3_ReadByte(0x22);valueH= Lsm6ds3_ReadByte(0x23);*ps16X=valueH*256+valueL;*ps16X=*ps16X/16.4;valueL=Lsm6ds3_ReadByte(0x24);valueH=Lsm6ds3_ReadByte(0x25);*ps16Y=valueH*256+valueL;*ps16Y=*ps16Y/16.4;valueL=Lsm6ds3_ReadByte(0x26);valueH=Lsm6ds3_ReadByte(0x27);*ps16Z=valueH*256+valueL;*ps16Z=*ps16Z/16.4;
}	//獲取加速度void read_Acc_data(int16_t* ps16X, int16_t* ps16Y, int16_t* ps16Z)
{u8 valueL;u8 valueH;valueL=Lsm6ds3_ReadByte(0x28);valueH=Lsm6ds3_ReadByte(0x29);* ps16X=valueH*256+valueL;valueL=Lsm6ds3_ReadByte(0x2a);valueH=Lsm6ds3_ReadByte(0x2b);* ps16Y=valueH*256+valueL;valueL=Lsm6ds3_ReadByte(0x2c);valueH=Lsm6ds3_ReadByte(0x2d);* ps16Z=valueH*256+valueL;
}	

lis2md.h

#ifndef __lis2md_H
#define __lis2md_H#define LIS2MDL_ADDR_WRITE                        0x3C
#define LIS2MDL_ADDR_READ                         0x3C //  0x3D
#define LIS2MDL_CFG_A           0x60   //idle DM1,DM0為00
#define LIS2MDL_CFG_B           0x61
#define LIS2MDL_CFG_C           0x62
#define LIS2MDL_REG_WHO_AM_I    0x4F#define LIS2MDL_ADDR_INTCRTL                      0x63
#define LIS2MDL_ADDR_INTSOURCE                    0x64
#define LIS2MDL_ADDR_INTTHSL                      0x65
#define LIS2MDL_ADDR_INTTHSH                      0x66
#define LIS2MDL_ADDR_STATUS                       0x67#define LIS2MDL_ADDR_XOUTL                        0x68
#define LIS2MDL_ADDR_XOUTH                        0x69
#define LIS2MDL_ADDR_YOUTL                       0x6A
#define LIS2MDL_ADDR_YOUTH                        0x6B
#define LIS2MDL_ADDR_ZOUTL                        0x6C
#define LIS2MDL_ADDR_ZOUTH                        0x6D#define LIS2MDL_ADDR_TEMPL                        0x6E
#define LIS2MDL_ADDR_TEMPH                        0x6F#define LIS2MDL_ADDR_OFFSETX_L                    0x45
#define LIS2MDL_ADDR_OFFSETX_H                    0x46
#define LIS2MDL_ADDR_OFFSETY_L                    0x47
#define LIS2MDL_ADDR_OFFSETY_H                    0x48
#define LIS2MDL_ADDR_OFFSETZ_L                    0x49
#define LIS2MDL_ADDR_OFFSETZ_H                    0x4A#define LIS2MDL_ADDR_CHIPID                       0x4Fvoid LIS2MDL_Init(void);
int Get_WHO_AM_I_LIS2MDL(void);
void LIS2MDL_Soft_Reset(void);   //磁力計復位
void LIS2MDL_Read_XYZ(int16_t* ps16X, int16_t* ps16Y, int16_t* ps16Z);#endif

lis2md.c

#include <stm32f10x.h>#include "I2C.h"
#include "lis2md.h"
#include "delay.h"//Startup sequence
void LIS2MDL_Init(void)
{uint8_t dat;dat=0x80;lis2md_WriteByte(LIS2MDL_CFG_A,dat);dat=0x10;lis2md_WriteByte(LIS2MDL_CFG_C,dat);}int Get_WHO_AM_I_LIS2MDL(void)
{return lis2md_ReadByte(LIS2MDL_REG_WHO_AM_I);   }#define LIS2MDL_CFGA_SOFT_RST                   (1 << 5)
#define LIS2MDL_CFGA_REBOOT                     (1 << 6)
void LIS2MDL_Soft_Reset(void)   //磁力計復位
{uint8_t dat;dat=LIS2MDL_CFGA_SOFT_RST;lis2md_WriteByte(LIS2MDL_CFG_A, dat);Delay_ms(1); //HAL_Delay(15);  //HAL_Delay(2);dat=LIS2MDL_CFGA_REBOOT;lis2md_WriteByte(LIS2MDL_CFG_A, dat);Delay_ms(1); //HAL_Delay(15);  //HAL_Delay(20);
}#define LIS2MDL_ADDR_READ                         0x3D
void LIS2MDL_Read_XYZ(int16_t* ps16X, int16_t* ps16Y, int16_t* ps16Z)
{u8 valueL;u8 valueH;valueL=lis2md_ReadByte(LIS2MDL_ADDR_XOUTL);valueH=lis2md_ReadByte(LIS2MDL_ADDR_XOUTH);* ps16X=valueH*256+valueL;valueL=lis2md_ReadByte(LIS2MDL_ADDR_YOUTL);valueH=lis2md_ReadByte(LIS2MDL_ADDR_YOUTH);* ps16Y=valueH*256+valueL;valueL=lis2md_ReadByte(LIS2MDL_ADDR_ZOUTL);valueH=lis2md_ReadByte(LIS2MDL_ADDR_ZOUTH);* ps16Z=valueH*256+valueL;
}

i2c.h

#ifndef _I2C_H
#define _I2C_Htypedef enum {FALSE=0,TRUE=1} bool;void I2C_GPIO_Config(void);  //mpu9250 輸入定義
void I2C_delay(void);	
void delay5ms(void);
bool I2C_Start(void);
void I2C_Stop(void);
void I2C_Ack(void);
void I2C_NoAck(void);
bool I2C_WaitAck(void);
void I2C_SendByte(u8 SendByte); //數據從高位到低位//
unsigned char I2C_RadeByte(void);  //數據從高位到低位//
bool Single_Write(unsigned char SlaveAddress,unsigned char REG_Address,unsigned char REG_data);
unsigned char Single_Read(unsigned char SlaveAddress,unsigned char REG_Address);
void WWDG_Configuration(void);
void WWDG_IRQHandler(void);u8 Lsm6ds3_ReadByte(u8 Reg);
u8 Lsm6ds3_WriteByte(u8 WriteAddr, u8 Data);u8 lis2md_ReadByte(u8 Reg);
u8 lis2md_WriteByte(u8 WriteAddr, u8 Data) ;
#endif

i2c.c

#include "stm32f10x.h"
#include "i2c.h"
#include "lsm6ds3.h"#include "lis2md.h"char  test=0; 				 //IIC//************************************
/*模擬IIC端口輸出輸入定義*/
#define SCL_H         GPIOB->BSRR = GPIO_Pin_6
#define SCL_L         GPIOB->BRR  = GPIO_Pin_6 #define SDA_H         GPIOB->BSRR = GPIO_Pin_7
#define SDA_L         GPIOB->BRR  = GPIO_Pin_7#define SCL_read      GPIOB->IDR  & GPIO_Pin_6
#define SDA_read      GPIOB->IDR  & GPIO_Pin_7/*******************************************************************************
* Function Name  : I2C_GPIO_Config
* Description    : Configration Simulation IIC GPIO
* Input          : None 
* Output         : None
* Return         : None
****************************************************************************** */
void I2C_GPIO_Config(void)  //mpu9250 輸入定義
{GPIO_InitTypeDef  GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;  GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;GPIO_Init(GPIOB, &GPIO_InitStructure);
}/*******************************************************************************
* Function Name  : I2C_delay
* Description    : Simulation IIC Timing series delay
* Input          : None
* Output         : None
* Return         : None
****************************************************************************** */
void I2C_delay(void)
{u8 i=6;  // 30 這里可以優化速度	,經測試最低到5還能寫入while(i) { i--; }  
}void delay5ms(void)
{int i=1000;  while(i) { i--; }  
}
/*******************************************************************************
* Function Name  : I2C_Start
* Description    : Master Start Simulation IIC Communication
* Input          : None
* Output         : None
* Return         : Wheather	 Start
****************************************************************************** */
bool I2C_Start(void)
{SDA_H;SCL_H;I2C_delay();if(!SDA_read)return FALSE;	//SDA線為低電平則總線忙,退出SDA_L;I2C_delay();if(SDA_read) return FALSE;	//SDA線為高電平則總線出錯,退出SDA_L;I2C_delay();return TRUE;
}
/*******************************************************************************
* Function Name  : I2C_Stop
* Description    : Master Stop Simulation IIC Communication
* Input          : None
* Output         : None
* Return         : None
****************************************************************************** */
void I2C_Stop(void)
{SCL_L;I2C_delay();SDA_L;I2C_delay();SCL_H;I2C_delay();SDA_H;I2C_delay();
} 
/*******************************************************************************
* Function Name  : I2C_Ack
* Description    : Master Send Acknowledge Single
* Input          : None
* Output         : None
* Return         : None
****************************************************************************** */
void I2C_Ack(void)
{	SCL_L;I2C_delay();SDA_L;I2C_delay();SCL_H;I2C_delay();SCL_L;I2C_delay();
}   
/*******************************************************************************
* Function Name  : I2C_NoAck
* Description    : Master Send No Acknowledge Single
* Input          : None
* Output         : None
* Return         : None
****************************************************************************** */
void I2C_NoAck(void)
{	SCL_L;I2C_delay();SDA_H;I2C_delay();SCL_H;I2C_delay();SCL_L;I2C_delay();
} 
/*******************************************************************************
* Function Name  : I2C_WaitAck
* Description    : Master Reserive Slave Acknowledge Single
* Input          : None
* Output         : None
* Return         : Wheather	 Reserive Slave Acknowledge Single
****************************************************************************** */
bool I2C_WaitAck(void) 	  //返回為:=1有ACK,=0無ACK
{SCL_L;I2C_delay();SDA_H;			I2C_delay();SCL_H;I2C_delay();if(SDA_read){SCL_L;I2C_delay();return FALSE;}SCL_L;I2C_delay();return TRUE;
}
/*******************************************************************************
* Function Name  : I2C_SendByte
* Description    : Master Send a Byte to Slave
* Input          : Will Send Date
* Output         : None
* Return         : None
****************************************************************************** */
void I2C_SendByte(u8 SendByte) //數據從高位到低位//
{u8 i=8;while(i--){SCL_L;I2C_delay();if(SendByte&0x80)SDA_H;  else SDA_L;   SendByte<<=1;I2C_delay();SCL_H;I2C_delay();}SCL_L;
}  
/*******************************************************************************
* Function Name  : I2C_RadeByte
* Description    : Master Reserive a Byte From Slave
* Input          : None
* Output         : None
* Return         : Date From Slave 
****************************************************************************** */
unsigned char I2C_RadeByte(void)  //數據從高位到低位//
{ u8 i=8;u8 ReceiveByte=0;SDA_H;				while(i--){ReceiveByte<<=1;      SCL_L;I2C_delay();SCL_H;I2C_delay();	if(SDA_read){ReceiveByte|=0x01;}}SCL_L;return ReceiveByte;
} 
//ZRX          
//?????*******************************************bool Single_Write(unsigned char SlaveAddress,unsigned char REG_Address,unsigned char REG_data)		     //void
{if(!I2C_Start())return FALSE;I2C_SendByte(SlaveAddress);   //發送設備地址+寫信號//I2C_SendByte(((REG_Address & 0x0700) >>7) | SlaveAddress & 0xFFFE);//設置高起始地址+器件地址 if(!I2C_WaitAck()){I2C_Stop(); return FALSE;}I2C_SendByte(REG_Address );   //設置低起始地址      I2C_WaitAck();	I2C_SendByte(REG_data);I2C_WaitAck();   I2C_Stop(); delay5ms();return TRUE;
}//單字節讀取*****************************************
unsigned char Single_Read(unsigned char SlaveAddress,unsigned char REG_Address)
{   unsigned char REG_data;     	if(!I2C_Start())return FALSE;I2C_SendByte(SlaveAddress);   //I2C_SendByte(((REG_Address & 0x0700) >>7) | REG_Address & 0xFFFE);//設置高起始地址+器件地址 if(!I2C_WaitAck()){I2C_Stop();test=1; return FALSE;}I2C_SendByte((u8) REG_Address);   //設置高起始地址+器件地址 I2C_WaitAck();I2C_Start();I2C_SendByte(SlaveAddress+1);I2C_WaitAck();REG_data= I2C_RadeByte();I2C_NoAck();I2C_Stop();//return TRUE;return REG_data;}		//自己改寫的兩個讀寫函數u8 Lsm6ds3_ReadByte(u8 Reg)
{unsigned char REG_data;   REG_data=Single_Read(LSM_ADDR,Reg);return REG_data;
}u8 Lsm6ds3_WriteByte(u8 WriteAddr, u8 Data) 
{	
Single_Write(LSM_ADDR,WriteAddr ,Data);	
return 0;
}u8 lis2md_ReadByte(u8 Reg)
{unsigned char REG_data;   REG_data=Single_Read(LIS2MDL_ADDR_READ,Reg);return REG_data;
}u8 lis2md_WriteByte(u8 WriteAddr, u8 Data) 
{	
Single_Write(LIS2MDL_ADDR_WRITE,WriteAddr ,Data);	
return 0;
}/*
********************************************************************************
** 函數名稱 : WWDG_Configuration(void)
** 函數功能 : 看門狗初始化
** 輸    入	: 無
** 輸    出	: 無
** 返    回	: 無
********************************************************************************
*/
void WWDG_Configuration(void)
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);	WWDG_SetPrescaler(WWDG_Prescaler_8);	              //  WWDG clock counter = (PCLK1/4096)/8 = 244 Hz (~4 ms)  WWDG_SetWindowValue(0x41);		                 // Set Window value to 0x41WWDG_Enable(0x50);		       // Enable WWDG and set counter value to 0x7F, WWDG timeout = ~4 ms * 64 = 262 ms WWDG_ClearFlag();			       // Clear EWI flagWWDG_EnableIT();			       // Enable EW interrupt
}/*
********************************************************************************
** 函數名稱 : WWDG_IRQHandler(void)
** 函數功能 : 窗口提前喚醒中斷
** 輸    入	: 無
** 輸    出	: 無
** 返    回	: 無
********************************************************************************
*/ void WWDG_IRQHandler(void)
{/* Update WWDG counter */WWDG_SetCounter(0x50);/* Clear EWI flag */WWDG_ClearFlag(); 
}//************************************************

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

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

相關文章

數據傳輸安全-IKE工作過程

在前面的課程中&#xff0c;你已經掌握了&#xff1a;IPSec的目標&#xff1a;提供機密性、完整性、身份認證、防重放。IPSec的執行者&#xff1a;AH和ESP協議。IPSec的規則手冊&#xff1a;SA&#xff08;安全關聯&#xff09;&#xff0c;包含了所有保護參數&#xff08;算法…

翻譯-同位協同克里金算法

同點協同克里金法 副標題: 地統計學課程 主要內容: 同點協同克里金法 摘要 同點協同克里金法是一種多元地統計學技術,用于借助次要變量(協變量)來估算主要變量。本課程介紹了同點協同克里金法,并將其與簡單克里金法和簡單協同克里金法進行了比較。通過一個假設的案例…

國家統計局數據分析01——機器學習

我們前面爬取過國家統計局數據爬取——機器學習-CSDN博客的數據,我們接下來就對爬取的數據進行分析。 這是一個完整的數據分析代碼,主要用于加載、清洗和探索政府統計數據。讓我為你詳細解釋每個部分: 1. 導入必要的庫 import pandas as pd # 數據處理和分析的核心庫 imp…

【雜談】-混沌理論能否賦予機器差異化思考能力?

混沌理論能否賦予機器差異化思考能力&#xff1f; 文章目錄混沌理論能否賦予機器差異化思考能力&#xff1f;1、AI與結構化思維的本質特征2、人類思維的獨特優勢3、混沌算法的創新實踐4、混沌算法的作用機理5、混沌算法的應用實例5.1 音樂創作革新5.2 圖像生成突破5.3 科學發現…

jQuery.print插件:網頁內容打印與導出指南

本文還有配套的精品資源&#xff0c;點擊獲取 簡介&#xff1a;在網頁開發中&#xff0c;為了實現內容的打印或導出&#xff0c;可以利用jQuery.print插件&#xff0c;該插件提供了一個簡易的解決方案&#xff0c;尤其適用于表格數據。本指南詳細介紹了如何使用jQuery.print…

w嵌入式分享合集125

自己的原文哦~ https://blog.51cto.com/whaosoft/14165530 一、常用電路基礎公式 1.歐姆定律計算 計算電阻電路中電流、電壓、電阻和功率之間的關系。 歐姆定律解釋了電壓、電流和電阻之間的關系&#xff0c;即通過導體兩點間的電流與這兩點間的電勢差成正比。說…

Docker 核心技術:Union File System

大家好&#xff0c;我是費益洲。UnionFS 作為 Docker 的技術核心之一&#xff0c;實現了 Docker 鏡像的分層輕量化構建、容器資源的隔離復用等目的。本文將從核心原理、主流技術實現簡單介紹 UnionFS。 核心原理 Linux 的聯合文件系統&#xff08;Union File System&#xff0c…

MongoDB 文檔模型設計:JSON 結構的靈活性與陷阱

MongoDB 文檔模型設計&#xff1a;JSON 結構的靈活性與陷阱第一章&#xff1a;MongoDB 文檔模型基礎與核心特性1.1 MongoDB 文檔模型的哲學基礎1.2 文檔模型的優勢分析1.3 與關系型數據庫的深度對比第二章&#xff1a;文檔設計模式與最佳實踐2.1 嵌入式模式&#xff08;Embeddi…

基于SQL大型數據庫的智能問答系統優化

一、食用指南 基于SQL數據庫的智能問答系統設計與實現介紹了在數據庫中創建表格數據問答系統的基本方法&#xff0c;我們可以向該系統提出關于數據庫數據的問題&#xff0c;最終獲得自然語言答案。 為了針對數據庫編寫有效的查詢&#xff0c;我們需要向模型提供表名、表結構和…

【計算機網絡】前端基礎知識Cookie、localStorage、sessionStorage 以及 Token

一、先搞懂&#xff1a;為什么需要這些“存儲工具”&#xff1f; 網頁是“無狀態”的——比如你登錄一個網站&#xff0c;瀏覽器和服務器每次通信都是獨立的&#xff0c;服務器默認記不住你是誰。為了讓服務器“記住”用戶狀態&#xff08;比如登錄狀態、購物車內容&#xff09…

【語法】【C+V】【mermaid】本身常用圖表類型用法快查【CSDN不支持,VSCODE可用】

文章目錄 Mermaid 簡介Mermaid 由三部分組成Mermaid 的使用方法復雜圖表結構的技巧餅圖簡介餅圖語法餅圖示例雷達圖簡介雷達圖語法雷達圖語法細節標題軸曲線選項 雷達圖示例時間線簡介時間線語法時間線示例樹形圖簡介樹形圖語法樹形圖示例數據包圖簡介數據包圖語法1&#xff1a…

不止效率工具:AI 在文化創作中如何重構 “靈感邏輯”?

一、引言1.1 AI 創作的崛起在當今時代&#xff0c;AI 技術在文化創作領域的迅猛發展已成為不可忽視的現象。從文字創作領域中&#xff0c;AI 能夠快速生成小說、詩歌&#xff0c;一些新聞媒體也開始運用 AI 撰寫新聞稿件&#xff1b;到視覺藝術方面&#xff0c;AI 繪畫軟件能依…

軟考-系統架構設計師 專家系統(ES)詳細講解

個人博客&#xff1a;blogs.wurp.top 一、ES的核心概念與價值 1. 什么是專家系統&#xff08;ES&#xff09;&#xff1f; 專家系統是一種模擬人類專家解決特定領域問題的智能計算機程序系統。它運用特定領域內大量專家水平的知識和經驗&#xff0c;進行推理和判斷&#xff…

Vue3+TS+Element-Plus+el-tree創建樹節點

1、一級樹應用效果&#xff1a;代碼&#xff1a;MaterialCategory.vue<script setup lang"ts" name"MaterialCategory"> ...... // 創建樹&#xff08;一級樹&#xff09; const createTree (dataList: IMaterialCategory[]) > {// 將原始數據轉…

C++基礎(④鏈表反轉(鏈表 + 迭代 / 遞歸))

鏈表反轉&#xff08;鏈表 迭代 / 遞歸&#xff09; 題目描述&#xff1a;給你單鏈表的頭節點 head&#xff0c;請你反轉鏈表&#xff0c;并返回反轉后的鏈表頭節點。 示例&#xff1a;輸入鏈表 1→2→3→4→5 → 輸出 5→4→3→2→1。 思路提示&#xff1a;迭代法&#xff1a…

面向企業級產品開發的自動化腳本實戰

引言&#xff1a; 在產品開發團隊中&#xff0c;設計師、產品經理和工程師之間的協作常常伴隨著大量重復性工作&#xff1a;手動整理設計稿鏈接、更新產品需求文檔、同步項目狀態...這些工作不僅耗時&#xff0c;還容易出錯。本文將帶你編寫一個Python腳本&#xff0c;自動化這…

科技賦能生態,智慧守護農林,匯嶺生態開啟農林產業現代化新篇章

在我國&#xff0c;農林業作為國民經濟的基礎產業&#xff0c;不僅關乎國家糧食安全與生態平衡&#xff0c;更是鄉村振興戰略實施的核心領域。近年來&#xff0c;國家高度重視“三農”問題&#xff0c;大力推進鄉村振興戰略&#xff0c;強調要實現農業農村現代化&#xff0c;促…

貪心算法面試常見問題分類解析

一、貪心算法問題 1. 跳躍游戲系列 能否到達終點: def canJump(nums):max_reach = 0for i in range(len(nums)):if i > max_reach:return Falsemax_reach = max(max_reach, i + nums[i])return True 最少步數: def jump(nums):jumps = end = max_pos = 0for i in range(l…

【3D入門-指標篇上】3D 網格重建評估指標詳解與通俗比喻

一、指標對比表格指標名稱核心定義計算關鍵步驟通俗比喻典型應用場景Chamfer距離雙向平均幾何距離采樣點→計算最近鄰距離→取平均沙灘沙粒的平均距離差評估服裝輪廓、褶皺的細微差異法向量一致性表面法向量方向匹配度計算法向量點積→取絕對值→平均刺猬刺的朝向一致程度評估布…

補題報告08

題目背景某天&#xff0c;奇異博士在紐約圣所研究維山帝之書時&#xff0c;發現了連接不同多元宇宙的傳送門網絡......題目描述經研究&#xff0c;奇異博士發現每個傳送門都有固定的 “時間代價”—— 正數表示雙向通行&#xff08;往返時間代價相同均為正值&#xff09;&#…