stm32-c8t6實現語音識別(LD3320)

目錄

LD3320介紹:

功能引腳

主要特色功能

通信協議

端口信息

開發流程

stm32c8t6代碼

LD3320驅動代碼:


LD3320介紹:

  • 內置單聲道mono 16-bit A/D 模數轉換
  • 內置雙聲道stereo 16-bit D/A 數模轉換
  • 內置 20mW 雙聲道耳機放大器輸出
  • 內置 550mW 單聲道揚聲器放大器輸出
  • 支持并行接口或者 SPI 接口
  • 內置鎖相電路 PLL,輸入主控時鐘頻率為 2MHz - 34MHz
  • 工作電壓:(VDD: for internal core) 3.3V
  • 48pin 的 QFN 7*7 標準封裝
  • 省電模式耗電:1uA

功能引腳

功能引腳描述
3.3V3.3V電源正
GND電源地
MISOSPI數據輸出
MOSISPI數據輸入
SCKSPI時鐘輸入
NSS片選,低電平有效
NC懸空
RST復位
WR寫允許,低電平有效
IRQ中斷輸出,輸出下降沿

主要特色功能

LD3320 是一顆基于非特定人語音識別(SI-ASR:Speaker-Independent Automatic Speech Recognition)技術的語音識別/聲控芯片。提供了真正的單芯片語音識別解決方案。LD3320 芯片上集成了高精度的 A/D 和 D/A 接口,不再需要外接輔助的 Flash 和 RAM,即可以實現語音識別/聲控/人機對話功能。并且,識別的關鍵詞語列表是可以動態編輯的。基于 LD3320,可以在任何的電子產品中,甚至包括最簡單的 51 作為主控芯片的系統中,輕松實現語音識別/聲控/人機對話功能。為所有的電子產品增加 VUI(Voice User Interface)語音用戶操作界面。

  • 高準確度和實用的語音識別效果。
  • 非特定人語音識別技術:不需要用戶進行錄音訓練。
  • 真正單芯片解決方案:不需要任何外接的輔助 Flash 和 RAM,真正降低系統成本。
  • 內置高精度 A/D和D/A通道:不需要外接 AD 芯片,只需要把麥克風接在芯片的AD 引腳上;可以播放聲音文件,并提供 550mW 的內置放大器。
  • 支持用戶自由編輯 50 條關鍵詞語條:在同一時刻,最多在 50 條關鍵詞語中進行識別,終端用戶可以根據場景需要,隨時編輯和更新這 50 條關鍵詞語的內容。
  • 可動態編輯的識別關鍵詞語列表:只需要把識別的關鍵詞語以字符串的形式傳送進芯片,即可以在下次識別中立即生效。比如,用戶在 51 等 MCU 的編程中,簡單地通過設置芯片的寄存器,把諸如“你好”這樣的識別關鍵詞的內容動態地傳入芯片中,芯片就可以識別這樣設定的關鍵詞語了。

通信協議

讀數據:
?

Read LD3320 SPI.png


寫數據:
?

Write LD3320 SPI.png


