一、ADC框圖

ADC輸入電源

2. 輸入通道
這16個通道對應著不同的IO口,此外 ADC1 的通道 16 連接到了芯片內(nèi)部的溫度傳感器,通道 17連接到了VRefInt(內(nèi)部參照電壓)。

3. 規(guī)則通道與注入通道
a)規(guī)則通道組:
i)相當正常運行的程序。最多16個通道。規(guī)則通道和它的轉(zhuǎn)換順序在ADC_SQRx寄存器中選擇,規(guī)則組轉(zhuǎn)換的總數(shù)應寫入ADC_SQR1寄存器的L[3:0]中。
ii)規(guī)則通道中的轉(zhuǎn)換順序由三個寄存器控制:SQR1、SQR2、SQR3,它們都是32位寄存器。SQR寄存器控制著轉(zhuǎn)換通道的數(shù)目和轉(zhuǎn)換順序,只要在對應的寄存器位SQx中寫入相應的通道,這個通道就是第x個轉(zhuǎn)換。



b)注入通道組:
i)相當于中斷。最多4個通道。注入組和它的轉(zhuǎn)換順序在ADC_JSQR寄存器中選擇。注入組里轉(zhuǎn)化的總數(shù)應寫入ADC_JSQR寄存器的JL[1:0]中。
ii)和規(guī)則通道轉(zhuǎn)換順序的控制一樣,注入通道的轉(zhuǎn)換也是通過注入寄存器來控制,只不過只有一個JSQR寄存器來控制。

4. 規(guī)則通道與注入通道
ADC需要一個觸發(fā)信號來實行模/數(shù)轉(zhuǎn)換,其一就是通過直接配置寄存器觸發(fā),通過配置控制寄存器CR2的ADON位,寫1時開始轉(zhuǎn)換,寫0時停止轉(zhuǎn)換。另外,還可以通過內(nèi)部定時器或者外部IO觸發(fā)轉(zhuǎn)換,也就是說可以利用內(nèi)部時鐘讓ADC進行周期性的轉(zhuǎn)換,也可以利用外部IO使ADC在需要時轉(zhuǎn)換,具體的觸發(fā)由控制寄存器CR2決定。

5.轉(zhuǎn)換時間
ADC的每一次信號轉(zhuǎn)換都要時間,這個時間就是轉(zhuǎn)換時間,轉(zhuǎn)換時間由輸入時鐘和采樣周期來決定。
a)輸入時鐘
由于ADC在STM32中是掛載在APB2總線上的,所以ADC得時鐘是由PCLK2經(jīng)過分頻得到的。
b)采樣周期
ADC預分頻器的ADCCLK是ADC模塊的時鐘來源。通常,由時鐘控制器提供的ADC_CLK時鐘和PCLK2(APB2時鐘)同步。RCC控制器為ADC時鐘提供一個專用的可編程預分頻器。 分頻因子由RCC_CFGR的ADCPRE[1:0]配置,可配置2/4/6/8分頻。
為了保證ADC轉(zhuǎn)換結(jié)果的準確性,ADC的時鐘最好不超過14M。

T = 采樣時間 + 12.5個周期,其中1周期為1/ADC_CLK
例如,當 ADC_CLK=14Mhz 的時候,并設(shè)置 1.5 個周期的采樣時間,則得到: Tcovn=1.5+12.5=14 個周期=1us。
6.數(shù)據(jù)寄存器
轉(zhuǎn)換完成后的數(shù)據(jù)就存放在數(shù)據(jù)寄存器中,但數(shù)據(jù)的存放也分為規(guī)則通道轉(zhuǎn)換數(shù)據(jù)和注入通道轉(zhuǎn)換數(shù)據(jù)的。
a)規(guī)則數(shù)據(jù)寄存器
規(guī)則數(shù)據(jù)寄存器負責存放規(guī)則通道轉(zhuǎn)換的數(shù)據(jù),通過32位寄存器ADC_DR來存放。當使用ADC獨立模式(也就是只使用一個ADC,可以使用多個通道)時,數(shù)據(jù)存放在低16位中,當使用ADC多模式時高16位存放ADC2的數(shù)據(jù)。需要注意的是ADC轉(zhuǎn)換的精度是12位,而寄存器中有16個位來存放數(shù)據(jù),所以要規(guī)定數(shù)據(jù)存放是左對齊還是右對齊。

當使用多個通道轉(zhuǎn)換數(shù)據(jù)時,會產(chǎn)生多個轉(zhuǎn)換數(shù)據(jù),然而數(shù)據(jù)寄存器只有一個,多個數(shù)據(jù)存放在一個寄存器中會覆蓋數(shù)據(jù)導致ADC轉(zhuǎn)換錯誤,所以我們經(jīng)常在一個通道轉(zhuǎn)換完成之后就立刻將數(shù)據(jù)取出來,方便下一個數(shù)據(jù)存放。一般開啟DMA模式將轉(zhuǎn)換的數(shù)據(jù),傳輸在一個數(shù)組中,程序?qū)?shù)組讀操作就可以得到轉(zhuǎn)換的結(jié)果。
b)注入數(shù)據(jù)寄存器

7.數(shù)據(jù)寄存器

