ADC模數轉換器概念函數及應用

ADC模數轉換器概念函數及應用

文章目錄

  • ADC模數轉換器概念函數及應用
    • 1.ADC簡介
    • 2.逐次逼近型ADC
      • 2.1逐次逼近型ADC
      • 2.2stm32逐次逼近型
      • 2.3ADC基本結構
      • 2.4十六個通道
    • 3.規則組的4種轉換模式
      • 3.1單次轉換,非掃描模式
      • 3.2連續轉換,非掃描模式
      • 3.3單次轉換,掃描模式
      • 3.4連續轉換,掃描模式
    • 4.觸發控制
    • 5.數據對齊
    • 6.轉換時間
    • 7.校準(了解)
    • 8.硬件電路
    • 9.相關函數說明
      • RCC的函數
      • ADC的函數
      • 控制校準的函數
      • 軟件觸發的函數
      • 獲取標志位狀態
      • 配置間斷模式
      • ADC規則組通道配置
      • ADC獲取轉換值
      • ADC注入組的配置(了解)
      • 模擬看門狗的配置
      • ADC溫度傳感器,內部電壓控制
      • 標志位相關
    • 9.實操圖
    • 10.AD單通道
      • 10.1接線圖
      • 10.2代碼編寫
        • 10.2.1主程序main.c
        • 10.2.2函數定義AD.c
        • 10.2.3函數聲明AD.h
    • 11.AD多通道
      • 11.1接線圖
      • 11.2代碼編寫
        • 11.2.1主程序main.c
        • 11.2.2函數定義AD.c
        • 11.2.3函數聲明AD.h
    • n.實現步驟
      • n.1ADC配置的步驟
      • n.2校準的4個步驟
    • n.實現步驟
      • n.1ADC配置的步驟
      • n.2校準的4個步驟

1.ADC簡介

  • ADC(Analog-Digital Converter)模擬-數字轉換器
  • ADC可以將引腳上連續變化的模擬電壓轉換為內存中存儲的數字變量,建立模擬電路到數字電路的橋梁
  • 12位逐次逼近型ADC,1us轉換時間
  • 輸入電壓范圍:0~3.3V,轉換結果范圍:0~4095
  • 18個輸入通道,可測量16個外部和2個內部信號源(16個外部就是16個GPIO口,2個內部信號源是內部溫度傳感器內部參考電壓)
  • 規則組(常規使用)和注入組(用于突發事件)兩個轉換單元
  • 模擬看門狗自動監測輸入電壓范圍
  • STM32F103C8T6 ADC資源:ADC1、ADC2,10個外部輸入通道

STM32主要是數字電路,數字電路只有高低電平,沒有幾v電壓的概念

2.逐次逼近型ADC

2.1逐次逼近型ADC

逐次逼近型

2.2stm32逐次逼近型

stm32逐次逼近型

2.3ADC基本結構

ADC基本結構

2.4十六個通道

通道ADC1ADC2ADC3
通道0PA0PA0PA0
通道1PA1PA1PA1
通道2PA2PA2PA2
通道3PA3PA3PA3
通道4PA4PA4PF6
通道5PA5PA5PF7
通道6PA6PA6PF8
通道7PA7PA7PF9
通道8PB0PB0PF10
通道9PB1PB1
通道10PC0PC0PC0
通道11PC1PC1PC1
通道12PC2PC2PC2
通道13PC3PC3PC3
通道14PC4PC4
通道15PC5PC5
通道16溫度傳感器
通道17內部參考電壓

3.規則組的4種轉換模式

EOC在規則或注入通道組結束時設置,由軟件清除或由讀取ADC_DR時清除

3.1單次轉換,非掃描模式

單次,非掃描

3.2連續轉換,非掃描模式

連續,非掃描

3.3單次轉換,掃描模式

單次,掃描

3.4連續轉換,掃描模式

連續掃描

4.觸發控制

觸發控制

5.數據對齊

  • 數據右對齊

右對齊

  • 數據左對齊

左對齊

左對齊的作用:如果不想要右對齊那么高的分辨率,0~4095數太大了,可以選擇左對齊將數據的高8位取出來,舍棄后面4位的精度,將12位的ADC退化為8位的ADC

