MCU開發學習記錄11 - ADC學習與實踐(HAL庫) - 單通道ADC采集、多通道ADC采集、定時器觸發連續ADC采集 - STM32CubeMX

?名詞解釋:

ADC:?Analog-to-Digital
SAR:Successive Approximation Register

? ? ? ? 本文將介紹ADC的概念、相關函數以及STM32CubeMX生成ADC的配置函數。針對于ADC實踐:單通道采集芯片內部溫度傳感器(ADC1_ch16);利用軟件觸發單次觸發多通道DMA ADC采集;利用定時器單次/連續觸發多通道DMA ADC采集。

1.?什么是ADC?

1.1?ADC概念

1.1.0 ADC采集方法-逐次逼近寄存器型ADC

????????通過 “逐位試探比較” 的方式,從最高位(MSB)到最低位(LSB)依次確定每一位的二進制值,最終生成與輸入模擬信號對應的數字代碼。其結構框圖如下:

????????

????????一個4位轉換示例,y軸(和圖中的粗線)表示DAC的輸出電壓。本例中,第一次比較表明VIN?< VDAC。所以,位3置為0。然后DAC被置為0b0100,并執行第二次比較。由于VIN?> VDAC,位2保持為1。DAC置為0b0110,執行第三次比較。根據比較結果,位1置0,DAC又設置為0b0101,執行最后一次比較。最后,由于VIN?> VDAC,位0確定為1。

????????

1.1.1 ADC功能

????????STM32的ADC(Analog-to-Digital Converter)是一個 ?12位逐次逼近型(SAR)模數轉換器,支持多通道、多模式信號采集,

  • 分辨率?:可配置為12位、10位、8位或6位(通過犧牲分辨率提升轉換速度)。
  • ?輸入通道?:最多19個復用通道,包括:
    • ?16個外部引腳?(如溫度、電壓、電流傳感器輸入)。
    • ?2個內部信號源?(內部溫度傳感器、內部參考電壓)。
    • ?VBAT通道?:直接測量電池電壓(需特定型號支持)。
  • ?轉換模式?:單次、連續、掃描、不連續采樣模式。
  • ?數據存儲?:16位數據寄存器,支持左對齊或右對齊格式。
  • ADC 電源要求:全速運行時為 2.4 V 3.6 V ,慢速運行時為 1.8 V
  • ADC 輸入范圍: V REF- ? <=? VIN? <=?VREF+
  • ?模擬看門狗(Analog Watchdog, AWD)??:監測輸入電壓是否超出用戶設定的閾值范圍,觸發中斷或事件

1.1.2 ADC框圖

????????