SCS為從機片選, 僅當SCS為低電平時,芯片才會被使能。
SDI主設備數據輸出,從設備數據輸入(本模塊為從設備)。
SDO為主設備數據輸入,從設備數據輸出(本模塊為從設備)。
SDCK為SPI通信時鐘。
對于SPI通信而言,數據是有傳輸時序的,即數據的捕獲需要時鐘信號的某個邊沿觸發,而這個邊沿就是由時鐘極性(CPOL)與時鐘相位(CPHA)的組合決定的:
CPOL的高低決定串行同步時鐘的空閑狀態電平,CPOL = 0,為低電平;CPOL = 1,為高電平。
CPHA的高低決定串行同步時鐘是在第一時鐘跳變沿還是第二個時鐘跳變沿數據被采集,當CPHA = 0,在第一個跳變沿進行數據采集;CPHA = 1,在第二個跳變沿進行數據采集。
從圖中可以看出本模塊的SPI傳輸規則:SDCK空閑時是高電平在第一個邊沿時開始傳輸數據,即傳輸模式為模式二(0x10);8bit數據;按位傳輸,高位在前(MSB);另外,本模塊的SPI速度建議小于1.5MHz

  1. ?非特定人識別?
    • 無需用戶預先錄音訓練,可直接識別語音指令。
  2. ?動態關鍵詞列表?
    • 支持動態編輯最多50條關鍵詞(如“開燈”“關燈”),關鍵詞以字符串形式傳入芯片即可生效。
    • 關鍵詞長度限制:不超過10個漢字或79字節拼音串。
  3. ?硬件集成度高?
    • 內置高精度A/D和D/A轉換器,無需外接Flash、RAM或AD芯片,麥克風直連即可使用。
    • 提供550mW內置音頻放大器,支持聲音播放功能。
  4. ?多種工作模式?
    • ?口令模式?:需喚醒詞(如“小呆”)觸發后續指令,抗環境干擾能力強。
    • 普通模式/按鍵模式:直接識別或通過按鍵觸發識別。
    • ?硬件連接?
      • 典型接口:WR(寫使能)、IRQ(中斷輸出)等控制引腳3。
      • 示例:Arduino通過D8引腳控制LED,識別“開燈/關燈”指令10。
  • 軟件配置?
    • 關鍵詞添加?:通過寄存器動態寫入關鍵詞拼音(如"kai deng")310。
    • ?代碼庫支持?:提供STM32/Arduino驅動庫及示例代碼(如Voice.addCommand()函數)

端口信息

/*************端口信息********************
?* 接線說明
?LD3320接口 ?? ? ?STM32接口
?* RST ? ? ? ? ? ? ?PB6
?* CS ? ?? ? ? ? ? ?PB8
?* WR/SPIS ? ? ? ? ?PB9
?* P2/SDCK ? ? ? ? ?PB13
?* P1/SDO ? ? ? ? ? PB14
?* P0/SDI ? ? ? ? ? PB15
?* IRQ ? ? ? ? ? ? ?PA3 ? ? ? ? ? ? ??
?* A0?? ??? ? ? ? ?PB7
?* RD ? ? ? ? ? ? ? PA0

*****************************************/

LED PB12

?
#define LED_KT PBout(12) //客廳燈引腳口
#define LED_WS PBout(0) //臥室燈引腳口
#define JDY_FS PBout(1) //控制繼電器風扇引腳口

開發流程

// Arduino示例(控制LED)  
#include <ld3320.h>  
VoiceRecognition Voice;  
#define Led 8  void setup() {  pinMode(Led, OUTPUT);  Voice.init();  Voice.addCommand("kai deng", 0); // 添加指令"開燈",標簽0  Voice.addCommand("guan deng", 1); // 添加指令"關燈",標簽1  Voice.start();  
}  void loop() {  switch(Voice.read()) {  case 0: digitalWrite(Led, HIGH); break; // 開燈  case 1: digitalWrite(Led, LOW); break;  // 關燈  }  
}  

stm32c8t6代碼

/*************???úD??¢********************* ?ó???μ?÷LD3320?ó?ú 	  STM32?ó?ú* RST              PB6* CS   	        PB8* WR/SPIS          PB9* P2/SDCK          PB13* P1/SDO           PB14* P0/SDI           PB15* IRQ              PA3               * A0		        PB7* RD               PA0#define LED_KT PBout(12) //?íìüμ?òy???ú   
#define LED_WS PBout(0) //??êòμ?òy???ú
#define JDY_FS PBout(1) //?????ìμ??÷·?éèòy???ú*****************************************/#include "system.h"
#include "SysTick.h"
#include "variable.h"
#include "usart.h"
#include "spi.h"
#include "led.h"
#include "timer.h"
#include "LDchip.h"
#include <stdio.h>volatile float mm=0; extern void  LD3320_main(void);
int main()
{  	Systick_Init(72);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);USART1_Init(115200);//TIM3_Int_Init(5000-1,72-1);TIM4_Int_Init(999,72-1);LED_Init();//TIM_Cmd(TIM3,ENABLE);TIM_Cmd(TIM4,ENABLE);printf("3?ê??ˉíê3é\r\n");LD3320_main();		//LD3320 ?÷oˉêyoˉêywhile(1){TimerTreat();ledshow();}
}

