一、基礎知識1.18個通道,可測16個外部和2個內(nèi)部信號源,可設置成單側(cè)、連續(xù)、掃描、間斷模式執(zhí)行
本文引用地址:http://m.butianyuan.cn/article/201611/322993.htm2.12位精度
3.掃描模式,通道0到通道n的自動轉(zhuǎn)化
4.自校準
5.按通道配置采樣時間
6.間斷模式?
7.雙ADC模式?
8.供電要求2.4~3.6V
9.輸入范圍0~3.6V
二、功能描述
1.通道選擇:
STM32的每個ADC模塊通過內(nèi)部的模擬多路開關(guān),可以切換到不同的輸入通道并進行轉(zhuǎn)換。在任意多個通道上以任意順序進行的一系列轉(zhuǎn)換構(gòu)成成組轉(zhuǎn)換。例如,可以如下順序完成轉(zhuǎn)換:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。
有2種劃分轉(zhuǎn)換組的方式:規(guī)則通道組和注入通道組。通常規(guī)則通道組中可以安排最多16個通道,而注入通道組可以安排最多4個通道。
在執(zhí)行規(guī)則通道組掃描轉(zhuǎn)換時,如有例外處理則可啟用注入通道組的轉(zhuǎn)換。規(guī)則轉(zhuǎn)換和注入轉(zhuǎn)換均有外部觸發(fā)選項,規(guī)則通道轉(zhuǎn)換期間有DMA請求產(chǎn)生,而注入轉(zhuǎn)換則無DMA請求,需要用查詢或中斷的方式保存轉(zhuǎn)換的數(shù)據(jù)。
一個不太恰當?shù)谋扔魇牵阂?guī)則通道組的轉(zhuǎn)換好比是程序的正常執(zhí)行,而注入通道組的轉(zhuǎn)換則好比是程序正常執(zhí)行之外的一個中斷處理程序。 規(guī)則組由多達16個轉(zhuǎn)換組成。規(guī)則通道和它們的轉(zhuǎn)換順序在ADC_SQRx寄存器中選擇。規(guī)則組中轉(zhuǎn)換的總數(shù)寫入ADC_SQR1寄存器的L[3:0]位中。
注入組由多達4個轉(zhuǎn)換組成。注入通道和它們的轉(zhuǎn)換順序在ADC_JSQR寄存器中選擇。注入組里的轉(zhuǎn)換總數(shù)目寫入ADC_JSQR寄存器的L[1:0]位中。
如果規(guī)則轉(zhuǎn)換已經(jīng)在運行,為了在注入轉(zhuǎn)換后確保同步,所有的ADC(主和從)的規(guī)則轉(zhuǎn)換被停止,并在注入轉(zhuǎn)換結(jié)束時同步恢復,見圖示。
2.單次轉(zhuǎn)換模式:
單次轉(zhuǎn)換模式里,ADC 只執(zhí)行一次轉(zhuǎn)換。
3.連續(xù)轉(zhuǎn)換模式:
在連續(xù)轉(zhuǎn)換模式中,當前面ADC 轉(zhuǎn)換一結(jié)束馬上就啟動另一次轉(zhuǎn)換。
4.掃描模式:
此模式用來掃描一組模擬通道。
5.注入模式管理:
(1)觸發(fā)注入。詳見參考手冊
(2)自動注入。如果設置了 JAUTO 位,在規(guī)則組通道之后,注入組通道被自動轉(zhuǎn)換。這可以用
來轉(zhuǎn)換在ADC_SQRx 和ADC_JSQR 寄存器中設置的多至20 個轉(zhuǎn)換序列。
在此模式里,必須禁止注入通道的外部觸發(fā)。
6.間斷模式:
(1)規(guī)則組
此模式通過設置 ADC_CR1 寄存器上的DISCEN 位激活。它可以用來執(zhí)行一個短序列的n 次轉(zhuǎn)換(n<=8),此轉(zhuǎn)換是ADC_SQRx 寄存器所選擇的轉(zhuǎn)換序列的一部分。N 由ADC_CR1 寄存器的DISCNUM[2:0]位給出。一個外部觸發(fā)信號可以啟動ADC_SQRx 寄存器中描述的下一輪 n 次轉(zhuǎn)換,直到此序列所有的轉(zhuǎn)換完成為止??偟男蛄虚L度由ADC_SQR1 寄存器的L[3:0]定義。
舉例:
n=3,被轉(zhuǎn)換的通道 = 0, 1, 2, 3, 6, 7, 9, 10
第一次觸發(fā):轉(zhuǎn)換的序列為 0,1,2
第二次觸發(fā):轉(zhuǎn)換的序列為 3,6,7
第三次觸發(fā):轉(zhuǎn)換的序列為 9,10,并產(chǎn)生EOC 事件
第四次觸發(fā):轉(zhuǎn)換的序列 0,1,2
注意: 當一規(guī)則組以間斷模式轉(zhuǎn)換時,轉(zhuǎn)換序列結(jié)束后不自動從頭開始。當所有子組被轉(zhuǎn)換完成,下一次觸發(fā)啟動第一個子組的轉(zhuǎn)換。在上面的例子中,第四次觸發(fā)重新轉(zhuǎn)換第一子組的通道 0,1 和2。
(2)注入組
此模式通過設置 ADC_CR1 寄存器的JDISCEN 位激活。在一個外部觸發(fā)事件后,給模式按序轉(zhuǎn)換ADC_JSQR 寄存器中選擇的序列。
一個外部觸發(fā)信號可以啟動ADC_JSQR 寄存器選擇的下一個通道序列的轉(zhuǎn)換,直到序列中所有的轉(zhuǎn)換完成為止??偟男蛄虚L度ADC_JSQR 寄存器的JL[1:0]位定義。
例子:
n=1,被轉(zhuǎn)換的通道 = 1,2,3
第一次觸發(fā):通道1 被轉(zhuǎn)換
第二次觸發(fā):通道2 被轉(zhuǎn)換
第三次觸發(fā):通道3 被轉(zhuǎn)換,并且產(chǎn)生EOC 和JEOC 事件
第四次觸發(fā):通道1 被轉(zhuǎn)換
注意:1 當完成所有注入通道轉(zhuǎn)換,下個觸發(fā)啟動第1 個注入通道的轉(zhuǎn)換。在上述例子中,第四個觸發(fā)重新轉(zhuǎn)換第1 個注入通道1。
2 不能同時使用自動注入和間斷模式。3 必須避免同時為規(guī)則和注入組設置間斷模式。間斷模式只能作用于一組轉(zhuǎn)換。
7.雙ADC模式
8.數(shù)據(jù)對齊
ADC_CR2 寄存器中的ALIGN位選擇轉(zhuǎn)換后數(shù)據(jù)儲存的對齊方式。數(shù)據(jù)可以左對齊或右對齊,如圖146 和圖147 所示。
注入組通道轉(zhuǎn)換的數(shù)據(jù)值已經(jīng)減去了在ADC_JOFRx 寄存器中定義的偏移量,因此結(jié)果可以是一個負值。SEXT 位是擴展的符號值。
對于規(guī)則組通道,不需減去偏移值,因此只有12 個位有效。
數(shù)據(jù)右對齊:
注入組
SEXT SEXT SEXT SEXT D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
規(guī)則組
0 0 0 0 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
數(shù)據(jù)左對齊:
注入組
SEXT D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 0 0 0
規(guī)則組
D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 0
三、 程序設計與軟件配置
1.
void ADC_Config(void)
{
ADC_InitTypeDef ADC_InitStructure;//定義ADC初始化結(jié)構(gòu)體變量
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC1和ADC2工作在獨立模式
ADC_InitStructure.ADC_ScanConvMode = ENABLE; //使能掃描
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//ADC轉(zhuǎn)換工作在連續(xù)模式
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//由軟件控制轉(zhuǎn)換
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//轉(zhuǎn)換數(shù)據(jù)右對齊
ADC_InitStructure.ADC_NbrOfChannel = 1;//轉(zhuǎn)換通道數(shù)目為1
ADC_Init(ADC1, &ADC_InitStructure); //初始化ADC
ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_28Cycles5);
//ADC1選擇通道14,規(guī)則組采樣順序(1~16),采樣時間239.5個周期
ADC_DMACmd(ADC1, ENABLE);//使能ADC1模塊DMA
ADC_Cmd(ADC1, ENABLE);//使能ADC1
ADC_ResetCalibration(ADC1); //重置ADC1校準寄存器
while(ADC_GetResetCalibrationStatus(ADC1));//等待ADC1校準重置完成
ADC_StartCalibration(ADC1);//開始ADC1校準
while(ADC_GetCalibrationStatus(ADC1));//等待ADC1校準完成
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能ADC1軟件開始轉(zhuǎn)換
}
評論