ADC 的音頻實驗,無線收發模塊( nRF24L01)

nRF24L01 采用 QFN20 封裝,有 20 個引腳,以下是各引腳的詳細介紹:
1. 電源引腳
? VDD:電源輸入端,一般接 + 3V 電源,為芯片提供工作電壓,供電電壓范圍為 1.9V~3.6V。
? VSS:電源地引腳,接地,為芯片提供電氣參考電位。
? VDD_PA:為功率放大器供電,輸出為 1.8V,給射頻功率放大器提供所需的電源。
? DVDD:去耦電路電源正極端,用于連接去耦電容,為芯片內部電路提供穩定的電源。
2. SPI 接口引腳
? CSN:SPI 片選信號引腳,低電平有效。當 CSN 為低電平時,芯片被選中,微處理器可以通過 SPI 接口對 nRF24L01 進行配置和數據傳輸。
? SCK:SPI 時鐘引腳,用于同步 SPI 數據傳輸,由微處理器提供時鐘信號,決定數據傳輸的速率和時序。
? MOSI:主設備輸出從設備輸入引腳,微處理器通過該引腳將數據發送到 nRF24L01 芯片中,進行寄存器配置、發送數據等操作。
? MISO:主設備輸入從設備輸出引腳,nRF24L01 通過該引腳將數據返回給微處理器,如返回寄存器的值、接收的數據等。
3. 控制與狀態引腳
? CE:使能發射或接收引腳,數字輸入。在 CSN 為低的情況下,CE 協同 CONFIG 寄存器共同決定 nRF24L01 的狀態,用于選擇芯片的工作模式,如發射模式、接收模式、待機模式等。
? IRQ:中斷標志位引腳,數字輸出,低電平觸發。當狀態寄存器中 TX_DS(數據發送完成中斷位)、RX_DR(接收數據中斷位)或 MAX_RT(達到最多次重發中斷位)為高時觸發中斷,通知微處理器進行相應的處理。
4. 晶體振蕩器引腳
? XC2:晶體振蕩器 2 腳,模擬輸出,用于連接外部晶體振蕩器的一端,與 XC1 共同構成晶體振蕩電路,為芯片提供時鐘信號。
? XC1:晶體振蕩器 1 腳 / 外部時鐘輸入腳,模擬輸入,可連接外部晶體振蕩器的另一端,也可以作為外部時鐘信號的輸入引腳。
5. 天線接口引腳
? ANT1:天線接口 1,用于連接天線,實現射頻信號的發射和接收。
? ANT2:天線接口 2,同樣用于連接天線,與 ANT1 共同作用,提高射頻信號的傳輸性能。
6. 參考電流輸入引腳
? IREF:參考電流輸入引腳,模擬輸入,用于輸入參考電流,為芯片內部的電路提供基準電流。

  1. ADC 配置

/* ADC 及引腳 定義 */

#define ADC_ADCX_CHY_GPIO_PORT GPIOA

#define ADC_ADCX_CHY_GPIO_PIN GPIO_PIN_5

#define ADC_ADCX_CHY_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOC_CLK_ENABLE();\

}while(0) /* PA 口時鐘使能 */

#define ADC_ADCX ADC1

#define ADC_ADCX_CHY ADC_CHANNEL_5 /* 通道 Y, 0 <= Y <= 16 */

/* ADC1 時鐘使能 */

#define ADC_ADCX_CHY_CLK_ENABLE() do{ __HAL_RCC_ADC1_CLK_ENABLE();}while(0)

ADC_HandleTypeDef hadc;

void ADC_Init(void)

