生活随笔
收集整理的這篇文章主要介紹了
                                
STM32----ADC多通道采集
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
 
                                
                            
                            
                            adc多通道采集數據
 
之前對于單通道的采集,已經做出了配置的相關解釋。
 在單通道采集中存儲采集的值為單個變量,對于多通道而言需要使用數組來存儲每個通道的轉換數據。
 具體的adc配置文件如下:
 
void ADC_Configuration(void)
{ADC_InitTypeDef adc_s
;adc_s
.ADC_ContinuousConvMode 
= ENABLE
;adc_s
.ADC_DataAlign 
= ADC_DataAlign_Right
;adc_s
.ADC_ExternalTrigConv 
= ADC_ExternalTrigConv_None
;adc_s
.ADC_Mode 
= ADC_Mode_Independent
;adc_s
.ADC_NbrOfChannel 
= 4;adc_s
.ADC_ScanConvMode 
= ENABLE
;ADC_Init(ADC1
,&adc_s
);RCC_ADCCLKConfig(RCC_PCLK2_Div8
);ADC_RegularChannelConfig(ADC1
,ADC_Channel_10
,1,ADC_SampleTime_55Cycles5
);ADC_RegularChannelConfig(ADC1
,ADC_Channel_11
,2,ADC_SampleTime_55Cycles5
);ADC_RegularChannelConfig(ADC1
,ADC_Channel_12
,3,ADC_SampleTime_55Cycles5
);ADC_RegularChannelConfig(ADC1
,ADC_Channel_13
,4,ADC_SampleTime_55Cycles5
);ADC_DMACmd(ADC1
,ENABLE
);ADC_Cmd(ADC1
,ENABLE
);ADC_ResetCalibration(ADC1
);while(ADC_GetResetCalibrationStatus(ADC1
));ADC_StartCalibration(ADC1
);while(ADC_GetCalibrationStatus(ADC1
));}
 
可以看出在結構體屬性配置里面改變了兩個屬性,通道數目和掃描模式。
 對于采樣周期的配置中RANK參數四個通道分別為1,2,3,4.在掃描采樣時先是標號為1的然后2的依次類推。
 
對于使用DMA搬運多通道數據。
 內存中使用數組來存儲搬運的數據,buffsize大小為數組的大小,因為是數組不能保持內存地址不變,所以內存地址應當使能增加。對于數據的存儲:假設定義的數組為[3][4],采樣的數據在數組中的存儲結構如下表:
 
rank為1的通道值(第一次)rank為2的通道值(第一次)rank為3的通道值(第一次)rank為4的通道值(第一次)
| rank為1的通道值(第二次) | rank為2的通道值(第二次) | rank為3的通道值(第二次) | rank為4的通道值(第二次) | 
| rank為1的通道值(第三次) | rank為2的通道值(第三次) | rank為3的通道值(第三次) | rank為4的通道值(第三次) | 
表中表示即為dma搬運得adc多通道數據的存儲方式。
 dma的配置代碼:
 
void DMA1_Channel1_Config(void)
{DMA_InitTypeDef dma_s
;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1
,ENABLE
);DMA_DeInit(DMA1_Channel1
);dma_s
.DMA_BufferSize 
= 10*4;dma_s
.DMA_DIR 
= DMA_DIR_PeripheralSRC
;dma_s
.DMA_M2M 
= DMA_M2M_Disable
;dma_s
.DMA_MemoryBaseAddr 
= (u32
)&ADC_Value
;dma_s
.DMA_MemoryDataSize 
= DMA_MemoryDataSize_HalfWord
;dma_s
.DMA_MemoryInc 
= DMA_MemoryInc_Enable
;dma_s
.DMA_Mode 
= DMA_Mode_Circular
;dma_s
.DMA_PeripheralBaseAddr 
= (u32
)&ADC1
->DR
;dma_s
.DMA_PeripheralDataSize 
= DMA_PeripheralDataSize_HalfWord
;dma_s
.DMA_PeripheralInc 
= DMA_PeripheralInc_Disable
;dma_s
.DMA_Priority 
= DMA_Priority_Medium
;DMA_Init(DMA1_Channel1
,&dma_s
);DMA_Cmd(DMA1_Channel1
,ENABLE
);
}
                            總結
                            
                                以上是生活随笔為你收集整理的STM32----ADC多通道采集的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。