6.轉換時間

  • AD轉換的步驟:采樣,保持,量化,編碼

  • STM32 ADC的總轉換時間為:

    TCONV = 采樣時間 + 12.5個ADC周期

  • 例如:當ADCCLK=14MHz,采樣時間為1.5個ADC周期

    TCONV = 1.5 + 12.5 = 14個ADC周期 = 1μs

量化:ADC逐次比較的過程,位數越多時間越長,

采樣時間:采樣保持花費的時間,采樣時間越長,越能避免一些毛刺信號的干擾

12.5個ADC周期:量化編碼花費的時間,因為是12位的ADC,所以需要花費12個周期

ADC周期:就是從RCC分頻過來的ADCCLK

14MHz:最大,最快的轉換速度

7.校準(了解)

固定過程,了解即可

  • ADC有一個內置自校準模式。校準可大幅減小因內部電容器組的變化而造成的準精度誤差。校準期間,在每個電容器上都會計算出一個誤差修正碼(數字值),這個碼用于消除在隨后的轉換中每個電容器上產生的誤差
  • 建議在每次上電后執行一次校準
  • 啟動校準前, ADC必須處于關電狀態超過至少兩個ADC時鐘周期

8.硬件電路

硬件電路

9.相關函數說明

RCC的函數

void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);
  1. void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);配置ADCCLK預分頻器,可以對APB2的72MHz時鐘選擇2、4、6、8分頻,輸入到ADCCLK

ADC的函數

void ADC_DeInit(ADC_TypeDef* ADCx);
void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);
void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct);
void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState);
void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState);
void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState);
  1. void ADC_DeInit(ADC_TypeDef* ADCx);恢復缺省配置
  2. void **ADC_Init (ADC_TypeDef ADCx, ADC_InitTypeDef ADC_InitStruct);初始化
  3. void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct);結構體初始化
  4. void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState);給ADC上電的,就是開關控制
  5. void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState);用于開啟DMA輸出信號,使用DMA轉運數據,就得調用這個函數
  6. void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState);中斷輸出控制,控制某個中斷是否能通往NVIC

控制校準的函數

void ADC_ResetCalibration(ADC_TypeDef* ADCx);
FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx);
void ADC_StartCalibration(ADC_TypeDef* ADCx);
FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx);
  1. void ADC_ResetCalibration(ADC_TypeDef* ADCx);復位校準
  2. FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx);獲取復位校準狀態
  3. void ADC_StartCalibration(ADC_TypeDef* ADCx);開始校準
  4. FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx);獲取開始校準狀態

在ADC初始化后依次調用即可

軟件觸發的函數

void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx);//一般不會用到
  1. void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);用于軟件觸發的函數,設置SWSTART為1
  2. FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx);返回SWSTART的狀態,與轉換是否結束無關

獲取標志位狀態

FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);
  1. FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);參數給EOC的標志位判斷EOC標志位是不是置1

如何判斷轉換是否結束:

調用ADC_GetFlagStatus函數獲取標志位狀態,判斷EOC標志位是不是置1了,如果轉換結束,EOC標志位置1,然后調用這個函數判斷標志位

配置間斷模式

void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number);
void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
  1. void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number);每隔幾個通道間斷一次
  2. void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);是不是啟用間斷模式

ADC規則組通道配置

void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);
  1. void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);給序列的每個位置填寫指定通道,參數1ADCx,參數2ADC_Channel你想指定的通道,參數三Rank:序列幾的位置(規則器中的序列),參數四SampleTime指定通道的采樣時間(數值小的轉換快,數值大的穩定)
void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
  1. void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);ADC外部觸發轉換控制,就是是否允許外部觸發轉換

ADC獲取轉換值

uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);
uint32_t ADC_GetDualModeConversionValue(void);
  1. uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);就是獲取AD轉換的數據寄存器,讀取轉換結果就使用該函數
  2. uint32_t ADC_GetDualModeConversionValue(void);ADC獲取雙模式轉換值,雙ADC模式讀取轉換結果的函數