{

????????__HAL_RCC_ADC1_CLK_ENABLE();// 使能ADC時鐘

????// ?配置ADC結構體參數

????hadc.Instance = ADC1; ?// 選擇使用ADC1,

hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;

????// 時鐘預分頻,這里將APB2時鐘(PCLK)除以4作為ADC時鐘,

hadc.Init.Resolution = ADC_RESOLUTION_12B; // 分辨率設置為12位,這意味著ADC轉換結果的范圍是0 - 4095

hadc.Init.ScanConvMode = DISABLE; // 禁用掃描模式,因為我們只處理單個通道

hadc.Init.ContinuousConvMode = ENABLE;

// 啟用連續轉換模式,ADC會不斷進行轉換,而不是只進行一次

hadc.Init.DiscontinuousConvMode = DISABLE; // 禁用不連續轉換模式

hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;

// 不使用外部觸發轉換,即采用軟件觸發

?hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START; // 軟件觸發ADC轉換

hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT; // 數據右對齊,轉換結果的低12位有效

hadc.Init.NbrOfConversion = 1; // 轉換通道數量為1

hadc.Init.DMAContinuousRequests = DISABLE; // 禁用DMA連續請求,這里不使用DMA傳輸

hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV; // 單個轉換結束標志

????// 3. 初始化ADC

if (HAL_ADC_Init(&hadc) != HAL_OK)

????{

????????Error_Handler();// 初始化失敗處理

????}

????ADC_ChannelConfTypeDef sConfig;// 4. 配置ADC通道

sConfig.Channel = ADC_CHANNEL_0; ?// 選擇ADC通道0,可根據實際連接的引腳修改

????sConfig.Rank = 1; // 通道轉換順序為第1個

????sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;

????// 采樣時間設置為3個ADC時鐘周期,可根據需要調整

????if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)

????{

????????????????Error_Handler();// 通道配置失敗處理

????}

}

// 錯誤處理函數示例

void Error_Handler(void)

{

????while (1)

????{

????????// 可以添加錯誤提示代碼,如點亮LED等

????}

}

音頻信號采集,模擬信號轉換為數字信號

uint16_t adc_value;

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)

{

????if (hadc->Instance == ADC1)

????{

????????adc_value = HAL_ADC_GetValue(hadc);

????????// 在這里可以對采集到的數字音頻信號進行進一步處理

GPIO_InitTypeDef gpio_init_struct;

ADC_ADCX_CHY_CLK_ENABLE(); /* 使能 ADCx 時鐘 */

ADC_ADCX_CHY_GPIO_CLK_ENABLE(); /* 開啟 GPIO 時鐘 */

/* AD 采集引腳模式設置,模擬輸入 */

gpio_init_struct.Pin = ADC_ADCX_CHY_GPIO_PIN;

gpio_init_struct.Mode = GPIO_MODE_ANALOG;

gpio_init_struct.Pull = GPIO_PULLUP;

HAL_GPIO_Init(ADC_ADCX_CHY_GPIO_PORT, &gpio_init_struct);

????}

}

編碼與調制

#include "nrf24l01.h"

void ASK_Modulate(uint16_t data)

{

????// 將數字信號轉換為適合ASK調制的形式,例如0對應低電平,非0對應高電平

????uint8_t modulated_data = (data == 0)? 0 : 1;

????// 發送調制后的數據到nRF24L01

????NRF24L01_TxPacket(&modulated_data);

}

無線傳輸

#include "stm32f4xx_hal.h"

#include "nrf24l01.h"

// 定義nRF24L01相關引腳

#define NRF24L01_CE_Pin GPIO_PIN_0

#define NRF24L01_CE_GPIO_Port GPIOA

#define NRF24L01_CSN_Pin GPIO_PIN_1

#define NRF24L01_CSN_GPIO_Port GPIOA

#define NRF24L01_IRQ_Pin GPIO_PIN_2

#define NRF24L01_IRQ_GPIO_Port GPIOA

// 定義SPI句柄

extern SPI_HandleTypeDef hspi1;

// 初始化nRF24L01相關GPIO引腳

static void NRF24L01_GPIO_Init(void)

