單片機 - STM32F407 ADC 模式詳解:單次轉換、連續轉換、掃描模式、非掃描模式

STM32F407 ADC 模式詳解:單次轉換、連續轉換、掃描模式、非掃描模式

前言

在 STM32F407 中,ADC(模數轉換器)模塊常用于采集模擬信號,比如讀取光敏電阻、電壓、電流、溫度傳感器等。STM32 的 ADC 模式較多,初學者常常會混淆:

  • 單次轉換和連續轉換的區別
  • 掃描模式和非掃描模式分別用于什么場景

本篇文章將全面講解 STM32F407 中 ADC 的四種核心工作模式,帶你從概念到應用搞懂它們的配置和組合。

一、ADC 模式分類總覽

STM32F407 的 ADC 模式可以從兩個維度理解:

分類方向模式名稱功能說明
轉換行為單次轉換模式轉換一次即停止,不自動繼續
連續轉換模式一次啟動后自動不斷采樣
通道采樣方式掃描模式支持多個通道依次采樣
非掃描模式只采樣一個通道

這兩個方向的模式可以自由組合使用,形成不同的采樣邏輯,例如“連續+非掃描”、“單次+掃描”等。

二、單次轉換模式(Single Conversion Mode)

詳細解釋(通俗+專業)

在單次轉換模式下,ADC 只進行一次采樣與轉換,完成后會自動停止。

通俗理解:你按一下按鈕,它就采一口“模擬信號”,轉成數字值,然后就不動了,想要再采一次,必須手動再觸發。

專業說明

  • 控制寄存器:ADC_CR2.CONT = 0(關閉連續模式)
  • 觸發方式:軟件觸發或外部事件
  • 一次轉換后,EOC(轉換完成標志)位置位,ADC停止工作

使用場景示例:

  • 需要用戶操作或定時器觸發時才采樣一次,例如測量溫度、電壓快照等

三、連續轉換模式(Continuous Conversion Mode)

詳細解釋(通俗+專業)

在連續轉換模式下,ADC 在啟動后會自動不斷重復采樣,適用于實時性要求較高的場合。

通俗理解:你一打開開關,它就像一個不停喝水的家伙,一直把模擬信號喝進來轉成數字,除非你強行關掉它。

專業說明

  • 控制寄存器:ADC_CR2.CONT = 1(打開連續模式)
  • 啟動后,ADC 會在每次轉換完成后,自動立即開始下一次
  • 通常配合 DMA 或中斷讀取,提高效率

使用場景示例:

  • 實時電壓監控、傳感器數據流讀取等

四、掃描模式(Scan Mode)

詳細解釋(通俗+專業)

掃描模式允許 ADC 在一次觸發下,自動依次轉換多個通道的模擬信號,適用于同時采集多個傳感器數據的應用場景。

通俗理解:ADC 就像一個機器人,它按照你設定的清單,依次去采集第1個通道、第2個通道、第3個……直到完成一輪。

專業說明

  • 控制寄存器:ADC_CR1.SCAN = 1(打開掃描模式)
  • 轉換通道順序通過 SQR1~SQR3 配置,例如通道數量、通道順序等
  • 每個通道轉換結果會順序寫入 ADC_DR 數據寄存器(通常配合 DMA 搬運)

使用場景示例:

  • 項目中使用多個 ADC 輸入(如光敏、電壓、氣體、溫度傳感器),一次采樣全部獲取

五、非掃描模式(No Scan Mode)

詳細解釋(通俗+專業)

非掃描模式是默認模式,表示一次轉換只采樣一個通道的模擬電壓值,適用于只需要采一個信號源的應用場景。

通俗理解:ADC 盯著一個傳感器看,一次只測它,不關心其他通道。

專業說明

  • 控制寄存器:ADC_CR1.SCAN = 0(關閉掃描)
  • 采樣通道由 ADC_SQR3 指定,例如 ADC_SQR3 = 5 表示采樣 ADC_IN5
  • 數據輸出在 ADC_DR 寄存器中

