生活随笔
收集整理的這篇文章主要介紹了
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多通道采集的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。