{

????GPIO_InitTypeDef GPIO_InitStruct

= {0};

????__HAL_RCC_GPIOA_CLK_ENABLE();

????// 配置CE引腳

????GPIO_InitStruct

.Pin = NRF24L01_CE_Pin;

????GPIO_InitStruct

.Mode = GPIO_MODE_OUTPUT_PP;

????GPIO_InitStruct

.Pull = GPIO_NOPULL;

????GPIO_InitStruct

.Speed = GPIO_SPEED_FREQ_LOW;

????HAL_GPIO_Init(NRF24L01_CE_GPIO_Port, &GPIO_InitStruct);

????// 配置CSN引腳

????GPIO_InitStruct

.Pin = NRF24L01_CSN_Pin;

????GPIO_InitStruct

.Mode = GPIO_MODE_OUTPUT_PP;

????GPIO_InitStruct

.Pull = GPIO_NOPULL;

????GPIO_InitStruct

.Speed = GPIO_SPEED_FREQ_LOW;

????HAL_GPIO_Init(NRF24L01_CSN_GPIO_Port, &GPIO_InitStruct);

????// 配置IRQ引腳

????GPIO_InitStruct

.Pin = NRF24L01_IRQ_Pin;

????GPIO_InitStruct

.Mode = GPIO_MODE_INPUT;

????GPIO_InitStruct

.Pull = GPIO_NOPULL;

????HAL_GPIO_Init(NRF24L01_IRQ_GPIO_Port, &GPIO_InitStruct);

????// 初始化CE和CSN引腳電平

????HAL_GPIO_WritePin(NRF24L01_CE_GPIO_Port, NRF24L01_CE_Pin, GPIO_PIN_RESET);

????HAL_GPIO_WritePin(NRF24L01_CSN_GPIO_Port, NRF24L01_CSN_Pin, GPIO_PIN_SET);

}

// 向nRF24L01寫寄存器

static void NRF24L01_Write_Reg(uint8_t reg, uint8_t value)

{

????HAL_GPIO_WritePin(NRF24L01_CSN_GPIO_Port, NRF24L01_CSN_Pin, GPIO_PIN_RESET);

????HAL_SPI_Transmit(&hspi1, ?, 1, 100);

????HAL_SPI_Transmit(&hspi1, &value, 1, 100);

????HAL_GPIO_WritePin(NRF24L01_CSN_GPIO_Port, NRF24L01_CSN_Pin, GPIO_PIN_SET);

}

// 從nRF24L01讀寄存器

static uint8_t NRF24L01_Read_Reg(uint8_t reg)

{

????uint8_t value;

????HAL_GPIO_WritePin(NRF24L01_CSN_GPIO_Port, NRF24L01_CSN_Pin, GPIO_PIN_RESET);

????HAL_SPI_Transmit(&hspi1, ?, 1, 100);

????HAL_SPI_Receive(&hspi1, &value, 1, 100);

????HAL_GPIO_WritePin(NRF24L01_CSN_GPIO_Port, NRF24L01_CSN_Pin, GPIO_PIN_SET);

????return value;

}

// 初始化nRF24L01

void NRF24L01_Init(void)

