一、基礎知識1.18個(gè)通道,可測16個(gè)外部和2個(gè)內部信號源,可設置成單側、連續、掃描、間斷模式執行
本文引用地址:http://dyxdggzs.com/article/201611/322993.htm2.12位精度
3.掃描模式,通道0到通道n的自動(dòng)轉化
4.自校準
5.按通道配置采樣時(shí)間
6.間斷模式?
7.雙ADC模式?
8.供電要求2.4~3.6V
9.輸入范圍0~3.6V
二、功能描述
1.通道選擇:
STM32的每個(gè)ADC模塊通過(guò)內部的模擬多路開(kāi)關(guān),可以切換到不同的輸入通道并進(jìn)行轉換。在任意多個(gè)通道上以任意順序進(jìn)行的一系列轉換構成成組轉換。例如,可以如下順序完成轉換:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。
有2種劃分轉換組的方式:規則通道組和注入通道組。通常規則通道組中可以安排最多16個(gè)通道,而注入通道組可以安排最多4個(gè)通道。
在執行規則通道組掃描轉換時(shí),如有例外處理則可啟用注入通道組的轉換。規則轉換和注入轉換均有外部觸發(fā)選項,規則通道轉換期間有DMA請求產(chǎn)生,而注入轉換則無(wú)DMA請求,需要用查詢(xún)或中斷的方式保存轉換的數據。
一個(gè)不太恰當的比喻是:規則通道組的轉換好比是程序的正常執行,而注入通道組的轉換則好比是程序正常執行之外的一個(gè)中斷處理程序。 規則組由多達16個(gè)轉換組成。規則通道和它們的轉換順序在A(yíng)DC_SQRx寄存器中選擇。規則組中轉換的總數寫(xiě)入ADC_SQR1寄存器的L[3:0]位中。
注入組由多達4個(gè)轉換組成。注入通道和它們的轉換順序在A(yíng)DC_JSQR寄存器中選擇。注入組里的轉換總數目寫(xiě)入ADC_JSQR寄存器的L[1:0]位中。
如果規則轉換已經(jīng)在運行,為了在注入轉換后確保同步,所有的ADC(主和從)的規則轉換被停止,并在注入轉換結束時(shí)同步恢復,見(jiàn)圖示。

2.單次轉換模式:
單次轉換模式里,ADC 只執行一次轉換。
3.連續轉換模式:
在連續轉換模式中,當前面ADC 轉換一結束馬上就啟動(dòng)另一次轉換。
4.掃描模式:
此模式用來(lái)掃描一組模擬通道。
5.注入模式管理:
(1)觸發(fā)注入。詳見(jiàn)參考手冊
(2)自動(dòng)注入。如果設置了 JAUTO 位,在規則組通道之后,注入組通道被自動(dòng)轉換。這可以用
來(lái)轉換在A(yíng)DC_SQRx 和ADC_JSQR 寄存器中設置的多至20 個(gè)轉換序列。
在此模式里,必須禁止注入通道的外部觸發(fā)。
6.間斷模式:
(1)規則組
此模式通過(guò)設置 ADC_CR1 寄存器上的DISCEN 位激活。它可以用來(lái)執行一個(gè)短序列的n 次轉換(n<=8),此轉換是ADC_SQRx 寄存器所選擇的轉換序列的一部分。N 由ADC_CR1 寄存器的DISCNUM[2:0]位給出。一個(gè)外部觸發(fā)信號可以啟動(dòng)ADC_SQRx 寄存器中描述的下一輪 n 次轉換,直到此序列所有的轉換完成為止??偟男蛄虚L(cháng)度由ADC_SQR1 寄存器的L[3:0]定義。
舉例:
n=3,被轉換的通道 = 0, 1, 2, 3, 6, 7, 9, 10
第一次觸發(fā):轉換的序列為 0,1,2
第二次觸發(fā):轉換的序列為 3,6,7
第三次觸發(fā):轉換的序列為 9,10,并產(chǎn)生EOC 事件
第四次觸發(fā):轉換的序列 0,1,2
注意: 當一規則組以間斷模式轉換時(shí),轉換序列結束后不自動(dòng)從頭開(kāi)始。當所有子組被轉換完成,下一次觸發(fā)啟動(dòng)第一個(gè)子組的轉換。在上面的例子中,第四次觸發(fā)重新轉換第一子組的通道 0,1 和2。
(2)注入組
此模式通過(guò)設置 ADC_CR1 寄存器的JDISCEN 位激活。在一個(gè)外部觸發(fā)事件后,給模式按序轉換ADC_JSQR 寄存器中選擇的序列。
一個(gè)外部觸發(fā)信號可以啟動(dòng)ADC_JSQR 寄存器選擇的下一個(gè)通道序列的轉換,直到序列中所有的轉換完成為止??偟男蛄虚L(cháng)度ADC_JSQR 寄存器的JL[1:0]位定義。
例子:
n=1,被轉換的通道 = 1,2,3
第一次觸發(fā):通道1 被轉換
第二次觸發(fā):通道2 被轉換
第三次觸發(fā):通道3 被轉換,并且產(chǎn)生EOC 和JEOC 事件
第四次觸發(fā):通道1 被轉換
注意:1 當完成所有注入通道轉換,下個(gè)觸發(fā)啟動(dòng)第1 個(gè)注入通道的轉換。在上述例子中,第四個(gè)觸發(fā)重新轉換第1 個(gè)注入通道1。
2 不能同時(shí)使用自動(dòng)注入和間斷模式。3 必須避免同時(shí)為規則和注入組設置間斷模式。間斷模式只能作用于一組轉換。
7.雙ADC模式
8.數據對齊
ADC_CR2 寄存器中的ALIGN位選擇轉換后數據儲存的對齊方式。數據可以左對齊或右對齊,如圖146 和圖147 所示。
注入組通道轉換的數據值已經(jīng)減去了在A(yíng)DC_JOFRx 寄存器中定義的偏移量,因此結果可以是一個(gè)負值。SEXT 位是擴展的符號值。
對于規則組通道,不需減去偏移值,因此只有12 個(gè)位有效。
數據右對齊:
注入組
SEXT SEXT SEXT SEXT D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
規則組
0 0 0 0 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
數據左對齊:
注入組
SEXT D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 0 0 0
規則組
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初始化結構體變量
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC1和ADC2工作在獨立模式
ADC_InitStructure.ADC_ScanConvMode = ENABLE; //使能掃描
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//ADC轉換工作在連續模式
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//由軟件控制轉換
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//轉換數據右對齊
ADC_InitStructure.ADC_NbrOfChannel = 1;//轉換通道數目為1
ADC_Init(ADC1, &ADC_InitStructure); //初始化ADC
ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_28Cycles5);
//ADC1選擇通道14,規則組采樣順序(1~16),采樣時(shí)間239.5個(gè)周期
ADC_DMACmd(ADC1, ENABLE);//使能ADC1模塊DMA
ADC_Cmd(ADC1, ENABLE);//使能ADC1
ADC_ResetCalibration(ADC1); //重置ADC1校準寄存器
while(ADC_GetResetCalibrationStatus(ADC1));//等待ADC1校準重置完成
ADC_StartCalibration(ADC1);//開(kāi)始ADC1校準
while(ADC_GetCalibrationStatus(ADC1));//等待ADC1校準完成
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能ADC1軟件開(kāi)始轉換
}
評論