以上所有函數都是對ADC基本功能和規則組的配置

ADC注入組的配置(了解)

void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv);
void ADC_ExternalTrigInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
void ADC_SoftwareStartInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx);
void ADC_InjectedChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);
void ADC_InjectedSequencerLengthConfig(ADC_TypeDef* ADCx, uint8_t Length);
void ADC_SetInjectedOffset(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset);
uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel);

模擬看門狗的配置

void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog);
void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold, uint16_t LowThreshold);
void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel);
  1. void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog);是否啟動模擬看門狗
  2. void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold, uint16_t LowThreshold);配置高低閾值
  3. voidADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel);配置看門的通道

ADC溫度傳感器,內部電壓控制

void ADC_TempSensorVrefintCmd(FunctionalState NewState);
  1. void ADC_TempSensorVrefintCmd(FunctionalState NewState);用于開啟內部的兩個通道的,不開啟將讀不到正確結果

標志位相關

FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);
void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);
ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT);
void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT);
  1. FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);獲取標志位狀態
  2. void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);清楚標志位
  3. ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT);獲取中斷狀態
  4. void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT);清除中斷掛起位

9.實操圖

實操圖

10.AD單通道

10.1接線圖

單通道

根據引腳定義表,PA0到PB1這10個引腳是ADC的10個通道,其他的引腳不是ADC引腳,不能接模擬電壓

10.2代碼編寫