{

????// 初始化相關GPIO引腳

????NRF24L01_GPIO_Init();

????// 延時一段時間等待nRF24L01上電穩定

????HAL_Delay(100);

????// 配置為發射模式(可根據需要修改為接收模式)

????NRF24L01_Write_Reg(NRF24L01_REG_CONFIG, 0x0E); // 使能CRC,2字節CRC校驗,上電,發射模式

????// 設置通道頻率

????NRF24L01_Write_Reg(NRF24L01_REG_RF_CH, 0x40); // 通道76

????// 設置數據速率和發射功率

????NRF24L01_Write_Reg(NRF24L01_REG_RF_SETUP, 0x0F); // 2Mbps速率,最大發射功率

????// 設置接收地址寬度

????NRF24L01_Write_Reg(NRF24L01_REG_SETUP_AW, 0x03); // 5字節地址寬度

????// 設置自動重發時間和次數

????NRF24L01_Write_Reg(NRF24L01_REG_SETUP_RETR, 0x1A); // 自動重發延遲500us,重發次數10次

????// 設置接收通道0地址

????uint8_t rx_addr_p0[5] = {0xE7, 0xE7, 0xE7, 0xE7, 0xE7};

????HAL_GPIO_WritePin(NRF24L01_CSN_GPIO_Port, NRF24L01_CSN_Pin, GPIO_PIN_RESET);

????HAL_SPI_Transmit(&hspi1, (uint8_t *)&NRF24L01_CMD_WRITE_REG + NRF24L01_REG_RX_ADDR_P0, 1, 100);

????HAL_SPI_Transmit(&hspi1, rx_addr_p0, 5, 100);

????HAL_GPIO_WritePin(NRF24L01_CSN_GPIO_Port, NRF24L01_CSN_Pin, GPIO_PIN_SET);

????// 設置發射地址

????uint8_t tx_addr[5] = {0xE7, 0xE7, 0xE7, 0xE7, 0xE7};

????HAL_GPIO_WritePin(NRF24L01_CSN_GPIO_Port, NRF24L01_CSN_Pin, GPIO_PIN_RESET);

????HAL_SPI_Transmit(&hspi1, (uint8_t *)&NRF24L01_CMD_WRITE_REG + NRF24L01_REG_TX_ADDR, 1, 100);

????HAL_SPI_Transmit(&hspi1, tx_addr, 5, 100);

????HAL_GPIO_WritePin(NRF24L01_CSN_GPIO_Port, NRF24L01_CSN_Pin, GPIO_PIN_SET);

????// 設置接收通道0數據長度

????NRF24L01_Write_Reg(NRF24L01_REG_RX_PW_P0, 1); // 1字節數據長度

????// 清除中斷標志

????NRF24L01_Write_Reg(NRF24L01_REG_STATUS, 0x70);

}int main(void)

{

????// 初始化ADC、nRF24L01等

????ADC_Init();

????NRF24L01_Init();

????while (1)

????{

????????// 啟動ADC轉換

????????HAL_ADC_Start_IT(&hadc);

????????// 等待ADC轉換完成,在中斷中獲取adc_value

????????// 對采集到的音頻數據進行編碼和ASK調制并發送

????????ASK_Modulate(adc_value);

????}

}

DAC 實驗數模轉換器

typedef struct

{

?DAC_TypeDef *Instance; /* DAC 寄存器基地址 */

?__IO HAL_DAC_StateTypeDef State; /* DAC 工作狀態 */

?HAL_LockTypeDef Lock; /* DAC 鎖定對象 */

?DMA_HandleTypeDef *DMA_Handle1; /* 通道 1 的 DMA 處理句柄指針 */

?DMA_HandleTypeDef *DMA_Handle2; /* 通道 2 的 DMA 處理句柄指針 */

?__IO uint32_t ErrorCode; /* DAC 錯誤代碼 */

} DAC_HandleTypeDef;

typedef struct

{

??uint32_t Trigger; ????//指定DAC觸發源

DAC_TRIGGER_NONE:不使用觸發源,通過軟件觸發。

DAC_TRIGGER_T6_TRGO:使用定時器 6 的觸發輸出(TRGO)作為觸發源。

DAC_TRIGGER_T3_TRGO:使用定時器 3 的觸發輸出(TRGO)作為觸發源。

??uint32_t OutputBuffer; ?//指定DAC輸出緩沖狀態

DAC_OUTPUTBUFFER_ENABLE:使能輸出緩沖,提高輸出驅動能力。

DAC_OUTPUTBUFFER_DISABLE:禁用輸出緩沖。

} DAC_InitTypeDef;

MSP 初始化函數 HAL_DAC_MspInit,

void HAL_DAC_MspInit(DAC_HandleTypeDef* hdac);

DAC 的通道參數初始化函數:

HAL_StatusTypeDef HAL_DAC_ConfigChannel(DAC_HandleTypeDef *hdac,

DAC_ChannelConfTypeDef *sConfig, uint32_t Channel);

