STM32的同步規(guī)則模式使用
由于要采集電壓、電流以計算功率、阻抗等信息,STM32的同步規(guī)則模式很適合于這種情景。使用時有幾點(diǎn)需要注意的:
1、選擇正確的模式:ADC_Mode_RegSimult,即DUALMOD[3:0] = 0110,ADC2在雙模式中,這些位為保留位
2、開啟ADC的DMA,在雙ADC模式里,為了在主數(shù)據(jù)寄存器上讀取從轉(zhuǎn)換數(shù)據(jù),必須使能DMA位,即使不使用DMA傳輸規(guī)則通道數(shù)據(jù)。只有ADC1和ADC3能產(chǎn)生DMA請求。所以只需設(shè)置ADC1的DMA:ADC_DMACmd(ADC1, ENABLE);
3、ADC2的轉(zhuǎn)換數(shù)據(jù)存在ADC1_DR的高半字;
4、不要在2個ADC上轉(zhuǎn)換相同的通道((兩個ADC在同一個通道上的采樣時間不能重疊)。
5、ADC2的CR2寄存器的第20位——EXTTRIG:規(guī)則通道的外部觸發(fā)轉(zhuǎn)換模式必須開啟(軟件啟動的時候也要),這樣才能利用到ADC1的觸發(fā)信號。不然的話,需要手動再軟啟動一次ADC2,例如ADC_SoftwareStartConvCmd(ADC2, ENABLE);
但是,假如你設(shè)置了這個位之后,就不需要手動軟啟動ADC2了,所以考慮到同步,這樣比較好:
//都是軟啟動ADC_ExternalTrigConv_None/*EnableADC2externaltriggerconversion*/ADC_ExternalTrigConvCmd(ADC2,ENABLE);//同步規(guī)則模式,可使用ADC1的觸發(fā)信號ADC_SoftwareStartConvCmd(ADC1,ENABLE);/*StartADC2SoftwareConversion*///ADC_SoftwareStartConvCmd(ADC2,ENABLE);//不需要了
用ADC_SoftwareStartConvCmd(ADC2, ENABLE);為什么可以,一方面它也設(shè)置了EXTTRIG位,另一方面也設(shè)置了SWSTART。但我覺得先用ADC_ExternalTrigConvCmd(ADC2, ENABLE);的話,一會只要ADC1一啟動,兩者就同時啟動了,這樣更正確一點(diǎn)。