LD3320驅動代碼:


#include "LDchip.h"
#include "Reg_RW.h"
#include "system.h"
#include "SysTick.h"
#include "usart.h"
#include <stdio.h>
#include "led.h"
/*************???úD??¢********************* ?ó???μ?÷LD3320?ó?ú 	  STM32?ó?ú* RST              PB6* CS   	        PB8* WR/SPIS          PB9* P2/SDCK          PB13* P1/SDO           PB14* P0/SDI           PB15* IRQ              PA3* A0		        PB7* RD               PA0*****************************************//************************************************************************************
//	nAsrStatus ó?à′?úmain?÷3ìDò?D±íê?3ìDò??DDμ?×′ì?£?2?ê?LD3320D????ú2?μ?×′ì???′??÷
//	LD_ASR_NONE:		±íê???óD?ú×÷ASRê?±e
//	LD_ASR_RUNING£o		±íê?LD3320?y?ú×÷ASRê?±e?D
//	LD_ASR_FOUNDOK:		±íê?ò?′?ê?±eá÷3ì?áê?oó£?óDò???ê?±e?á1?
//	LD_ASR_FOUNDZERO:	±íê?ò?′?ê?±eá÷3ì?áê?oó£???óDê?±e?á1?
//	LD_ASR_ERROR:		±íê?ò?′?ê?±eá÷3ì?DLD3320D????ú2?3???2??yè·μ?×′ì?
*********************************************************************************/uint8 nAsrStatus=0;	
void LD3320_Init(void);
uint8 RunASR(void);
void ProcessInt0(void);
void LD3320_EXTI_Cfg(void);
void LD3320_Spi_cfg(void);
void LD3320_GPIO_Cfg(void);
void LED_gpio_cfg(void);
static void Board_text(uint8 Code_Val);
extern void PrintComBit(USART_TypeDef* USARTx, uint8_t Data);
/***********************************************************
* ??    3?£o LD3320_main(void)
* 1|    ?ü£o ?÷oˉêyLD33203ìDòè??ú
* è??ú2?êy£o  
* 3??ú2?êy£o
* ?μ    ?÷£o
* μ÷ó?·?·¨£o 
**********************************************************/ 
void  LD3320_main(void)
{uint8 nAsrRes=0;LD3320_Init();	  while(1){switch(nAsrStatus){case LD_ASR_RUNING:case LD_ASR_ERROR:		break;case LD_ASR_NONE:nAsrStatus=LD_ASR_RUNING;if (RunASR()==0)	//	???ˉò?′?ASRê?±eá÷3ì£oASR3?ê??ˉ£?ASRìí?ó1??ü′êó?£????ˉASR????{		nAsrStatus = LD_ASR_ERROR;}break;case LD_ASR_FOUNDOK:nAsrRes = LD_GetResult( );	//ê?±e3é1|×??ˉ ??è?ê?±e??,ê?±e???úLDChip.h???t?D£?×?DD?¨ò?μ?êy?Y										 									PrintComBit(USART1,nAsrRes ); //′??úê?3?ê?±e??								//Board_text(nAsrRes );//?a·¢°?2aê??Yê?2?·?---??ê?±e??μ???DD?D??×?3??ˉ×÷ (ó??§òà?éò?ìí?ó×??oμ?1|?ü£?àyè?????IO?úê?3?£?′??úêy?Yê?3?μè)		nAsrStatus = LD_ASR_NONE;break;case LD_ASR_FOUNDZERO:default: nAsrStatus = LD_ASR_NONE;break;}//switch	//?a·¢°?2aê?Board_text(nAsrRes );}// while
}static void Board_text(uint8 Code_Val)
{																					 switch(Code_Val)  //???á1??′DD?à1?2ù×÷{case CODE_DD:	//?üá??°′ò?a?íìüμ??±LED_KT=1;printf("′ò?a?íìüμ?\r\n");break;case CODE_GD:		//?üá??°1?±??íìüμ??±LED_KT=0;printf("1?±??íìüμ?\r\n");break;case CODE_QDD:		//?üá??°′ò?a??êòμ??±//′ò?a??êòμ?LED_WS = 1;printf("′ò?a??êòμ?\r\n");break;case CODE_DG:		//?üá??°1?±???êòμ??±//1?±???êòμ?LED_WS = 0;printf("1?±???êòμ?\r\n");break;case CODE_LSD:		//?üá??°è?2?′ò?a?±//è?2?′ò?aLED_KT=1;LED_WS = 1;printf("è?2?′ò?a\r\n");break;case CODE_SSD:		//?üá??°è?2?1?±??±//è?2?1?±?LED_KT=0;  LED_WS = 0;printf("è?2?1?±?\r\n");break;case CODE_DDR:		//?üá??°′ò?a·?éè?±//′ò?a·?éèprintf("′ò?a·?éè\r\n");JDY_FS = 0;break;case CODE_RDD:		//?üá??°1?±?·?éè?±//1?±?·?éèJDY_FS = 1;printf("1?±?·?éè\r\n");break;default:break;}	
}
/***********************************************************
* ??    3?£oLD3320_Init(void)
* 1|    ?ü£o?£?é?y?ˉ???ú3?ê?????
* è??ú2?êy£o  
* 3??ú2?êy£o
* ?μ    ?÷£o
* μ÷ó?·?·¨£o 
**********************************************************/ 
void LD3320_Init(void)
{LD3320_GPIO_Cfg();	LD3320_EXTI_Cfg();LD3320_Spi_cfg();	 LD_reset();}
/***********************************************************
* ??    3?£o	RunASR(void)
* 1|    ?ü£o	??DDASR
* è??ú2?êy£o  
* 3??ú2?êy£o
* ?μ    ?÷£o
* μ÷ó?·?·¨£o 
**********************************************************/ 
uint8 RunASR(void)
{uint8 i=0;uint8 asrflag=0;for (i=0; i<5; i++)			//	·à?1óéóúó2?t?-òòμ???LD3320D???1¤×÷2??y3££??ùò?ò?123¢ê?5′????ˉASRê?±eá÷3ì{LD_AsrStart();			//3?ê??ˉASRLD3320_delay(100);if (LD_AsrAddFixed()==0)	//ìí?ó1??ü′êó?μ?LD3320D????D{LD_reset();			//	LD3320D????ú2?3???2??y3££?á¢?′????LD3320D???LD3320_delay(50);			//	2¢′ó3?ê??ˉ?aê???D?ASRê?±eá÷3ìcontinue;}LD3320_delay(10);if (LD_AsrRun() == 0){LD_reset();			//	LD3320D????ú2?3???2??y3££?á¢?′????LD3320D???LD3320_delay(50);			//	2¢′ó3?ê??ˉ?aê???D?ASRê?±eá÷3ìcontinue;}asrflag=1;break;					//	ASRá÷3ì???ˉ3é1|£?í?3?μ±?°for?-?·?£?aê?μè′yLD3320?í3?μ??D??D?o?}return asrflag;
}/***********************************************************
* ??    3?£o void Delay_( int i)
* 1|    ?ü£o ?ì?óê±
* è??ú2?êy£o  
* 3??ú2?êy£o
* ?μ    ?÷£o
* μ÷ó?·?·¨£o 
**********************************************************/ 
void Delay_( int i){     while( i--){	}}	
/***********************************************************
* ??    3?£o	LD3320_delay(unsigned long uldata)
* 1|    ?ü£o	3¤?óê±oˉêy
* è??ú2?êy£o  
* 3??ú2?êy£o
* ?μ    ?÷£o
* μ÷ó?·?·¨£o 
**********************************************************/ void  LD3320_delay(unsigned long uldata)
{unsigned int j  =  0;unsigned int g  =  0;for (j=0;j<5;j++){for (g=0;g<uldata;g++){Delay_(120);}}
}/***********************************************************
* ??    3?£oLD3320_GPIO_Cfg(void)
* 1|    ?ü£o3?ê??ˉDèòaó?μ?μ?IO?ú
* è??ú2?êy£o  
* 3??ú2?êy£o
* ?μ    ?÷£o
* μ÷ó?·?·¨£o 
**********************************************************/ 
void LD3320_GPIO_Cfg(void)
{	GPIO_InitTypeDef GPIO_InitStructure;// ????PA8 ê?3?	 8M 2¨D?	//?¨ò?RST/A0/CS/WR???ú{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB ,ENABLE);//LD_CS	/RSETGPIO_InitStructure.GPIO_Pin =GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_SetBits(GPIOB,GPIO_Pin_7);	/*A0??è?à-??*/}
}
/***********************************************************
* ??    3?£oLD3320_Spi_cfg(void)
* 1|    ?ü£o????SPI1|?üoí???ú3?ê??ˉ
* è??ú2?êy£o  
* 3??ú2?êy£o
* ?μ    ?÷£o
* μ÷ó?·?·¨£o 
**********************************************************/ 
void LD3320_Spi_cfg(void)
{GPIO_InitTypeDef GPIO_InitStructure;SPI_InitTypeDef  SPI_InitStructure;RCC_APB2PeriphClockCmd(	RCC_APB2Periph_GPIOB, ENABLE );//PORTBê±?óê1?ü RCC_APB1PeriphClockCmd(	RCC_APB1Periph_SPI2,  ENABLE );//SPI2ê±?óê1?ü 	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //PB13/14/15?′ó?í?íìê?3? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);LD_CS_H();GPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);  //PB13/14/15é?à-SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //éè??SPIμ¥?ò?ò?????òμ?êy?Y?£ê?:SPIéè???a???????òè???1¤SPI_InitStructure.SPI_Mode = SPI_Mode_Master;		//éè??SPI1¤×÷?£ê?:éè???a?÷SPISPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;		//éè??SPIμ?êy?Y′óD?:SPI·¢?í?óê?8?????á11SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;		//????á?′?DDê±?óμ??èì?:ê±?óDü????SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;	//êy?Y2???óúμú?t??ê±?ó??SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;		//NSSD?o?óéó2?t£¨NSS1ü??£??1ê?èí?t£¨ê1ó?SSI??£?1üàí:?ú2?NSSD?o?óDSSI??????SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;		//?¨ò?2¨ì??ê?¤·??μμ??μ:2¨ì??ê?¤·??μ?μ?a16SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;	//???¨êy?Y′?ê?′óMSB???1ê?LSB???aê?:êy?Y′?ê?′óMSB???aê?SPI_InitStructure.SPI_CRCPolynomial = 7;	//CRC?μ????μ??à??ê?SPI_Init(SPI2, &SPI_InitStructure);  //?ù?YSPI_InitStruct?D???¨μ?2?êy3?ê??ˉíaéèSPIx??′??÷SPI_Cmd(SPI2, ENABLE); //ê1?üSPIíaéè
}
/***********************************************************
* ??    3?£o LD3320_EXTI_Cfg(void) 
* 1|    ?ü£o ía2??D??1|?ü????oí?à1????ú????
* è??ú2?êy£o  
* 3??ú2?êy£o
* ?μ    ?÷£o
* μ÷ó?·?·¨£o 
**********************************************************/ 
void LD3320_EXTI_Cfg(void)
{EXTI_InitTypeDef EXTI_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;//?¨ò?IRQ?D??òy??????RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin =GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);//ía2??D????????GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource3);EXTI_InitStructure.EXTI_Line = EXTI_Line3;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);EXTI_GenerateSWInterrupt(EXTI_Line3);GPIO_SetBits(GPIOA,GPIO_Pin_3);	 //??è?à-???D??òy??EXTI_ClearFlag(EXTI_Line3);EXTI_ClearITPendingBit(EXTI_Line3);//?D????ì×????NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
}/***********************************************************
* ??    3?£o  EXTI1_IRQHandler(void)
* 1|    ?ü£o ía2??D??oˉêy
* è??ú2?êy£o  
* 3??ú2?êy£o
* ?μ    ?÷£o
* μ÷ó?·?·¨£o 
**********************************************************/ 
void EXTI3_IRQHandler(void)
{if(EXTI_GetITStatus(EXTI_Line3)!= RESET ) {ProcessInt0();EXTI_ClearFlag(EXTI_Line3);EXTI_ClearITPendingBit(EXTI_Line3);}
}

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

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

相關文章

RAG技術全解析:從概念到實踐,構建高效語義檢索系統——嵌入模型與向量數據庫搭建指南

一、RAG技術概述&#xff1a;為什么需要RAG&#xff1f; 1.1 什么是RAG&#xff1f; RAG&#xff08;Retrieval-Augmented Generation&#xff09;是一種結合檢索與生成能力的AI架構。其核心思想是通過外部知識庫動態增強大語言模型&#xff08;LLM&#xff09;的生成能力&…

【資源分享】手機玩轉經典游戲!小雞模擬器1.9.0:PSP/NDS/GBA完美運行!

阿燦今天給大家推薦一款小雞模擬器&#xff0c;這是一個老款PC和掌上游戲機模擬器。完美模擬街機&#xff08;fbamamemameplus).PS、PSP、FC(NES)SFC(SNES)、GBA、GBC、MD、NDS、DC、NGP、WS (WSC) PCE、ONS 等18款經典掌機游戲機。小雞模擬器同時也提供海量熱門的漢化版游戲免…

matlab脈沖信號并繪制波形2025.6.11

以下是一個使用MATLAB生成5V、10MHz脈沖信號并繪制波形的示例代碼: % 5V 10MHz脈沖信號仿真 clc; clear; close all; % 參數設置 voltage = 5; % 信號幅度(V) frequency = 10e6; % 脈沖頻率(10MHz) duty_cycle =

ElasticJob初探

依賴版本 JDK版本是&#xff1a;jdk17 springboot版本 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.4</version></parent>zookeeper elasticjo…

【Vue3】(三)vue3中的pinia狀態管理、組件通信方式及總結、插槽

目錄 一、vue3的pinia 1、什么是pinia&#xff1f; 2、為什么Vue3選擇pinia&#xff1f; 3、使用pinia的好處 4、安裝pinia 2、項目配置 3、存儲/讀取pinia中的數據 4、修改pinia中的數據 5、storeToRefs&#xff08;保持store中數據的響應式&#xff09; 6、getters 7、…

WEB3全棧開發——面試專業技能點P1Node.js / Web3.js / Ethers.js

一、Node.js 事件循環 Node.js 的事件循環&#xff08;Event Loop&#xff09;是其異步編程的核心機制&#xff0c;它使得 Node.js 可以在單線程中實現非阻塞 I/O 操作。 &#x1f501; 簡要原理 Node.js 是基于 libuv 實現的&#xff0c;它使用事件循環來處理非阻塞操作。事件…

大數據學習棧記——Neo4j的安裝與使用

本文介紹圖數據庫Neofj的安裝與使用&#xff0c;操作系統&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安裝 Neofj可以進行官網安裝&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我這里安裝是添加軟件源的方法 最新版…

web架構4------(nginx常用變量,nginx中英文自動匹配,lnmp網站架構,正向代理,反向代理,負載均衡)

一.前言 本期來介紹nginx最后幾個知識點&#xff0c;看著要說的內容很多&#xff0c;其實一點也不多&#xff0c;都是所見即所得的東西。 二.nginx常用變量 2.1 常用變量 $args 請求中的參數&#xff0c;也叫查詢參數&#xff0c;如www.123.com/1.php?a1&b2的$args就是…

openeuler系統(CentOs)圖形化桌面黑屏/丟失(開啟VNC服務沖突)

1. VNC服務開啟如下&#xff1a; https://zhuanlan.zhihu.com/p/5049263261 在centos8系統上使用tigervnc-server搭建VNC_centos8 tigervnc-server-CSDN博客 2. 上述操作完成后&#xff0c;連接VNC仍會出現黑屏&#xff0c;則需要編輯/root/.vnc/xstartup&#xff1a; [運維…

MySQL:Prepared Statement 預處理語句

預處理語句&#xff08;Prepared Statements&#xff09;是 MySQL 中一種用于執行 SQL 查詢的高效、安全的方法。通過使用預處理語句&#xff0c;可以顯著提升查詢性能&#xff0c;并防止 SQL 注入攻擊。本文將詳細介紹 MySQL 預處理語句的概念、使用方法及其優勢。 一、預處理…

EPPLUS——CAD c#讀寫EXCEL的第三方庫

EPPLUS(可支持NET35) 在 CAD 的 C# 二次開發中&#xff0c;使用 EPPLUS 庫處理 Excel 文件具有以下顯著優點&#xff0c;尤其在兼容性、便捷性和性能等方面契合 CAD 項目的需求&#xff1a; 1. 跨.NET 版本兼容性強&#xff0c;適配 CAD 多環境部署 多框架支持&#xff1a;EP…

Linux知識回顧總結----進程狀態

本章將會介紹進程的一些概念&#xff1a;馮諾伊曼體系結構、進程是什么&#xff0c;怎么用、怎么表現得、進程空間地址、物理地址、虛擬地址、為什么存在進程空間地址、如何感性得去理解進程空間地址、環境變量是如何使用的。 目錄 1. 馮諾伊曼體系結構 1.1 是什么 1.2 結論 …

微信小程序之bind和catch

這兩個呢&#xff0c;都是綁定事件用的&#xff0c;具體使用有些小區別。 官方文檔&#xff1a; 事件冒泡處理不同 bind&#xff1a;綁定的事件會向上冒泡&#xff0c;即觸發當前組件的事件后&#xff0c;還會繼續觸發父組件的相同事件。例如&#xff0c;有一個子視圖綁定了b…

Android Test3 獲取的ANDROID_ID值不同

Android Test3 獲取的ANDROID_ID值不同 這篇文章來說明上一篇文章中說到的一個現象&#xff1a;在同一個項目中&#xff0c;創建不同的 app module&#xff0c;運行同一段測試代碼&#xff0c;獲取到的 ANDROID_ID 的值不同。 我也是第一次認真研究這個現象&#xff0c;這個還…

JSON 和 LabVIEW Data Types 互相轉換

使用JSONtext C:\Program Files (x86)\National Instruments\LabVIEW 2021\examples\JDP Science\JSONtext JSONtext LabVIEW Data Types.vi

docker和docker-compose的版本對應關系怎么看?

docker和docker-compose的版本對應關系怎么看&#xff1f;最近在安裝這兩個工具&#xff0c;像知道他們的版本對應關系&#xff0c;查了不少資料才找到。 雖然 Docker 和 Docker Compose 的版本并不嚴格綁定&#xff0c;但是在某些情況下&#xff0c;新版本的 Docker Compose …

郵科ODM攝像頭:多維度護航高鐵安全系統方案解析

?高鐵作為現代交通的重要支柱&#xff0c;其安全穩定運行依賴于高效的監控體系。攝像頭系統作為高鐵安全管理的“視覺感知中樞”&#xff0c;憑借多場景覆蓋、智能分析以及環境適應性設計&#xff0c;在行車安全、設備維護、乘客服務等方面發揮著不可或缺的作用。本文將從技術…

盒模型小全

CSS盒子模型詳解 1. 定義 CSS盒子模型是用于描述HTML元素在頁面中布局和表現的核心概念之一。在CSS中&#xff0c;所有HTML元素都被視為一個矩形的盒子&#xff0c;這些盒子封裝了周圍的HTML元素&#xff0c;并允許在其他元素和周圍元素邊框之間的空間放置內容。 2. 組成部分…

自定義鼠標效果 - 瀏覽器擴展使用教程

自定義鼠標效果 - 瀏覽器擴展使用教程 這里寫目錄標題 自定義鼠標效果 - 瀏覽器擴展使用教程功能特點安裝方法Chrome/Edge瀏覽器 使用指南1. 更改鼠標光標樣式2. 啟用鼠標軌跡效果3. 自定義軌跡效果點狀/彩虹/漸隱軌跡&#xff1a;表情軌跡&#xff1a; 管理自定義光標支持的文…

基于SpringBoot實現的課程答疑系統設計與實現【源碼+文檔】

基于SpringBootVue實現的課程答疑系統采用前后端分離架構方式&#xff0c;系統設計了管理員、學生、老師三種角色&#xff0c;系統實現了用戶登錄與注冊、個人中心、學生管理、老師管理、科目類型管理、學生問題管理、老師回答管理、老師信息管理、關注列表管理、交流區、輪播圖…