typedef struct

{

?uint32_t DAC_Trigger; /* DAC 觸發源的選擇 */

?uint32_t DAC_OutputBuffer; /* 啟用或者禁用 DAC 通道輸出緩沖區 */

} DAC_ChannelConfTypeDef;

使能啟動 DAC 轉換通道函數,

HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef *hdac, uint32_t Channel);

DAC 的通道輸出值函數,其聲明如下:

HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef *hdac, uint32_t Channel,

uint32_t Alignment, uint32_t Data);

Channel選擇輸出通道, DAC_CHANNEL_1或DAC_CHANNEL_2

DAC 讀取通道輸出值函數:

uint32_t HAL_DAC_GetValue(DAC_HandleTypeDef *hdac, uint32_t Channel);

啟動 DAC 使用 DMA 方式傳輸函數,

HAL_StatusTypeDef HAL_DAC_Start_DMA(DAC_HandleTypeDef *hdac, uint32_t Channel,

uint32_t *pData, uint32_t Length, uint32_t Alignment);

形參 3 是使用 DAC 輸出數據緩沖區的指針。

形參 4 是 DAC 輸出數據的長度。

形參 5 是指定 DAC 通道的數據對齊方式,有:DAC_ALIGN_8B_R(8 位右對齊)、

DAC_ALIGN_12B_L(12 位左對齊)和 DAC_ALIGN_12B_R(12 位右對齊)三種方式

停止 DAC 的 DMA 方式函數,其聲明如下:

HAL_StatusTypeDef HAL_DAC_Stop_DMA(DAC_HandleTypeDef *hdac, uint32_t Channel);

配置主模式下的定時器觸發輸出選擇函數,其聲明如下:

HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(

TIM_HandleTypeDef *htim, TIM_MasterConfigTypeDef *sMasterConfig);

接收端,無線接收

uint8_t received_data;

void NRF24L01_Receive(void)

{

????if (NRF24L01_RxPacket(&received_data) == 0)

????{

????????// 接收成功,對received_data進行處理

????}

}

解調與解碼

uint16_t ASK_Demodulate(uint8_t data)

{

????// ASK解調,將接收到的數據轉換為數字音頻信號形式

return (data == 0)? 0 : 1000; // 這里假設0對應0,1對應1000,實際需根據編碼情況調整

}

DAC 配置與音頻輸出

DAC_HandleTypeDef hdac;

void DAC_Init(void)

{

????hdac.Instance = DAC;

????hdac.Init.OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;

????HAL_DAC_Init(&hdac);

????// 配置DAC通道

????DAC_ChannelConfTypeDef sConfig;

????sConfig.DAC_Channel = DAC_CHANNEL_1;

????sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;

????HAL_DAC_ConfigChannel(&hdac, &sConfig);

}

int main(void)

{

????// 初始化nRF24L01、DAC等

????NRF24L01_Init();

????DAC_Init();

????while (1)

????{

????????// 接收無線數據

????????NRF24L01_Receive();

????????// 對接收數據進行ASK解調

????????uint16_t demodulated_data = ASK_Demodulate(received_data);

????????// 通過DAC輸出模擬音頻信號

????????HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, demodulated_data);

????}

}

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

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

相關文章

基于HTML5 Canvas 和 JavaScript 實現的煙花動畫效果

以下是一個使用 HTML5 Canvas 和 JavaScript 實現的煙花動畫效果代碼盒子: <!DOCTYPE html> <html> <head><title>煙花效果

C++課程設計 運動會分數統計(含源碼)

C++課程設計 運動會分數統計 一、題目描述(一)問題描述(二)基本要求二、程序設計文檔1. 項目概述1.1 項目背景1.2 功能需求1.3 非功能需求2. 系統設計2.1 數據結構設計2.1.1 `School` 結構體2.1.2 `Project` 結構體2.2 功能模塊設計2.2.1 主菜單2.2.2 輸入/修改項目成績2.2…