????????
????????

    1.2 ADC功能介紹

    1.2.1 ADC開關控制、時鐘選擇、ADC通道選擇

    1.?ADC開關控制

    ADC_CR2.ADON?(A/D Converter ON / OFF):(0為禁止ADC;1為使能ADC)
    ADC_CR2.SWSTART(Start conversion of regular channels):開始轉換規則通道(1為開始轉換)
    ADC_CR2.JSWSTART(Start conversion of injected channels):開始轉換注入通道(1為開始轉換)

    2.?ADC時鐘選擇

    1. 模擬電路時鐘(ADCCLK)-?所有 ADC 共用
      · 驅動ADC的模擬電路部分,包括采樣保持電路(Sample&Hold)和SARADC。
      · RCC_CFGR中的ADCPRE位,設置ADC分頻系數。
    2. 數字接口時鐘
      · 等效時鐘?:直接使用APB2總線時鐘(f_{PCLK2}),無分頻。
      · ?使能控制?:通過RCC_APB2ENR寄存器為每個ADC獨立使能/禁用數字接口時鐘。
      __HAL_RCC_ADC1_CLK_ENABLE(); ? // 使能ADC1數字接口時鐘

    3.?ADC通道選擇(分為規則轉換和注入轉換

    ????????

    ????????一個規則轉換組最多由 16 個轉換構成。必須在 ADC_SQRx 寄存器中選擇轉換序列的規則通道及其順序。規則轉換組中的轉換總數必須寫入 ADC_SQR1 寄存器中的 L[3:0] 位。
    ????????

    ? ? ? ? 下圖為正點原子總結的規則組與寄存器對應表
    ????????
    ????????一個注入轉換組 最多由 4 個轉換構成。必須在 ADC_JSQR 寄存器中選擇轉換序列的注入通道及其順序。注入轉換組中的轉換總數必須寫入 ADC_JSQR 寄存器中的 L[1:0] 位。

    ????????下圖為正點原子總結的注入組與寄存器對應表
    ????????

    1.2.2 模擬看門狗

    1. 發生模擬看門狗標志
      ADC_SR.AWD
    2. 模擬看門狗中斷使能
      ADC_CR1.AWDIE
    3. 模擬看門狗保護區域
    4. 閾值上下限設置(V = VREF*HTR(LTR)/4096)
      ADC_HTR 與 ADC_LTR
    5. 模擬看門狗通道選擇(ADC_CR1.AWDCH[4:0])


    1.2.3 單次轉換模式、連續轉換模式(ADC_CR2.CONT)

    ????????ADC_CR2.CONT:0為單次轉換模式;1為連續轉換模式

    ????????

    1. 單次轉換觸發方式

    ????????● 將 ADC_CR2 寄存器中的 SWSTART 位置 1(僅適用于規則通道)
    ????????● 將 JSWSTART 位置 1(適用于注入通道)
    ????????● 外部觸發(適用于規則通道或注入通道)

    2. 單次轉換流程

    • 規則通道轉換完成?:
      1. ?數據存儲?:結果存入ADC_DR(16位數據寄存器)。
      2. ?標志位?:EOC=1(轉換結束標志)。
      3. ?中斷觸發?:若EOCIE=1,產生中斷通知CPU讀取數據。
      4. ?ADC狀態?:自動停止,等待下次觸發。
    • ?注入通道轉換完成?:
      1. ?數據存儲?:結果存入ADC_JDR1(注入數據寄存器)。
      2. ?標志位?:JEOC=1(注入轉換結束標志)。
      3. ?中斷觸發?:若JEOCIE=1,產生中斷。
      4. ?ADC狀態?:自動停止。

    3. 連續轉換觸發方式

    • 規則通道?:
      • ?軟件觸發?:置位ADC_CR2.SWSTART=1
      • ?外部觸發?:配置外部觸發源(如PWM同步信號)。
    • ?注入通道限制?:
      • ?默認禁止連續轉換?:注入通道無法獨立啟動連續轉換。
      • ?唯一例外?:若使能自動注入(JAUTO=1),注入通道可在規則通道組之后 ?自動插入轉換

    4. 連續轉換觸發方式

    規則通道組轉換完成?:

    1. ?數據存儲?:最新結果覆蓋ADC_DR寄存器。
    2. ?標志位?:EOC=1(每次轉換結束均置位)。
    3. ?中斷觸發?:若EOCIE=1,每次轉換均觸發中斷。
    4. ?ADC狀態?:立即啟動下一輪轉換,無需外部觸發

    ?自動注入模式(JAUTO=1)?

    • ?功能?:在規則通道組轉換完成后,自動插入注入通道轉換。
    • ?流程?:
      1. 規則通道組轉換完成 → 觸發注入通道轉換。
      2. 注入通道結果存入ADC_JDR1JEOC=1
      3. 中斷觸發:若JEOCIE=1,通知CPU處理注入數據。
      4. ADC繼續下一輪規則通道轉換。

    1.2.4 掃描模式、注入通道管理

    1. 掃描模式

    ????????● ADC_CR1.SCAN 置1-選擇掃描模式;
    ????????● 如果將 CONT 位置 1,規則通道轉換不會在組中最后一個所選通道處停止,而是再次從第一個所選通道繼續轉換。

    ????????●?ADC_SR.EOC:規則通道轉換結束 (Regular channel end of conversion)
    ????????????????0:轉換未完成 (EOCS=0) 或轉換序列未完成 (EOCS=1)
    ????????????????1:轉換已完成 (EOCS=0) 或轉換序列已完成 (EOCS=1)
    ????????●?ADC_CR2.EOCS:結束轉換選擇 (End of conversion selection)
    ????????????????0:在每個規則組轉換序列結束時將
    EOC 位置 1。溢出檢測僅在 DMA=1 時使能。
    ????????????????1:在每個規則通道轉換結束時將 EOC 位置
    1。使能溢出檢測。

    2. 注入通道管理(ADC_CR1.JAUTO
    ????????

    ●?觸發注入-配置條件

    • ?JAUTO位清零?:ADC_CR1.JAUTO=0(禁用自動注入)。
    • ?觸發源選擇?:
      • ?外部觸發?:通過ADC_CR2.JEXTSEL選擇觸發源(如定時器、外部引腳)。
      • ?軟件觸發?:置位ADC_CR2.JSWSTART=1

    ●?觸發注入-工作流程

    • 啟動規則通道組轉換?:
      • 外部觸發或軟件觸發規則組轉換(如定時器觸發)。
    • ?觸發注入事件?:
      • 在規則組轉換期間,若檢測到注入觸發信號:
        • ?復位當前規則轉換?:立即停止當前規則通道的轉換。
        • ?執行注入組轉換?:以單次掃描模式完成注入通道組的轉換。
    • ?恢復規則轉換?:
      • 注入組完成后,從被中斷的規則通道繼續轉換。

    ●?自動注入-配置條件

    • ?JAUTO位置1?:ADC_CR1.JAUTO=1(啟用自動注入)。
    • ?禁用注入觸發?:必須關閉外部觸發(ADC_CR2.JEXTEN=0)。
    • ?連續模式支持?:
      • ADC_CR2.CONT=1,規則組和注入組將循環轉換。

    ●?自動注入-工作流程

    • 規則組轉換完成?:
      • 規則組轉換結束后,自動啟動注入組轉換。
    • ?注入組轉換?:
      • ADC_JSQR配置的順序轉換注入通道,結果存入ADC_JDR1~4
    • ?循環轉換(CONT=1時)??:
      • 注入組完成后,立即重啟規則組轉換。

    1.2.5 不連續采樣模式

    1.?規則組

    ? ? ? ? ADC_CR1.DISCEN -?不連續采樣模式使能
    ? ? ? ? ADC_CR1.DISCNUM[2:0] - n個子序列組
    ? ? ? ?
    ADC_SQR1.L[3:0] - 定義總序列長度
    ????????

    2. 注入組

    ? ? ? ? ADC_CR1.JDISCEN -?不連續采樣模式使能
    ? ? ? ? ADC_JSQR1.L[1:0] - 定義總序列長度
    ????????

    ????????不能同時使用自動注入和不連續采樣模式。
    ????????不得同時為規則組和注入組設置不連續采樣模式。只能針對一個組使能不連續采樣模式。

    1.3 數據對齊、通道采樣時間、快速轉換模式

    1.3.0 規則/注入數據寄存器

    1.?規則數據寄存器(ADC_DR

    ????????

    2.?注入數據寄存器(ADC_JOFRx、ADC_JDRx

    ? ? ? ? ADC_JDRx?= 結果 - ADC_JOFRX (取16位補碼)
    ? ? ? ? SEXT位(擴展的符號值):負數填充1;正數填充0

    ????????

    1.3.1?數據對齊ADC_CR2.ALIGN

    ????????ALIGN =0 右對齊(默認);=1 左對齊。

    1. 右對齊(參考1.3.0)

    ????????

    2. 左對齊(參考1.3.0)

    ????????

    1.3.2?通道采樣時間與轉換時間

    ? ? ? ? 通過ADC_SMPR1、ADC_SMPR2的SMPx[2:0]控制各個通道的采樣周期。

    ????????

    1.3.3?快速轉換模式(降低精度轉換)ADC_CR1.RES?

    ????????可通過降低 ADC 分辨率來執行快速轉換。下列為轉換時間。
    ????????

    ????????● 12 位:3 + 12 = 15 ADCCLK 周期
    ????????● 10 位:3 + 10 = 13 ADCCLK 周期
    ????????● 8 位:3 + 8 = 11 ADCCLK 周期
    ????????● 6 位:3 + 6 = 9 ADCCLK 周期

    1.4 外部觸發和觸發極性

    1.4.1?外部觸發極性

    ????????

    ????????

    1.4.2. 外部觸發條件

    ?

    1.5 ADC數據采集方式(三種)

    1.5.1?使用 DMA(ADC_CR2.DMA 置1)

    0.?DDS決定DMA是否可以連續請求
    ????????如果將 ADC_CR2 寄存器中的 DDS 位清零,則不會向 DMA 控制器發出新的 DMA 請求(這可避免產生溢出錯誤)。不過,硬件不會將 DMA 位清零。必須將該位寫入 0 然后寫入 1 才能啟動新的傳輸。
    ????????如果將 DDS 位置 1 ,則可繼續生成請求。從而允許在雙緩沖區循環模式下配置 DMA

    1.?配置步驟

    • 使能DMA:置位ADC_CR2寄存器中的DMA位。
    • 配置DMA控制器:設置目標地址(內存緩沖區)和傳輸次數(NDTR計數器)。

    2.?數據丟失(溢出)處理

    • 溢出標志?:若數據未及時讀取且DMA未傳輸,ADC_SR寄存器中的OVR位會置1,并可能觸發中斷(需使能OVRIE位)。
    • ?溢出后果?:
      • DMA傳輸被禁止,后續DMA請求被忽略。
      • 正在進行的規則轉換被中止,后續規則觸發無效。
    • ?恢復步驟?:
      1. ?重新初始化DMA?:調整目標地址和NDTR計數器。
      2. ?清除溢出標志?:將ADC_SR中的OVR位清零。
      3. ?重啟轉換?:觸發ADC開始新的轉換。

    3.?DMA傳輸結束

    • ADC_CR2DDS位為0,最后一次傳輸后停止DMA請求,需手動復位DMA位(先寫0再寫1)重啟。
    • DDS位為1,DMA繼續生成請求,支持雙緩沖區循環模式(適合連續流數據)。

    1.5.2?在不使用 DMA 的情況下管理轉換序列

    1.?配置步驟

    • 禁止DMA:ADC_CR2DMA位清零。
    • 使能每次轉換結束中斷:置位ADC_CR1EOCS位為1(EOC在每次轉換結束時置1)。
    • ?溢出處理?:
      • 與DMA模式相同:需手動清除OVR位并重啟轉換。

    2.?配置步驟

    • ?啟動轉換序列?:觸發ADC開始轉換。
    • ?等待EOC標志?:每次轉換結束,EOC位置1。
    • ?讀取數據?:從ADC_DR讀取當前通道數據。
    • ?處理溢出?(若發生):清除OVR位并重啟轉換。

    1.5.3?在不使用 DMA 和溢出檢測的情況下進行轉換

    • 禁止DMA:ADC_CR2DMA位清零。
    • 僅在序列結束置位EOC:EOCS位清零。
    • 禁用溢出檢測:默認情況下溢出檢測已關閉。

    1.6?多重 ADC 模式

    1.6.1 多重 ADC 模式介紹(ADC_CCR.MULTI[4:0])

    ????????

    1. 四種模式(也可以組合使用)

    ????????● 注入同時模式
    ????????● 規則同時模式
    ????????● 交替模式
    ????????● 交替觸發模式
    ????????● 注入同時模式 + 規則同時模式
    ????????● 規則同時模式 + 交替觸發模式

    2.?多重ADC框圖

    注: 1.?盡管 ADC2 ADC3 上存在外部觸發,但它們并未顯示在此圖中。
    ? ? ? ? 2.?在雙重 ADC 模式下,不存在 ADC3 從器件部分。
    ? ? ? ? 3.?在三重 ADC 模式下,ADC 通用數據寄存器 (ADC_CDR) 包含 ADC1ADC2 ADC3 的規則轉換數據。按照所選的存儲順序使用全部 32 個寄存器位。在雙重 ADC 模式下,ADC 通用數據寄存器 (ADC_CDR) 包含 ADC1 ADC2 的規則轉換數據。使用全部32個寄存器位。

    1.6.2 多重模式下DMA模式(ADC_CCR.DMA[1:0])(三種)

    ????????

    1. DMA模式1(半字傳輸)

    1. 核心特性
      ?傳輸單位?:每個DMA請求傳輸 ?一個半字(16位)?,對應單個ADC的轉換結果。
      觸發條件?:每完成一次ADC轉換(一個數據項可用)時觸發DMA請求。
    2. 數據傳輸順序
      · 兩重模式
      請求順序為 ?ADC1→ADC2→ADC1→ADC2...?,依次循環。

      · 三重模式
      請求順序為 ?ADC1→ADC2→ADC3→ADC1→ADC2→ADC3...?,依次循環。
    3. 應用場景
      規則同時模式?:需要逐個讀取多ADC數據的場景。
      示例?:多通道溫度監測,ADC1、ADC2、ADC3分別采集不同區域的溫度值。

    2. DMA模式2(字傳輸)

    1. 核心特性
      ?傳輸單位?:每個DMA請求傳輸 ?一個字(32位)?,包含 ?兩個半字?(兩個ADC的轉換結果)。
      觸發條件?:每完成兩次ADC轉換(兩個數據項可用)時觸發DMA請求。
    2. 數據傳輸順序

      ?· 兩重模式
      每個字的高16位存儲 ?ADC2數據,低16位存儲 ?ADC1數據

      · 三重模式
      按 ?固定組合順序? 傳輸三個ADC的數據,每個字包含兩個半字:

    3. 應用場景
      交替模式?:需要同時讀取兩個ADC數據的場景,例如電機控制中電流和電壓同步采集。
      示例?:雙重交替模式下,ADC1采集電流信號,ADC2采集電壓信號,每個DMA請求同時傳輸兩者數據。

    3. DMA模式3(字節傳輸)

    1. 核心特性
      ?傳輸單位?:每個DMA請求傳輸 ?兩個字節(8位×2)?,適用于 ?6位或8位分辨率? 的ADC。
      觸發條件?:每完成兩次ADC轉換(兩個數據項可用)時觸發DMA請求。
    2. 數據傳輸順序
      ?· 兩重模式
      每個DMA請求的高8位存儲 ?ADC2數據,低8位存儲 ?ADC1數據
      · 三重模式
      數據傳輸順序與DMA模式2相似,但以字節為單位:
    3. 應用場景
      規則同時模式?:適用于6位或8位ADC的快速數據采集,簡單傳感器信號(如光敏電阻)。
      示例?:ADC1和ADC2分別采集兩個低分辨率傳感器的開關狀態。

    1.7?多重 ADC 模式

    1.7.1 注入同時模式

    ????????此模式可轉換注入通道組。外部觸發源來自 ADC1 的注入組多路復用器(通過 ADC1_CR2寄存器中的 JEXTSEL[3:0] 位進行選擇)。同時觸發可用于 ADC2 ADC3
    注:
    ? ? ? ? 1.? 不要在兩個 / 三個 ADC 上轉換同一通道
    ? ? ? ? 2.?使用同一長度來轉換序列,或必須確保觸發之間的間隔長于 2 個序列(雙重 ADC 模式)/3 個序列(三重 ADC 模式)中的較長時間。
    ?
    1. 雙重ADC
    ????????● 轉換的數據會存儲在各個 ADC 接口的 ADC_JDRx 寄存器中。
    ????????● 當 ADC1/ADC2 的注入通道全部完成轉換后,會生成一個 JEOC 中斷(如果已在兩個 ADC 接口中的一個接口上使能)。
    2. 三重ADC
    ????????● 轉換的數據會存儲在各個 ADC 接口的 ADC_JDRx 寄存器中。
    ????????● 當 ADC1/ADC2/ADC3 的注入通道全部完成轉換后,會生成一個 JEOC 中斷(如果已在三個 ADC 接口中的一個接口上使能)。
    ????????

    1.7.2 規則同時模式(ADC_CDR

    ADC_CDR:適用于雙重和三重模式的 ADC 通用規則數據寄存器

    ????????用于規則通道組。外部觸發源來自 ADC1 的規則組多路復用器(通過 ADC1_CR2 寄存器中的 EXTSEL[3:0] 位進行選擇)。同時觸發可用于 ADC2 ADC3

    注:必須禁止注入轉換。

    ????????

    1.?雙重ADC

    • 觸發條件?:當任意一個ADC(ADC1或ADC2)完成一次轉換時,觸發DMA請求。
    • ?DMA配置?:
      • 設置 ADC_CCR 寄存器的 DMA[1:0] = 0b10
      • 生成 ?單次32位DMA傳輸請求,將 ?ADC2和ADC1的轉換數據? 組合傳輸。
    • ?數據格式?:
      • 32位數據寄存器 ADC_CDR 的高16位存儲 ?ADC2的轉換結果,低16位存儲 ?ADC1的轉換結果
      • 示例:若ADC1轉換值為 0x1234,ADC2轉換值為 0x5678,則 ADC_CDR = 0x56781234
    • ?傳輸流程?:
      1. DMA將 ADC_CDR 高16位(ADC2數據)寫入SRAM目標地址。
      2. DMA將 ADC_CDR 低16位(ADC1數據)寫入下一個SRAM地址。
      3. 重復直到所有通道轉換完成。

    ? ? ? ?中斷生成:
    ?????????EOC中斷
    ?:當 ?所有常規通道均完成轉換? 后,觸發EOC(轉換結束)中斷。
    ? ? ? ? ?中斷使能?:需在 ?至少一個ADC接口? 的 ADC_CR1 寄存器中使能 EOCIE 位。

    ????????

    2. 三重ADC

    • 觸發條件?:當任意一個ADC(ADC1、ADC2或ADC3)完成一次轉換時,觸發DMA請求。
    • ?DMA配置?:
      • 設置 ADC_CCR 寄存器的 DMA[1:0] = 0b01
      • 生成 ?三次32位DMA傳輸請求,分別傳輸 ?ADC1、ADC2、ADC3的轉換數據
    • ?數據格式?:
      • 每個ADC的轉換結果存儲在獨立的 ADC_CDR 寄存器中。
      • 傳輸順序:先ADC1→再ADC2→最后ADC3。
    • ?傳輸流程?:
      1. 第一次DMA傳輸:ADC1數據寫入SRAM地址A。
      2. 第二次DMA傳輸:ADC2數據寫入地址A+4(32位對齊)。
      3. 第三次DMA傳輸:ADC3數據寫入地址A+8。
      4. 重復直到所有通道轉換完成。
    • 中斷生成?
      EOC中斷?:當 ?所有常規通道均完成轉換? 后,觸發EOC(轉換結束)中斷。
      中斷使能?:需在 ?至少一個ADC接口? 的 ADC_CR1 寄存器中使能 EOCIE 位。

    ????????

    1.7.3 交替模式

    此模式只能用于規則組(通常為一個通道)。外部觸發源來自 ADC1 的規則通道多路復用器
    ADC_CCR.DELAY[3:0] - 設置交替模式下的采樣時間。

    ????????

    1.?雙重 ADC 模式

    ????????ADC1立即啟動,經過幾個ADC時鐘周期延遲后ADC2啟動。

    ? ? ? ? 只有一共ADC能夠對輸入信號采樣,即DELAY設置的延遲時間小于采用時間時,延遲時間=采樣時間+2個ADC_CLK時鐘周期。如果 ADC1 和 ADC2 上的 CONT 位均置 1,則這兩個 ADC 所選規則通道會連續進行轉換。

    ????????

    ????????

    2.?三重 ADC 模式

    ????????ADC1 立即啟動,經過幾個ADC時鐘周期延遲后ADC2啟動,在ADC2轉換經過幾個ADC時鐘周期的延遲后ADC3啟動。

    ????????
    ????????

    1.7.4?交替觸發模式

    ????????只能用于注入組。外部觸發源來自 ADC1 的注入組多路復用器。

    ????????

    1.?雙重 ADC 模式

    ????????發生第一次觸發時,將轉換ADC1中注入組的所有通道
    ????????????????當組中的所有注入 ADC1 通道都轉換完成后,會生成一個 JEOC 中斷(如果已使能)
    ????????發生第二次觸發時,將轉換ADC2中注入組的所有通道
    ????????????????當組中的所有注入 ADC2 通道都轉換完成后,會生成一個 JEOC 中斷(如果已使能)

    ????????

    如果使能 ADC1 和 ADC2 的注入不連續采樣模式:

    ????????● 發生第一次觸發時,將轉換第一個注入 ADC1 通道
    ????????● 發生第二次觸發時,將轉換第一個注入 ADC2 通道
    ????????● 發生第三次觸發時,將轉換第二個注入 ADC1 通道
    ????????● 發生第四次觸發時,將轉換第二個注入 ADC2 通道
    ????????……
    ????????當組中的所有注入 ADC1 通道都轉換完成后,會生成一個 JEOC 中斷(如果已使能)
    ????????當組中的所有注入
    ADC2 通道都轉換完成后,會生成一個 JEOC 中斷(如果已使能)

    ????????

    2.?三重 ADC 模式

    ????????發生第一次觸發時,將轉換ADC1中注入組的所有通道
    ????????????????當組中的所有注入 ADC1 通道都轉換完成后,會生成一個 JEOC 中斷(如果已使能)
    ????????發生第二次觸發時,將轉換ADC2中注入組的所有通道
    ????????????????當組中的所有注入 ADC2 通道都轉換完成后,會生成一個 JEOC 中斷(如果已使能)
    ????????● 發生第三次觸發時,將轉換ADC3中注入組的所有通道
    ????????????????當組中的所有注入 ADC3 通道都轉換完成后,會生成一個 JEOC 中斷(如果已使能)

    ????????

    1.7.5?混合型規則/注入同時模式

    可以中斷規則組的同時轉換,然后開始注入組的同時轉換。

    1.7.6?規則同時 + 交替觸發組合模式

    ????????可以中斷規則組的同時轉換,然后開始注入組的交替觸發轉換。

    ????????注入事件后立即開始注入交替轉換。當規則轉換處于運行狀態時,為確保在注入轉換后實現同步,所有的(主/從) ADC規則轉換均將停止,并會在注入轉換結束時得以恢復運行。
    ????????

    ????????

    1.8?ADC中斷

    ADC_SR 寄存器中存在另外兩個標志,但這兩個標志不存在中斷相關性:
    ????????● JSTRT(開始轉換注入組的通道)
    ????????● STRT(開始轉換規則組的通道)
    中斷事件標志位使能控制位觸發條件
    規則組轉換結束EOCEOCIE規則通道組所有通道轉換完成(單通道或掃描模式)
    注入組轉換結束JEOCJEOCIE注入通道組所有通道轉換完成(需外部觸發或自動注入)
    模擬看門狗狀態位置 1AWDAWDIE輸入電壓超過模擬看門狗閾值(高 / 低閾值由 ADC_HTR 和 ADC_LTR 定義)
    數據溢出(Overrun)OVROVRIE數據寄存器(ADC_DR 或 ADC_JDRx)未及時讀取,新數據覆蓋舊值

    2.?基于HAL庫配置ADC外設

    2.1?CubeMX配置ADC外設

    2.1.1 單通道采集內部溫度傳感器

    ?????????

    2.1.2 多通道ADC采集(單次DMA請求)

    ????????

    ????????

    2.1.3 多通道ADC采集 (定時器觸發ADC采集(單次/連續))

    ?????????
    ????????

    2.2?基本定時器寄存器基地址

    ????????

    2.3?基本定時器寄存器

    ????????
    ????????

    3. ADC實踐

    本次實踐分為三個部分:單通道采集芯片內部溫度傳感器(ADC1_ch16);利用軟件觸發單次觸發多通道DMA ADC采集;利用定時器單次/連續觸發多通道DMA ADC采集。

    多通道是內部溫度傳感器(ADC1_ch16)、光敏傳感器(ADC1_ch1)

    3.1 單通道采集內部溫度傳感器(查詢)

    1. main函數
    2. 功能函數

    3. 實踐結果

    ?3.2 多通道ADC采集(單次DMA)

    1. main函數
    2. 中斷回調函數
    3. 實踐結果

    ????????

    ?3.3 多通道ADC采集(定時器單次/連續觸發DMA)

    1. main函數
    2. 中斷回調函數
    3. 實踐結果

    4.?本文的工程文件下載鏈接

    工程Github下載鏈接:https://github.com/chipdynkid/MCU-DL-STM32
    (國內)工程Gitcode下載鏈接https://gitcode.com/chipdynkid/MCU-DL-STM32

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

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

    相關文章

    68元撬動未來:明遠智睿2351開發板重塑嵌入式開發生態

    在嵌入式開發領域&#xff0c;價格與性能的矛盾始終存在&#xff1a;高端開發板功能強大但成本高昂&#xff0c;低價產品則往往受限于性能與擴展性。明遠智睿2351開發板以68元&#xff08;含稅&#xff09;的定價打破這一僵局&#xff0c;通過四核1.4G處理器、全功能Linux系統與…

    關于ubuntu密碼正確但是無法登錄的情況

    參考這個文章&#xff1a; https://blog.csdn.net/cuichongxin/article/details/117462494 檢查一下是不是用戶被lock了 輸入passwd -s username 如果用戶是L狀態&#xff0c;那么就是lock了。 使用 passwd -u username 解鎖 關于 .bashrc 不生效 有幾點&#xff1a; ~/.…

    LeetCode-47. 全排列 II

    1、題目描述&#xff1a; 給定一個可包含重復數字的序列 nums &#xff0c;按任意順序 返回所有不重復的全排列。 示例 1&#xff1a; 輸入&#xff1a;nums [1,1,2] 輸出&#xff1a; [[1,1,2],[1,2,1],[2,1,1]]示例 2&#xff1a; 輸入&#xff1a;nums [1,2,3] 輸出&am…

    Python 設計模式:訪問者模式

    1. 什么是訪問者模式&#xff1f; 訪問者模式是一種行為設計模式&#xff0c;它允許你在不改變對象結構的前提下&#xff0c;定義新的操作。通過將操作封裝在訪問者對象中&#xff0c;訪問者模式使得你可以在不修改元素類的情況下&#xff0c;向元素類添加新的功能。 訪問者模…

    基于stm32的智能門鎖系統

    標題:基于stm32的智能門鎖系統 內容:1.摘要 摘要&#xff1a;隨著科技的飛速發展&#xff0c;人們對家居安全的要求日益提高&#xff0c;智能門鎖系統應運而生。本研究的目的是設計并實現一個基于STM32的智能門鎖系統。采用STM32微控制器作為核心控制單元&#xff0c;結合指紋…

    GitHub 常見高頻問題與解決方案(實用手冊)

    目錄 1.Push 提示權限錯誤(Permission denied) 2.push 報錯:rejected non-fast-forward 3.忘記添加 .gitignore,上傳了無關文件 4. 撤銷最近一次 commit 5.clone 太慢或失敗 6.如何切換/創建分支 7.如何合并分支 8.如何刪除遠程分支 9.如何 Fork + PR(Pull Reque…

    【MySQL數據庫入門到精通-04 DML操作】

    一、DML DML英文全稱是Data Manipulation Language(數據操作語言)&#xff0c;用來對數據庫中表的數據記錄進行增、刪、改操作。 二、添加數據 1.給指定字段添加數據 代碼如下&#xff08;示例&#xff09;&#xff1a; insert into 表名 &#xff08;字段1&#xff0c;字…

    2022 年 9 月青少年軟編等考 C 語言六級真題解析

    目錄 T1. 棧的基本操作T2. stack or queue思路分析T3. 合影效果T4. 發型糟糕的一天思路分析T1. 棧的基本操作 題目鏈接:SOJ D1188 此題為 2022 年 6 月三級第二題僅有棧操作的版本,見 2022 年 6 月青少年軟編等考 C 語言三級真題解析中的 T2。 T2. stack or queue 題目鏈…

    美創市場競爭力突出!《2025中國數據安全市場研究報告》發布

    數據要素時代&#xff0c;數據已成國家戰略性資源&#xff0c;數據安全關乎國家安全&#xff01;數說安全發布的《2025中國數據安全市場研究報告》&#xff08;以下簡稱《報告》&#xff09;顯示&#xff0c;2024年數據安全市場逆勢增長&#xff0c;市場規模首次突破百億。《報…

    VUE Element-ui Message 消息提示組件自定義封裝

    為了讓message 信息提示的更加方便快捷&#xff0c;減少不同地方的調用&#xff0c;避免代碼的重復&#xff0c;特意再官方message 組件的基礎上二次封裝&#xff0c;使代碼更加的優雅和高效。 實現效果&#xff1a; 代碼組件&#xff1a; 封裝成 message.js 文件&#xff0c;…

    高防IP能抵御哪些類型的網絡攻擊?

    高防IP&#xff08;High Defense IP&#xff09;是一種專門針對網絡攻擊設計的防護服務&#xff0c;主要通過流量清洗、協議分析、行為檢測等技術抵御多種網絡攻擊。以下是其能防御的主要攻擊類型及原理&#xff1a; ??一、常見防御的攻擊類型?? ??DDoS攻擊&#xff08;分…

    小紅書文字配圖平替工具

    小紅書的文字配圖只有手機版有&#xff0c;想找一個電腦版的&#xff0c;查了一下。以下是幾款類似小紅書風格的花字、藝術字生成工具&#xff0c;適合制作吸睛的社交媒體配圖&#xff0c;分為 手機APP 和 在線工具 兩類&#xff0c;供你選擇&#xff1a; 一、手機APP推薦 醒圖…

    【浙江大學DeepSeek公開課】走向數字社會:從DeepSeek到群體智慧

    從DeepSeek到群體智慧 一、人工智能發展脈絡二、DeepSeek大模型的意義與特點三、人工智能促進社會數字化轉型四、群體智慧與數字社會 一、人工智能發展脈絡 圖靈與圖靈機&#xff1a;1937年&#xff0c;圖靈發表論文《On computable numbers, with an application to the Ents…

    解讀大型語言模型:從Transformer架構到模型量化技術

    一、生成式人工智能概述 生成式人工智能&#xff08;Generative Artificial Intelligence&#xff09;是一種先進的技術&#xff0c;能夠生成多種類型的內容&#xff0c;包括文本、圖像、音頻以及合成數據等。其用戶界面的便捷性極大地推動了其廣泛應用&#xff0c;用戶僅需在…

    JSON實現動態按鈕管理的Python應用

    在開發桌面應用程序時&#xff0c;動態生成用戶界面元素并根據配置文件靈活管理是一項常見需求。本文將介紹如何使用Python的wxPython庫結合JSON配置文件&#xff0c;開發一個支持動態按鈕創建、文件執行和配置管理的桌面應用程序。該應用允許用戶通過設置界面配置按鈕名稱和關…

    序章:寫在前面

    目錄 為什么要學習 Python&#xff1f;那么&#xff0c;Python 到底是什么呢&#xff1f;Python 的用戶多嗎&#xff1f;Python 的語法究竟是怎樣的&#xff1f;C 語言JavaPython Python 好學嗎&#xff1f; 為什么要學習 Python&#xff1f; 這個問題或許會讓不少人感到不解。…

    onlyoffice歷史版本功能實現,版本恢復功能,編輯器功能實現 springboot+vue2

    文章目錄 oonlyoffice歷史版本功能實現 &#xff08;編輯器功能實現&#xff09;springbootvue2前提 需要注意把這個 (改成自己服務器的ip或者域名) 改成 自己服務器的域名或者地址1. onloyoffice 服務器部署 搜索其他文章2. 前段代碼 vue 22.1 需要注意把這個 (改成自己服務器…

    解決ubuntu server修改為中文后亂碼問題(改回英文)

    操作步驟 1.安裝英文語言包 sudo apt-get install language-pack-en2.編輯/etc/default/locale文件 sudo vim /etc/default/locale修改為以下內容&#xff1a; LANG"en_US.UTF-8" LANGUAGE"en_US:en" LC_ALL"en_US.UTF-8"3.應用配置 sudo l…

    安卓的Launcher 在哪個環節進行啟動

    安卓Launcher在系統啟動過程中的關鍵環節啟動&#xff0c;具體如下&#xff1a; 內核啟動&#xff1a;安卓設備開機后&#xff0c;首先由引導加載程序啟動Linux內核。內核負責初始化硬件設備、建立內存管理機制、啟動系統進程等基礎工作&#xff0c;為整個系統的運行提供底層支…

    數據通信學習筆記之OSPF其他內容2

    OSPF 與 BFD 聯動 網絡上的鏈路故障或拓撲變化都會導致設備重新進行路由計算&#xff0c;所以縮短路由協議的收斂時間對于提高網絡的性能是非常重要的。 OSPF 與 BFD 聯動就是將 BFD 和 OSPF 關聯起來&#xff0c;一旦與鄰居之間的鏈路出現故障&#xff0c;BFD 對完品以&…