a)規(guī)則通道轉(zhuǎn)換完成中斷
規(guī)則通道數(shù)據(jù)轉(zhuǎn)換完成之后,可以產(chǎn)生一個中斷,可以在中斷函數(shù)中讀取規(guī)則數(shù)據(jù)寄存器的值。這也是單通道時讀取數(shù)據(jù)的一種方法。
b)注入通道轉(zhuǎn)換完成中斷
注入通道數(shù)據(jù)轉(zhuǎn)換完成之后,可以產(chǎn)生一個中斷,并且也可以在中斷中讀取注入數(shù)據(jù)寄存器的值,達到讀取數(shù)據(jù)的作用。
c)模擬看門狗事件
當輸入的模擬量(電壓)不再閾值范圍內(nèi)就會產(chǎn)生看門狗事件,就是用來監(jiān)視輸入的模擬量是否正常。
以上中斷的配置都由ADC_SR寄存器決定:

鏈接:STM32—ADC詳解_stm32adc功能詳解_Aspirant-GQ的博客-CSDN博客
二、ADC的轉(zhuǎn)換模式
1. 單次轉(zhuǎn)換模式
ADC只執(zhí)行一次轉(zhuǎn)換;
2. 連續(xù)轉(zhuǎn)換模式(Continuous Conversion Mode)
轉(zhuǎn)換結(jié)束之后馬上開始新的轉(zhuǎn)換;
3. 掃描模式(Scan Conversion Mode)
ADC掃描被規(guī)則通道和注入通道選中的所有通道,在每個組的每個通道上執(zhí)行單次轉(zhuǎn)換。在每個轉(zhuǎn)換結(jié)束時,這一組的下一個通道被自動轉(zhuǎn)換。如果設(shè)置了CONT位(開啟了連續(xù) 轉(zhuǎn)換模式),轉(zhuǎn)換不會在選擇組的最后一個通道上停止,而是再次從選擇組的第一個通道繼續(xù)轉(zhuǎn)換。
掃描模式簡單的說是一次對所有所選中的通道進行轉(zhuǎn)換,比如開了ch0、ch1、ch4、ch5。ch0轉(zhuǎn)換完以后就會自動轉(zhuǎn)換通道1、4、5直到轉(zhuǎn)換完這個過程不能被打斷。如果開啟了連續(xù)轉(zhuǎn)換模式,則會在轉(zhuǎn)換完ch5之后開始新一輪的轉(zhuǎn)換。
4. 間斷模式(Discontinuous Conversion Mode)
觸發(fā)一次,轉(zhuǎn)換一個通道,在觸發(fā),在轉(zhuǎn)換。在所選轉(zhuǎn)換通道循環(huán),由觸發(fā)信號啟動新一輪的轉(zhuǎn)換,直到轉(zhuǎn)換完成為止。
間斷模式可以說是對掃描模式的一種補充。它可以把0、1、4、5這四個通道進行分組??梢苑殖?、1一組,4、5一組。也可以每個通道單獨配置為一組。這樣每一組轉(zhuǎn)換之前都需要先觸發(fā)一次。
三、ADC單通道與多通道
ADC單通道
只進行一次ADC轉(zhuǎn)換:配置為“單次轉(zhuǎn)換模式”,掃描模式關(guān)閉。ADC通道轉(zhuǎn)換一次后,就停止轉(zhuǎn)換。等待再次使能后才會重新轉(zhuǎn)換。
進行連續(xù)ADC轉(zhuǎn)換:配置為“連續(xù)轉(zhuǎn)換模式”,掃描模式關(guān)閉。ADC通道轉(zhuǎn)換一次后,接著進行下一次轉(zhuǎn)換,不斷連續(xù)。
ADC多通道
只進行一次ADC轉(zhuǎn)換:配置為“單次轉(zhuǎn)換模式”,掃描模式使能。ADC的多個通道,按照配置的順序依次轉(zhuǎn)換一次后,就停止轉(zhuǎn)換。等待再次使能后才會重新轉(zhuǎn)換。
進行連續(xù)ADC轉(zhuǎn)換:配置為“連續(xù)轉(zhuǎn)換模式”,掃描模式使能。ADC的多個通道,按照配置的順序依次轉(zhuǎn)換一次后,接著進行下一次轉(zhuǎn)換,不斷連續(xù)。
需要注意的是,如果開啟了多通道ADC,需要將每次轉(zhuǎn)換的數(shù)據(jù)及時取出,否則會被后面的的數(shù)據(jù)覆蓋掉。
鏈接:https://blog.csdn.net/as480133937/article/details/99627062
四、不同通道ADC采樣不同引腳的電壓示例
STM32CubeMX設(shè)置

主函數(shù)
while (1)
{
int16_t adcBuf[2];
for(int i=0;i<2;i++)
{
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,50);
adcBuf[i]=HAL_ADC_GetValue(&hadc1);
printf("adc %d = %d \r\n",i,adcBuf[i]);
}
HAL_ADC_Stop(&hadc1);
HAL_Delay(1000);
}
配置分析
分析配置成這樣的模式,掃描模式是在配置為多個通道必須打開的,CubeMX上也默認好了,只能使能。單次轉(zhuǎn)換模式是我不需要不停的去采集每個通道值,而是把兩個通道采集完以后就讓它停止。間斷模式可以讓掃描的兩個通道進行分成兩個組,CubeMX參數(shù)里面Number of Discontinous Conversions是配置間斷組每個組有幾個通道的,這里必須配置為1(否則在獲取ad值得時候只能讀取到每個間斷組最后一個通道)。
鏈接:https://blog.csdn.net/qq_35241004/article/details/120165458文章來源:http://www.zghlxwxcb.cn/news/detail-459246.html
輸出結(jié)果
這里將PC4引腳連接到了GND,PC5引腳連接到了3.3V。文章來源地址http://www.zghlxwxcb.cn/news/detail-459246.html

到了這里,關(guān)于STM32 | STM32CubeMX基礎(chǔ)之ADC的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!