10.2.1主程序main.c
#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "LED.h"
#include "KEY.h"
#include "OLED.h"
//#include "OLED_Font.h"
#include "AD.h"uint16_t AD_Value;
float Voltage;int main(void){OLED_Init();AD_Init();OLED_ShowString(1,1,"ADValue:");OLED_ShowString(2,1,"Voltage:0.00V");while(1){AD_Value = ADC_GetValue();Voltage = (float)AD_Value/4095*3.3;OLED_ShowNum(1,9,AD_Value,4);//ADC值為整數,直接除不準確,所以需要強制類型轉換,雖然還是有偏差OLED_ShowNum(2,9,Voltage,1);//顯示整數部分OLED_ShowNum(2,11,(uint16_t)(Voltage*100)%100,2);//顯示小數部分Delay_ms(100);}
}
10.2.2函數定義AD.c
#include "stm32f10x.h"                  // Device headervoid AD_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//開啟ADC時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);//配置ADCCLKRCC_ADCCLKConfig(RCC_PCLK2_Div6);//ADCCLK=72MHz/6=12MHz//GPIO初始化GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//防止干擾模擬電壓GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_Init(GPIOA, &GPIO_InitStructure);//配置規則組輸入通道(ADC通道,通道,序列,采樣時間參數)ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_55Cycles5);//這里的ADCCLK的采樣時間就是55.5個ADCCLK周期//ADC初始化ADC_InitTypeDef ADC_InitStructure;ADC_InitStructure.ADC_ContinuousConvMode =ENABLE;//連續轉換模式,選擇連續或單次轉換ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//數據對齊ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//外部觸發轉換選擇,對應框圖的左下角,None不使用外部觸發,使用軟件觸發ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//模式選擇:獨立模式ADC_InitStructure.ADC_NbrOfChannel = 1;//通道數目,一共掃描幾個通道ADC_InitStructure.ADC_ScanConvMode = DISABLE;//掃描轉換模式ADC_Init(ADC1,&ADC_InitStructure);ADC_Cmd(ADC1,ENABLE);//校準ADC_ResetCalibration(ADC1);//復位校準while(ADC_GetResetCalibrationStatus(ADC1) == SET);//復位完成后系統會自動置為0ADC_StartCalibration(ADC1);//開始校準while(ADC_GetCalibrationStatus(ADC1)==SET);}//獲取ADC值
uint16_t ADC_GetValue(void){ADC_SoftwareStartConvCmd(ADC1,ENABLE);//軟件觸發獲取ADC值的函數//獲取標志位狀態while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET);//等待時間:采樣周期55.5,轉換周期固定為12.5,55.5+12.5=68,76/6=12(6分頻),(1/12)*68=5.6usreturn ADC_GetConversionValue(ADC1);
}

PCLK2就是APB2時鐘的意思

AIN模式下,GPIO口是無效的,斷開GPIO,防止GPIO口的輸入輸出對模擬電壓造成干擾

10.2.3函數聲明AD.h
#ifndef __AD_H
#define __AD_Hvoid AD_Init(void);
uint16_t ADC_GetValue(void);#endif

11.AD多通道

11.1接線圖

多通道

11.2代碼編寫

11.2.1主程序main.c
#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "LED.h"
#include "KEY.h"
#include "OLED.h"
//#include "OLED_Font.h"
#include "AD.h"uint8_t AD0;
uint8_t AD1;
uint8_t AD2;
uint8_t AD3;int main(void){OLED_Init();AD_Init();OLED_ShowString(1,1,"AD0:");OLED_ShowString(2,1,"AD1:");OLED_ShowString(3,1,"AD2:");OLED_ShowString(4,1,"AD3:");while(1){AD0 = ADC_GetValue(ADC_Channel_0);AD1 = ADC_GetValue(ADC_Channel_1);AD2 = ADC_GetValue(ADC_Channel_2);AD3 = ADC_GetValue(ADC_Channel_3);OLED_ShowNum(1,5,AD0,4);OLED_ShowNum(2,5,AD1,4);OLED_ShowNum(3,5,AD2,4);OLED_ShowNum(4,5,AD3,4);Delay_ms(100);}
}
11.2.2函數定義AD.c

主要是在獲取AD值時對通道進行修改,實現動態單通道獲取多個通道

#include "stm32f10x.h"                  // Device headervoid AD_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//開啟ADC時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);//配置ADCCLKRCC_ADCCLKConfig(RCC_PCLK2_Div6);//ADCCLK=72MHz/6=12MHz//GPIO初始化GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;GPIO_Init(GPIOA, &GPIO_InitStructure);//ADC初始化ADC_InitTypeDef ADC_InitStructure;ADC_InitStructure.ADC_ContinuousConvMode =ENABLE;ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;ADC_InitStructure.ADC_NbrOfChannel = 1;ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_Init(ADC1,&ADC_InitStructure);ADC_Cmd(ADC1,ENABLE);//校準ADC_ResetCalibration(ADC1);while(ADC_GetResetCalibrationStatus(ADC1) == SET);ADC_StartCalibration(ADC1);while(ADC_GetCalibrationStatus(ADC1)==SET);}//獲取ADC值
uint16_t ADC_GetValue(uint8_t ADC_Channel){//每次都重新指定通道,來實現多通道ADC_RegularChannelConfig(ADC1,ADC_Channel,1,ADC_SampleTime_55Cycles5);//使用參數來修改通道ADC_SoftwareStartConvCmd(ADC1,ENABLE);//獲取標志位狀態while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET);return ADC_GetConversionValue(ADC1);
}
11.2.3函數聲明AD.h
#ifndef __AD_H
#define __AD_Hvoid AD_Init(void);
uint16_t ADC_GetValue(uint8_t ADC_Channel);#endif

n.實現步驟

n.1ADC配置的步驟

  1. 開啟RCC時鐘,包括ADC和GPIO的時鐘,另外。ADCCLK的分頻器時鐘
  2. 配置GPIO,把需要的GPIO配置成模擬輸入的模式
  3. 選擇規則組的輸入通道
  4. 配置多路開關,把左邊的通道接入右邊的規則組列表里
  5. 配置ADC轉換器
  6. 開關控制,調用ADC_Cmd函數,開啟ADC

n.2校準的4個步驟

調用4個函數即可

  1. 復位校準
  2. 等待校準完成
  3. 開始校準
  4. 等待校準完成
    e(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET);
    return ADC_GetConversionValue(ADC1);
    }

#### 11.2.3函數聲明AD.h```c
#ifndef __AD_H
#define __AD_Hvoid AD_Init(void);
uint16_t ADC_GetValue(uint8_t ADC_Channel);#endif

n.實現步驟