使用場景示例:

  • 項目中只有一個傳感器輸入,邏輯簡單,代碼結構清晰

六、四種模式組合行為匯總

STM32 的這兩類模式是可以任意組合的。以下是組合后的行為總結:

掃描模式連續模式行為描述
關閉關閉只采一個通道,采一次停止
關閉開啟只采一個通道,自動不斷采樣
開啟關閉多個通道依次采樣,采一輪停止
開啟開啟多個通道依次采樣,不斷重復整個過程

這些組合中的“多通道自動輪詢”非常適合使用 DMA 自動搬數據,避免主循環里占用 CPU 資源。

七、常見應用組合推薦

實際需求推薦配置
讀取一個通道,一次采樣非掃描 + 單次轉換
實時讀取一個通道非掃描 + 連續轉換
輪流讀取多個通道(采一輪)掃描 + 單次轉換
連續輪流讀取多個通道掃描 + 連續轉換 + DMA

八、示例代碼(使用寄存器配置)

以下代碼展示了一個連續采樣 ADC_IN10 通道的最簡初始化配置:

void ADC1_Init(void)
{// 1. 打開時鐘RCC->APB2ENR |= (1 << 8);       // ADC1 時鐘使能RCC->AHB1ENR |= (1 << 0);       // GPIOA 時鐘使能// 2. 設置PA0為模擬模式(假設IN0)GPIOA->MODER |= (3 << (0 * 2)); // 模擬模式// 3. ADC 配置ADC1->CR1 &= ~(1 << 8);         // 關閉掃描模式ADC1->CR2 |= (1 << 1);          // 開啟連續轉換ADC1->SQR3 = 0;                 // 通道0ADC1->CR2 |= (1 << 0);          // 使能ADCADC1->CR2 |= (1 << 30);         // 軟件啟動
}

如果你需要掃描兩個通道,配合 DMA,還可以增加以下配置:

ADC1->CR1 |= (1 << 8);             // 開啟掃描模式
ADC1->SQR1 = (2 - 1) << 20;        // 轉換2個通道
ADC1->SQR3 = (10 << 0) | (11 << 5); // 第一個是IN10,第二個是IN11

九、結尾總結

STM32F407 的 ADC 模式雖然看起來復雜,但只要掌握以下兩點,就能靈活應對各種應用場景:

  1. 是否連續轉換?(轉換一次就停 or 一直采樣)
  2. 是否掃描多個通道?(單通道 or 多通道輪流)

掌握這兩對組合,就能輕松根據項目需求靈活配置 ADC。

如果你正在調試 ADC,建議一開始使用非掃描 + 單次轉換調試通道,然后逐步擴展到掃描 + DMA 模式,循序漸進、效率最高。


如果你需要后續內容如 DMA 配置講解、ADC 中斷讀取等,也可以留言告訴我,后續我會寫專門的篇章補充。希望本文對你有幫助,感謝閱讀。

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

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

相關文章

開源模型應用落地-工具使用篇-從零開始搭建Qdrant Web UI-可視化管理工具-Windows(十)

一、前言 Qdrant 是一個高性能的向量搜索引擎&#xff0c;廣泛應用于相似性搜索、推薦系統和大規模數據檢索等場景。雖然其原生 API 提供了強大的功能&#xff0c;但對于開發者和運維人員來說&#xff0c;缺乏直觀的可視化界面常常增加了使用門檻。為了解決這一問題&#xff0c…

高頻交易技術:訂單簿分析與低延遲架構——從Level 2數據挖掘到FPGA硬件加速的全鏈路解決方案

高頻交易技術&#xff1a;訂單簿分析與低延遲架構——從Level 2數據挖掘到FPGA硬件加速的全鏈路解決方案 一、引言&#xff1a;高頻交易的技術本質 1.1 速度即利潤的微觀戰場 數據揭示&#xff1a;據NYSE實測&#xff0c;每降低1微秒延遲可獲得年化$700-1500萬套利窗口&#…