【音視頻】RTSP拉流: RTP負載AAC詳解(三)

此文為系列文章&#xff0c;此系列主要講解RTSP客戶端的拉流及播放&#xff0c;文章持續更新&#xff0c;會從rtsp的基本協議講起&#xff0c;如何一步步實現音視頻的拉流過程&#xff0c;包括一系列涉及到的協議&#xff0c;rtsp&#xff0c;sdp&#xff0c; rtp&#xff08;本…

Dockerfiles 的 Top 10 常見 DevOps/SRE 面試問題及答案

1. RUN 和 CMD 之間有什么區別&#xff1f; RUN : 在鏡像構建過程中執行命令&#xff0c;創建一個新的層。通常用于安裝軟件包。 示例: RUN apt-get update && apt-get install -y curlCMD : 指定容器啟動時默認運行的命令。它在運行時執行&#xff0c;而不是在構建過程…

【ARM】JTAG接口介紹

1、 文檔目標 對 JTAG 接口有更多的認識&#xff0c;在遇到關于 JTAG 接口問題時有一些排查的思路。 2、 問題場景 在使用調試器過程時&#xff0c;免不了要接觸到 JTAG 接口&#xff0c;當出現連接不上時&#xff0c;就不知道從哪來進行排查。 3、軟硬件環境 1 軟件版本&am…

opencascade 獲取edge起始點 會出現終點與實際不同的情況

在使用 OpenCASCADE 獲取 TopoDS_Edge 的起始點和終點時&#xff0c;可能會出現終點與實際不一致的情況。這通常是由于以下原因導致的&#xff1a; 幾何曲線的方向問題&#xff1a;在某些情況下&#xff0c;幾何曲線的方向可能與拓撲邊的方向不一致&#xff0c;導致通過幾何曲線…

【電腦】u盤重裝win7

u盤必須8GB以上 1. CPU型號 首先查看CPU的型號看看到底能不能裝win7 2. 下載光盤映像文件 網址 看電腦是多少位的機器(32位下載x86 64位下載x64) 一共是這么多個版本按需下載對應的版本 電腦小白推薦無腦下載旗艦版 將鏈接復制到迅雷進行下載 3. 下載軟碟通 網址 下…

C++-AVL樹

一、AVL樹的概念 1.二叉搜索樹 二叉搜索樹&#xff08;BST&#xff0c;Binary Search Tree&#xff09;&#xff0c;也稱二叉排序樹或二叉查找樹。 二叉搜索樹&#xff1a;一棵二叉樹&#xff0c;可以為空&#xff1b;如果不為空&#xff0c;滿足以下性質&#xff1a; 非空左子…

【網絡安全 | 漏洞挖掘】后端接受非預期參數的故事

未經許可,不得轉載。 文章目錄 正文正文 在對某項目進行測試時,我遵循了一套系統化的方法論,以確保全面理解其安全性。 首先,我創建了一個賬戶,并從用戶的角度探索主域及其各項功能。此階段,我避免使用 Burp Suite 或其他工具,而是嘗試真正理解該應用的設計邏輯與交互…

01.01、判定字符是否唯一

01.01、[簡單] 判定字符是否唯一 1、題目描述 實現一個算法&#xff0c;確定一個字符串 s 的所有字符是否全都不同。 在這一題中&#xff0c;我們的任務是判斷一個字符串 s 中的所有字符是否全都不同。我們將討論兩種不同的方法來解決這個問題&#xff0c;并詳細解釋每種方法…

w208基于spring boot物流管理系統設計與實現

&#x1f64a;作者簡介&#xff1a;多年一線開發工作經驗&#xff0c;原創團隊&#xff0c;分享技術代碼幫助學生學習&#xff0c;獨立完成自己的網站項目。 代碼可以查看文章末尾??聯系方式獲取&#xff0c;記得注明來意哦~&#x1f339;贈送計算機畢業設計600個選題excel文…