n.1ADC配置的步驟

  1. 開啟RCC時鐘,包括ADC和GPIO的時鐘,另外。ADCCLK的分頻器時鐘
  2. 配置GPIO,把需要的GPIO配置成模擬輸入的模式
  3. 選擇規則組的輸入通道
  4. 配置多路開關,把左邊的通道接入右邊的規則組列表里
  5. 配置ADC轉換器
  6. 開關控制,調用ADC_Cmd函數,開啟ADC

n.2校準的4個步驟

調用4個函數即可

  1. 復位校準
  2. 等待校準完成
  3. 開始校準
  4. 等待校準完

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

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

相關文章

探索前端框架的未來:Svelte 的崛起

引言 在前端開發的世界里,框架更新換代的速度仿佛光速。從 jQuery 到 Angular,再到如今大熱的 React 和 Vue,開發者們不斷追逐更輕量、更快、更易于維護的框架。如今,Svelte 正悄然崛起,并引發了關于前端框架未來的熱烈…

DeepSeek在FPGA/IC開發中的創新應用與未來潛力

隨著人工智能技術的飛速發展,以DeepSeek為代表的大語言模型(LLM)正在逐步滲透到傳統硬件開發領域。在FPGA(現場可編程門陣列)和IC(集成電路)開發這一技術密集型行業中,DeepSeek憑借其…

數據結構在 Web 開發中的重要性與應用

數據結構是 Web 開發的基石,直接關系到應用程序的效率、可擴展性和可維護性。 根據實際需求選擇合適的數據結構,能夠有效優化性能、簡化代碼,并提升用戶體驗。 本文將深入探討 PHP 和 Laravel 中的常用數據結構,并結合實際案例&am…

20240824 美團 筆試

文章目錄 1、單選題1.11.21.31.41.51.61.71.81.91.101.111.121.131.141.151.161.171.181.191.202、編程題2.12.2崗位:硬件開發工程師(嵌入式系統軟件開發方向) 題型:20 道單選題,2 道編程題題 1、單選題 1.1 C 語言中,如果輸入整數 v 是 2 的冪,下面表達式中哪個會返…

【Elasticsearch】nested聚合

在 Elasticsearch 中,嵌套聚合(nestedaggregation)的語法形式用于對嵌套字段(nestedfields)進行聚合操作。嵌套字段是 Elasticsearch 中的一種特殊字段類型,用于存儲數組中的對象,這些對象需要獨…

【Uniapp-Vue3】創建DB schema數據表結構

右鍵uniCloud文件下的database文件,點擊“新建DB schema”,選擇模板,修改文件名,點擊“創建” 創建完成后會出現對應的文件,進入該文件進行配置 對文件中的必填選項,用戶權限,字段進行配置 其…

解決react中函數式組件usestate異步更新

問題:在點擊modal組件確認后 調用后端接口,使用setstateone(false)使modal組件關閉,但是設置后關閉不了,在設置setstateone(false)前后打印出了對應的stateone都為true,但…

OpenAI 實戰進階教程 - 第六節: OpenAI 與爬蟲集成實現任務自動化

爬蟲與 OpenAI 模型結合,不僅能高效地抓取并分析海量數據,還能通過 NLP 技術生成洞察、摘要,極大提高業務效率。以下是一些實際工作中具有較高價值的應用案例: 1. 電商價格監控與智能分析 應用場景: 電商企業需要監控…

BFS算法篇——廣度優先搜索,探索未知的旅程(上)