基于生成對抗網絡(GAN)的圖像生成與編輯:原理、應用與實踐

前言 生成對抗網絡&#xff08;GAN&#xff09;是近年來深度學習領域中最具影響力的技術之一。自2014年由Ian Goodfellow等人首次提出以來&#xff0c;GAN已經在圖像生成、圖像編輯、風格轉換等多個領域取得了令人矚目的成果。GAN的核心思想是通過生成器&#xff08;Generator&…

pytorch基本運算-梯度運算:requires_grad_(True)和backward()

引言 前序學習進程中&#xff0c;已經對pytorch基本運算中的求導進行了基礎討論&#xff0c;相關文章鏈接為&#xff1a; 導數運算pytorch基本運算-導數和f-string-CSDN博客 實際上&#xff0c;求導是微分的進一步計算&#xff0c;要想求導的前一步其實是計算微分&#xff1…

idea64.exe.vmoptions配置

這個idea64.exe.vmoptions文件是用于配置 IntelliJ IDEA&#xff08;64位版本&#xff09;運行時的 Java 虛擬機&#xff08;JVM&#xff09;參數。這些參數直接影響到 IDEA 的性能、內存使用、調試能力和行為。 下面是對文件中每一行配置的詳細解讀&#xff1a; -Xms2048m 作…

齊次變換矩陣相乘的復合變換:左乘與右乘的深度解析

在三維幾何變換中,齊次變換矩陣相乘是實現復雜變換的核心方法。本文將通過一個包含四個變換步驟的完整示例,深入探討齊次變換矩陣左乘和右乘的區別,并結合 Python sympy 庫的代碼實現,詳細闡述變換過程和結果差異。 二維齊次坐標的旋轉變換 在二維齊次坐標系中,一個點可以…

5g LDPC編譯碼-LDPC編碼

目錄 1、LDPC編碼基礎知識 2、5g的LDPC編碼 2.1 LDPC分塊: 2.2 LDCP編碼 2.3 校驗位的產生 1、LDPC編碼基礎知識 LDPC屬于線性分組碼,線性分組碼的基本知識如下: 編碼后的碼字是由初始二進制序列與生成矩陣在二進制域相乘后得到,生成矩陣與校驗矩陣,校驗矩陣與編碼后…

OpenVINO使用教程--resnet分類模型部署

OpenVINO使用教程--resnet分類模型部署 本節內容模型準備推理測試分析&總結本節內容 OpenVINO 根據AI技術類型將部署任務分成傳統模型模型部署和生成式AI模型部署,傳統模型指的是各種CNN小模型,這部分部署只需要OpenVINO包,具體安裝教程可以參考之前的章節:OpenVINO環境…

無字母數字webshell的命令執行

在Web安全領域&#xff0c;WebShell是一種常見的攻擊手段&#xff0c;通過它攻擊者可以遠程執行服務器上的命令&#xff0c;獲取敏感信息或控制系統。而無字母數字WebShell則是其中一種特殊形式&#xff0c;通過避免使用字母和數字字符&#xff0c;來繞過某些安全機制的檢測。 …

C++斯特林數在C++中的數學理論與計算實現1

一、 斯特林數概述 1.1 組合數學中的核心地位 斯特林數&#xff08;Stirling Numbers&#xff09;是組合數學中連接排列、組合與分劃問題的核心工具&#xff0c;分為兩類&#xff1a; 第一類斯特林數&#xff08;Stirling Numbers of the First Kind&#xff09;&#xff1a…

[C++] STL大家族之<map>(字典)容器(附洛谷)

map-目錄 使用方法頭文件與聲明定義基本操作 使用方法 頭文件與聲明定義 頭文件是: #include <map>我們這樣聲明一個字典: map</*key_type*/, /*value_type*/> /*map_name*/; // 例子: map<int, char> mp;這里稍作解釋: key_type是你每個鍵值對中的鍵的…

