STM32 ADC模數轉換器

ADC簡介

????????ADC(Analog-Digital Converter)模擬-數字轉換器

????????ADC可以將引腳上連續變化的模擬電壓轉換為內存中存儲的數字變量,建立模擬電路到數字電路的橋梁

????????12位逐次逼近型ADC1us轉換時間

????????輸入電壓范圍:0~3.3V,轉換結果范圍:0~4095

????????18個輸入通道,可測量16個外部和2個內部信號源

????????規則組和注入組兩個轉換單元

????????模擬看門狗自動監測輸入電壓范圍

????????STM32F103C8T6 ADC資源:ADC1ADC210個外部輸入通道

ADC框圖

ADC基本結構圖

輸入通道

通道

ADC1

ADC2

ADC3

通道0

PA0

PA0

PA0

通道1

PA1

PA1

PA1

通道2

PA2

PA2

PA2

通道3

PA3

PA3

PA3

通道4

PA4

PA4

PF6

通道5

PA5

PA5

PF7

通道6

PA6

PA6

PF8

通道7

PA7

PA7

PF9

通道8

PB0

PB0

PF10

通道9

PB1

PB1

通道10

PC0

PC0

PC0

通道11

PC1

PC1

PC1

通道12

PC2

PC2

PC2

通道13

PC3

PC3

PC3

通道14

PC4

PC4

通道15

PC5

PC5

通道16

溫度傳感器

通道17

內部參考電壓

轉換模式

單詞轉換 非掃描模式

連續轉換 非掃描模式

單次轉換 掃描模式

連續轉換 掃描模式

轉換時間

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

STM32 ADC的總轉換時間為:

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

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

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

校準

????????ADC有一個內置自校準模式。校準可大幅減小因內部電容器組的變化而造成的準精度誤差。校準期間,在每個電容器上都會計算出一個誤差修正碼(數字值),這個碼用于消除在隨后的轉換中每個電容器上產生的誤差

????????建議在每次上電后執行一次校準

啟動校準前, ADC必須處于關電狀態超過至少兩個ADC時鐘周期

函數介紹

在rcc.h里,這個函數是用來配置ADCCLK分頻器的,它可以對APB2的72MHz時鐘選擇2、4、6、8分頻,輸入到ADCCLK

void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);

接下來都是在adc.h里,

//DeInit恢復缺省設置,恢復為上電默認狀態,
void ADC_DeInit(ADC_TypeDef* ADCx);//初始化
void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);//結構體初始化
void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct);//給ADC上電的
void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState);

開啟DMA輸出信號的,如果使用DMA轉運數據,就得調用這個函數

void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState);

中斷輸出控制,用于控制某個中斷,能不能通往NVIC

void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState);

下面四個函數分別是復位校準、獲取復位校準狀態,開始校準、獲取開始校準狀態,這就是用于控制校準的函數,在ADC初始化完成之后,以此調用

void ADC_ResetCalibration(ADC_TypeDef* ADCx);
FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx);
void ADC_StartCalibration(ADC_TypeDef* ADCx);
FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx);

這個是用于軟件觸發的函數

void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);

ADC獲取軟件開始轉換狀態(一般不用這個函數)

FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx);

第一個獲取標志位狀態,用來判斷轉換是否結束,第二個清除標志位,第三個獲取中斷狀態,第四個清除中斷掛起位

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);

配置間斷模式,第一個函數是,每個幾個通道間斷一次,第二個函數是,是否啟用間斷模式

void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number);
void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);

ADC規則組通道,第一個參數ADCx,第二個參數ADC_Channel就是你想指定的通道,第三個Rank就是序列幾的位置,第四個SampleTime就是指定通道的采樣時間這個函數比較重要

void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);

ADC外部觸發轉換控制,就是是否允許外部觸發轉換

void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);

ADC獲取轉換值,就是獲取AD轉換的數據寄存器,讀取轉換結果就是要使用這個函數(這個函數比較重要)

uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);

ADC獲取雙模式轉換值,這個是雙ADC模式讀取轉換結果的函數

uint32_t ADC_GetDualModeConversionValue(void);

下面三個函數是對模擬看門狗進行配置的,第一個是是否啟動模擬看門狗,第二個是配置高低閾值,第三個是配置看門的通道,

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);