文章目錄 前言一、BFS的思路二、BFS的C語言實現1. 圖的表示2. BFS的實現 三、代碼解析四、輸出結果五、總結 前言 廣度優先搜索(BFS)是一種廣泛應用于圖論中的算法,常用于尋找最短路徑、圖的遍歷等問題。與深度優先搜索(DFS&…

解決使用python提取word文檔中所有的圖片時圖片丟失的問題

python解析word文檔,提取文檔中所有的圖片并保存,并將原圖位置用占位符替換。 問題描述 利用python-dox庫解析word文檔,并提取里面的所有圖片時發現會出現一摸一樣的圖片只解析一次,導致圖片丟失,數量不對的情況。 …

Swipe橫滑與SwipeItem自定義橫滑相互影響

背景 vue項目&#xff0c;H5頁面&#xff0c;使用vant的組件庫輪播組件<Swipe>&#xff0c;UI交互要求&#xff0c;在每個SwipeItem中有內容&#xff0c;可自橫滑&#xff0c;查看列表內容 核心代碼 <template><Swipeclass"my_swipe":autoplay&quo…

3. 【.NET Aspire 從入門到實戰】--理論入門與環境搭建--環境搭建

構建現代云原生應用程序時&#xff0c;開發環境的搭建至關重要。NET Aspire 作為一款專為云原生應用設計的開發框架&#xff0c;提供了一整套工具、模板和集成包&#xff0c;旨在簡化分布式系統的構建和管理。開始項目初始化之前&#xff0c;確保開發環境的正確配置是成功的第一…

藍耘智算平臺使用DeepSeek教程

目錄 一.平臺架構與技術特點 二、DeepSeek R1模型介紹與優勢 DeepSeek R1 模型簡介 DeepSeek R1 模型優勢 三.藍耘智算平臺使用DeepSeek教程 展望未來 耘元生代智算云是藍耘科技推出的一款智算云平臺有著以下特點&#xff1a; 一.平臺架構與技術特點 基于 Kubernetes 原…

.net的一些知識點6

1.寫個Lazy<T>的單例模式 public class SingleInstance{private static readonly Lazy<SingleInstance> instance new Lazy<SingleInstance>(() > new SingleInstance());private SingleInstance(){}public static SingleInstance Instace > instance…

1Panel應用推薦:WordPress開源博客軟件和內容管理系統

1Panel&#xff08;github.com/1Panel-dev/1Panel&#xff09;是一款現代化、開源的Linux服務器運維管理面板&#xff0c;它致力于通過開源的方式&#xff0c;幫助用戶簡化建站與運維管理流程。為了方便廣大用戶快捷安裝部署相關軟件應用&#xff0c;1Panel特別開通應用商店&am…

前端開發架構師Prompt指令的最佳實踐

前端開發架構師Prompt 提示詞可作為系統提示詞使用&#xff0c;可基于用戶的需求輸出對應的編碼方案。 本次提示詞偏向前端開發的使用&#xff0c;如有需要可適當修改關鍵詞和示例。 推薦使用 Cursor 中作為自定義指令使用Cline 插件中作為自定義指令使用在力所能及的范圍內使…

Linux在x86環境下制作ARM鏡像包

在x86環境下制作ARM鏡像包&#xff08;如qemu.docker&#xff09;&#xff0c;可以通過QEMU和Docker的結合來實現。以下是詳細的步驟&#xff1a; 安裝QEMU-user-static QEMU-user-static是一個靜態編譯的QEMU二進制文件&#xff0c;用于在非目標架構上運行目標架構的二進制文…

基于STM32設計的倉庫環境監測與預警系統

目錄 項目開發背景設計實現的功能項目硬件模塊組成設計思路系統功能總結使用的模塊的技術詳情介紹總結 1. 項目開發背景 隨著工業化和現代化的進程&#xff0c;尤其是在制造業、食品業、醫藥業等行業&#xff0c;倉庫環境的監控和管理成為了至關重要的一環。尤其是在存儲易腐…

Redis主從同步流程?

目錄 1. 建立連接 2. 全量同步(Full Sync) 3. 部分同步(Partial Sync) 4. 持續同步 5. 心跳檢測 6. 復制偏移量(Replication Offset) 7. 復制積壓緩沖區(Replication Backlog) 總結 Redis 主從同步 是通過復制(replication)實現的,主節點(master)將數據同…

PbootCMS 修改跳轉提示,修改笑臉時間

在使用時&#xff0c;每次都提示這個&#xff1a; 修改方法&#xff1a; 修改跳轉時間&#xff1a;找到 handle.php 文件編輯 &#xff0c;調整 setTimeout 函數的時間參數。 修改提示文字&#xff1a;編輯 handle.php 文件&#xff0c;修改提示文字的內容。 隱藏提示頁面&am…