使用 Flutter 在 Windows 平臺開發 Android 應用

以下是完整的開發流程&#xff0c;包括環境搭建、代碼實現和應用發布&#xff0c;幫助你開發一個具有地圖顯示、TCP 通信功能的 Android 應用。 一、環境搭建 1. 安裝 Flutter SDK 從 Flutter 官網 下載最新穩定版 SDK解壓到本地目錄&#xff08;如 D:\flutter&#xff09;添…

【模板】埃拉托色尼篩法(埃氏篩)

一、算法簡介 在數論與編程競賽中&#xff0c;求解 [ 1 , n ] [1,n] [1,n] 范圍內的所有質數是常見的基礎問題。埃拉托色尼篩法&#xff08;Sieve of Eratosthenes&#xff09; 是一種古老而高效的算法&#xff0c;可以在 O ( n log ? log ? n ) O(n \log \log n) O(nlogl…

AI Agent實戰 - LangChain+Playwright構建火車票查詢Agent

本篇文章將帶你一步步構建一個智能火車票查詢 Agent&#xff1a;你只需要輸入自然語言指令&#xff0c;例如&#xff1a; “幫我查一下6月15號從上海到南京的火車票” Agent就能自動理解你的需求并使用 Playwright 打開 12306 官網查詢前 10 條車次信息&#xff0c;然后匯總結果…

RabbitMQ的交換機和隊列概念

&#x1f3ea; 場景&#xff1a;一個外賣平臺的后臺系統 假設你開了一家在線外賣平臺&#xff1a; 飯店是消息的生產者&#xff08;Producer&#xff09;顧客是消息的消費者&#xff08;Consumer&#xff09;你開的外賣平臺就是RabbitMQ消息系統 &#x1f501; 第一部分&…

德國馬克斯·普朗克數學研究所:幾何朗蘭茲猜想

2025年科學突破獎 4月5日在美國洛杉磯揭曉&#xff1a;數學突破獎&#xff1a;德國馬克斯普朗克數學研究所&#xff1a;幾何朗蘭茲猜想 德國馬克斯普朗克數學研究所&#xff08;Max Planck Institute for Mathematics, MPIM&#xff09;在幾何朗蘭茲猜想的研究中扮演了核心角色…

TerraFE 腳手架開發實戰系列(一):項目架構設計與技術選型

TerraFE 腳手架開發實戰系列&#xff08;一&#xff09;&#xff1a;項目架構設計與技術選型 前言 在前端開發中&#xff0c;項目初始化往往是一個重復且繁瑣的過程。每次新建項目都需要配置 webpack、安裝依賴、設置目錄結構等&#xff0c;這些重復性工作不僅浪費時間&#…

準確--CentOS 7.9在線安裝docker

一、安裝Docker前的準備工作 操作系統版本為CentOS 7.9&#xff0c;內核版本需要在3.10以上。確保能夠連通互聯網&#xff0c;為避免網絡異常&#xff0c;建議關閉Linux的防火墻&#xff08;生產環境下請根據實際情況設置防火墻出入站規則&#xff09;。 # 查看內核版本 sudo…

中興B860AV1.1強力降級固件包

中興B860AV1.1強力降級固件包 關于中興b860av1.1頑固盒子降級教程終極版 將附件解壓好以后&#xff0c;準備一個8G以下的U盤重新格式化為FAT32格式后&#xff0c;并插入電腦 將以下文件及文件夾一同復制到優盤主目錄下&#xff08;見下圖&#xff09; 全選并復制到U盤主目錄下&…

nacos-作為注冊中心與springcloud整合(三)

前一篇文章nacos-簡介和初體驗&#xff08;一&#xff09;我們已經在服務器部署了nacos應用了。 在另外一篇文章中nacos-作為配置中心與springcloud整合&#xff08;二&#xff09;已經作為配置中心整合到springcloud 接下來讓我們嘗試把nacos作為注冊中心和springcloud中整合&…