《剛剛問世》系列初窺篇-Java+Playwright自動化測試-22- 操作鼠標拖拽 - 下篇(詳細教程)

1.簡介 上一篇中&#xff0c;宏哥說的宏哥在最后提到網站的反爬蟲機制&#xff0c;那么宏哥在自己本地做一個網頁&#xff0c;沒有那個反爬蟲的機制&#xff0c;谷歌瀏覽器是不是就可以驗證成功了&#xff0c;宏哥就想驗證一下自己想法&#xff0c;其次有人私信宏哥說是有那種…

神經網絡常見激活函數 8-SELU函數

SELU 縮放指數線性單元&#xff1a;SELU&#xff08;Scaled Exponential Linear Unit&#xff09; 函數導函數 SELU函數 S E L U ( x ) { λ x x > 0 λ α ( e x ? 1 ) x ≤ 0 \rm SELU(x) \left\{ \begin{array}{} \lambda x \quad & x > 0 \\ \lambda \alph…

【Elasticsearch】多字段查詢方式匯總

在 Elasticsearch 中&#xff0c;實現多字段查詢的常見方式有以下幾種&#xff0c;每種方式適用于不同的場景&#xff1a; --- ### 1. **multi_match 查詢** - **用途**&#xff1a;在多個字段中執行同一查詢&#xff0c;支持多種匹配策略。 - **關鍵參數**&#xff1a…

多線之旅:wait 與 notify

今天小編繼續來分享下多線程中的一些內容。 在多線程環境下&#xff0c;由于線程調度的不確定性&#xff0c;所以我們有時候無法很好的去保證其線程的執行順序。 但是呢&#xff0c;我們又要實現這個順序執行&#xff0c;所以我們可以使用到這兩個方法&#xff0c;wait 和 no…

批量修改mysql字符串字段子字符串

替換子字符串 使用 REPLACE 函數替換字段中的特定子字符串。 示例&#xff1a; 將 table_name 表中 column_name 字段的所有 old_value 替換為 new_value。 UPDATE table_name SET column_name REPLACE(column_name, old_value, new_value) WHERE column_name LIKE %old_val…

達夢:AWR 生成

目錄標題 AWR 性能診斷與報告生成1. 檢查 AWR 系統狀態2. 查看數據庫中的所有表空間3. 查看現有的 AWR 快照4. 設置 AWR 快照的時間間隔5. 創建 AWR 快照6. 查看最新的 AWR 快照7. 生成 AWR HTML 報告8. 將 AWR 報告保存到指定文件鏈接總結 自動工作集負載信息庫 AWR 報告解析指…

股票數據接口API實例代碼python、JAVA等多種語言演示免費獲取實時數據、歷史數據、CDMA、KDJ等指標數據配有API說明文檔

? 本文中所有接口均可直接在瀏覽器打開獲取數據&#xff0c;為了便于大家驗證有效性&#xff0c;已經做好了超鏈接&#xff0c;直接點擊即可&#xff01; 滬深兩市股票列表 API接口鏈接&#xff08;可點擊驗證&#xff09;&#xff1a;https://api.mairui.club/hslt/list/b…

深入理解DOM:22個核心知識點與代碼示例

本文系統介紹DOM相關的22個核心概念&#xff0c;每個知識點均提供代碼示例及簡要說明&#xff0c;幫助開發者全面掌握DOM操作技巧。 一、DOM基礎概念 1. DOM概念 DOM&#xff08;Document Object Model&#xff09;是HTML/XML的編程接口&#xff0c;通過JavaScript可動態修改…

【Map vs Set】:Java數據存儲的“雙子星”對決

個人主頁&#xff1a;?喜歡做夢 歡迎 &#x1f44d;點贊 ?關注 ??收藏 &#x1f4ac;評論 目錄 &#x1f370;一、搜索 &#x1f36e;1.概念 &#x1f36e;2.模型 &#x1f370;二、Map &#x1f368;1.什么是Map&#xff1f; &#x1f368;2.Map的實例化 &…