ADC溫度傳感器,內部參考電壓控制,這個是用來開啟內部的兩個通道的,如果要用這兩個通道,就得調用這個函數

void ADC_TempSensorVrefintCmd(FunctionalState NewState);

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

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

相關文章

(2025,LLM,下一 token 預測,擴散微調,L2D,推理增強,可擴展計算)從大語言模型到擴散微調

Large Language Models to Diffusion Finetuning 目錄 1. 概述 2. 研究背景 3. 方法 3.1 用于 LM 微調的高斯擴散 3.2 架構 4. 主要實驗結果 5. 結論 1. 概述 本文提出了一種新的微調方法——LM to Diffusion (L2D),旨在賦予預訓練的大語言模型(…

DeepSeek 與 ChatGPT 對比分析

一、技術背景與研發團隊 ChatGPT 由 OpenAI 開發,自 2015 年 OpenAI 成立以來,經過多年的技術積累和迭代,從 GPT-1 到 GPT-4o,每一次升級都帶來了技術上的突破。OpenAI 擁有雄厚的技術實力和海量的數據、強大的算力支持&#xff…

學習threejs,pvr格式圖片文件貼圖

👨??? 主頁: gis分享者 👨??? 感謝各位大佬 點贊👍 收藏? 留言📝 加關注?! 👨??? 收錄于專欄:threejs gis工程師 文章目錄 一、🍀前言1.1 ??PVR貼圖1.2 ??THREE.Mesh…

DeepSeek R1技術報告關鍵解析(8/10):DeepSeek-R1 的“aha 時刻”,AI 自主學習的新突破

1. 什么是 AI 的“aha 時刻”? 在強化學習過程中,AI 的推理能力并不是線性增長的,而是會經歷一些關鍵的“頓悟”時刻,研究人員將其稱為“aha 時刻”。 這是 AI 在訓練過程中突然學會了一種新的推理方式,或者能夠主動…

python:遞歸函數與lambda函數

遞歸函數:1.函數內調用自己 2.有一個出口 1.遞歸 一.有出口時 def sum(num):if num1:return 1return numsum(num-1) asum(3) print(a) #num3 3sum(2) #num2 2sum(1) #num1是返回1 #即3sum(2)即32sum(1)即321運行結果 6 二.無出口時 def sum(num)…

ABB 3BSE018741R30 帶插頭連接器的電纜

產品ID:3BSE018741R30 ABB型號名稱:PFTL 101/201/PFCL 201 30米 目錄描述:帶插頭連接器的電纜,30米 ABB型號名稱:PFTL 101/201/PFCL 201 30米 核心信用:0.00 原產國:瑞典波蘭 海關稅則號:85389091 框架尺寸:備件 毛重:5公斤 媒體描述:帶插頭連接器的電纜 最小訂購數…

SpringMVC請求

一、RequestMapping注解 RequestMapping注解的作用是建立請求URL和處理方法之間的對應關系 RequestMapping注解可以作用在方法和類上 1. 作用在類上:第一級的訪問目錄 2. 作用在方法上:第二級的訪問目錄 3. 細節:路徑可以不編寫 / 表示應…

VUE的響應性調試:組件調試鉤子、計算屬性調試、偵聽器調試【僅會在開發模式下工作】

文章目錄 引言I 組件調試鉤子調試事件對象的類型定義鉤子II 計算屬性調試例子回調函數說明III 偵聽器調試引言 VUE的響應性調試的使用場景:確切地知道Vue 的響應性系統正在跟蹤什么,或者是什么導致了組件重新渲染。 I 組件調試鉤子 組件調試鉤子僅會在開發模式下工作 調試…

tkvue 入門,像寫html一樣寫tkinter

介紹 沒有官網&#xff0c;只有例子 安裝 像寫vue 一樣寫tkinter 代碼 pip install tkvue作者博客 修改樣式 import tkvue import tkinter.ttk as ttktkvue.configure_tk(theme"clam")class RootDialog(tkvue.Component):template """ <Top…

藍橋杯試題:排序

一、問題描述 給定 nn 個正整數 a1,a2,…,ana1?,a2?,…,an?&#xff0c;你可以將它們任意排序。現要將這 nn 個數字連接成一排&#xff0c;即令相鄰數字收尾相接&#xff0c;組成一個數。問&#xff0c;這個數最大可以是多少。 輸入格式 第一行輸入一個正整數 nn&#xff…

Java—不可變集合

不可變集合&#xff1a;不可以被修改的集合 創建不可變集合的應用場景 如果某個數據不能被修改&#xff0c;把它防御性地拷貝到不可變集合中是個很好的實踐。當集合對象被不可信的庫調用時&#xff0c;不可變形式是安全的。 簡單理解&#xff1a;不想讓別人修改集合中的內容…

每日Attention學習18——Grouped Attention Gate

模塊出處 [ICLR 25 Submission] [link] UltraLightUNet: Rethinking U-shaped Network with Multi-kernel Lightweight Convolutions for Medical Image Segmentation 模塊名稱 Grouped Attention Gate (GAG) 模塊作用 輕量特征融合 模塊結構 模塊特點 特征融合前使用Group…

響應式編程_04Spring 5 中的響應式編程技術棧_WebFlux 和 Spring Data Reactive

文章目錄 概述響應式Web框架Spring WebFlux響應式數據訪問Spring Data Reactive 概述 https://spring.io/reactive 2017 年&#xff0c;Spring 發布了新版本 Spring 5&#xff0c; Spring 5 引入了很多核心功能&#xff0c;這其中重要的就是全面擁抱了響應式編程的設計思想和實…

C/C++編譯器

C/C 代碼是不可跨平臺的&#xff0c;Windows 和 Unix-like 有著不同的 API&#xff0c;C/C 在不同平臺有著不同編譯器。 MSVC Windows 平臺&#xff0c;MSVC 是 Visual Studio 中自帶的 C/C 編譯器。 GCC Unix-like 平臺&#xff0c;GCC 原名 GNU C Compiler&#xff0c;后…

python gltf生成預覽圖

使用Python生成GLTF模型的預覽圖 隨著3D技術的不斷發展&#xff0c;GLTF&#xff08;GL Transmission Format&#xff09;逐漸成為了Web和移動應用程序中最流行的3D文件格式之一。GLTF文件不僅能以較小的體積存儲復雜的3D模型&#xff0c;還支持動畫、材質、光照和紋理等特性。…

html中的表格屬性以及合并操作

表格用table定義&#xff0c;標簽標題用caption標簽定義&#xff1b;用tr定義表格的若干行&#xff1b;用td定義若干個單元格&#xff1b;&#xff08;當單元格是表頭時&#xff0c;用th標簽定義&#xff09;&#xff08;th標簽會略粗于td標簽&#xff09; table的整體外觀取決…

【JavaScript】《JavaScript高級程序設計 (第4版) 》筆記-Chapter3-語言基礎

三、語言基礎 ECMAScript 的語法很大程度上借鑒了 C 語言和其他類 C 語言&#xff0c;如 Java 和 Perl。ECMAScript 中一切都區分大小寫。無論是變量、函數名還是操作符&#xff0c;都區分大小寫。 所謂標識符&#xff0c;就是變量、函數、屬性或函數參數的名稱。標識符可以由…

【前端】【Ts】【知識點總結】TypeScript知識總結

一、總體概述 TypeScript 是 JavaScript 的超集&#xff0c;主要通過靜態類型檢查和豐富的類型系統來提高代碼的健壯性和可維護性。它涵蓋了從基礎數據類型到高級類型、從函數與對象的類型定義到類、接口、泛型、模塊化及裝飾器等眾多知識點。掌握這些內容有助于編寫更清晰、結…

基于Springboot+vue的租車網站系統

基于SpringbootVue的租車網站系統是一個現代化的在線租車平臺&#xff0c;它結合了Springboot的后端開發能力和Vue的前端交互優勢&#xff0c;為用戶和汽車租賃公司提供了一個高效、便捷、易用的租車體驗和管理工具。以下是對該系統的詳細介紹&#xff1a; 一、系統架構 ?后…

藍橋杯之c++入門(二)【輸入輸出(上)】

目錄 前言1&#xff0e;getchar和 putchar1.1 getchar()1.2 putchar() 2&#xff0e;scanf和 printf2.1 printf2.1.1基本用法2.1.2占位符2.1.3格式化輸出2.1.3.1 限定寬度2.1.3.2 限定小數位數 2.2 scanf2.2.1基本用法2.2.2 占位符2.2.3 scanf的返回值 2.3練習練習1&#xff1a…