stm32采用dma方式的ADC
# define M 3
#define N 10
uint16_t AD_Value[N][M];
void ADC_Configuration(void)
{
ADC_InitTypeDef ADC_InitStructure;
ADC_DeInit (ADC1 );//將外設(shè)adc1的全部寄存器設(shè)置為默認(rèn)值
ADC_InitStructure .ADC_Mode =ADC_Mode_Independent ;//設(shè)置為獨(dú)立ADC模式
ADC_InitStructure .ADC_ScanConvMode =ENABLE ;//adc工作在掃描模式
ADC_InitStructure .ADC_ContinuousConvMode =ENABLE ;//開啟連續(xù)轉(zhuǎn)換模式
ADC_InitStructure .ADC_ExternalTrigConv =ADC_ExternalTrigConv_None;//外部觸發(fā)轉(zhuǎn)換關(guān)閉
ADC_InitStructure .ADC_DataAlign =ADC_DataAlign_Right ;//數(shù)據(jù)右對齊
ADC_InitStructure .ADC_NbrOfChannel =3;//順序進(jìn)行ADC轉(zhuǎn)換的通道數(shù)目
ADC_Init (ADC1 ,&ADC_InitStructure );//初始化外設(shè)ADC1的寄存器
//功能:設(shè)置指定ADC的規(guī)則組通道,設(shè)置它們的轉(zhuǎn)化順序和采樣時(shí)間。
//參數(shù)1:指定ADC1或者ADC2
//參數(shù)2:指定被設(shè)置的ADC通道
//參數(shù)3:規(guī)則組采樣順序
//參數(shù)4:指定ADC采樣時(shí)間。239.5周期
ADC_RegularChannelConfig(ADC1,ADC_Channel_14,1,ADC_SampleTime_239Cycles5 );//system_basic
ADC_RegularChannelConfig(ADC1,ADC_Channel_13,2,ADC_SampleTime_239Cycles5 );//AD_Signal
ADC_RegularChannelConfig(ADC1,ADC_Channel_12,3,ADC_SampleTime_239Cycles5 );//REF_signal
ADC_DMACmd (ADC1 ,ENABLE );
ADC_Cmd (ADC1,ENABLE );
ADC_ResetCalibration (ADC1 );//復(fù)位指定的adc校準(zhǔn)寄存器
while(ADC_GetResetCalibrationStatus (ADC1 ));//等待校準(zhǔn)寄存器復(fù)位完成
ADC_StartCalibration (ADC1 );//開始指定adc的校準(zhǔn)
while(ADC_GetCalibrationStatus (ADC1 ));//等待校準(zhǔn)完成
ADC_SoftwareStartConvCmd (ADC1 ,ENABLE );//使能指定的adc的軟件轉(zhuǎn)換啟動功能
}
void DMA_Configuration(void)
{
DMA_InitTypeDef DMA_InitStructure;
DMA_DeInit (DMA1_Channel1 );//將DMA的通道1寄存器設(shè)為默認(rèn)值
DMA_InitStructure .DMA_PeripheralBaseAddr =(u32)&(ADC1->DR);//DMA外設(shè)的基地址
DMA_InitStructure.DMA_MemoryBaseAddr =(u32)&AD_Value;//DMA內(nèi)存地址
DMA_InitStructure .DMA_DIR =DMA_DIR_PeripheralSRC;//外設(shè)作為源,數(shù)據(jù)傳輸方向?yàn)橥庠O(shè)到內(nèi)存
DMA_InitStructure .DMA_BufferSize =N*M;//DMA緩存的大小
DMA_InitStructure .DMA_PeripheralInc =DMA_PeripheralInc_Disable;//接收一次數(shù)據(jù)后,外設(shè)地址固定
DMA_InitStructure .DMA_MemoryInc =DMA_MemoryInc_Enable;//內(nèi)存地址自增
DMA_InitStructure .DMA_PeripheralDataSize =DMA_PeripheralDataSize_HalfWord ;//DMA外設(shè)數(shù)據(jù)長度為半字,16字節(jié)
DMA_InitStructure .DMA_MemoryDataSize =DMA_MemoryDataSize_HalfWord;//內(nèi)存數(shù)據(jù)長度,16字節(jié)
DMA_InitStructure .DMA_Mode =DMA_Mode_Circular ;//工作在循環(huán)模式
DMA_InitStructure .DMA_Priority =DMA_Priority_High ;//DMA通道擁有高優(yōu)先級
DMA_InitStructure .DMA_M2M =DMA_M2M_Disable ;//DMA 通道沒有設(shè)置為內(nèi)存到內(nèi)存?zhèn)鬏?/p>
DMA_Init (DMA1_Channel1 ,&DMA_InitStructure );//初始化dma1
DMA_Cmd (DMA1_Channel1 ,ENABLE );
}