|
本帖最后由 491621 于 2020-3-30 14:16 編輯
單一的電壓采集簡單容易實現
從原理圖可得stm32f103有十個通道:壓縮包有注釋
- #include "adc.h"
- __IO uint16_t ADC_ConvertedValue[NOFCHANEL] = {0,0,0,0,0,0};
- static void ADCx_GPIO_Config(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA, ENABLE );
- GPIO_InitStructure.GPIO_Pin = ADC_PIN1|ADC_PIN2|ADC_PIN3|ADC_PIN4|ADC_PIN5|ADC_PIN6;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- }
- static void ADC_GPIO_Config(void)
- {
- DMA_InitTypeDef DMA_InitStructure;
- ADC_InitTypeDef ADC_InitStructure;
-
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
- RCC_APB2PeriphClockCmd( RCC_APB2Periph_ADC1,ENABLE);
-
- DMA_DeInit( DMA1_Channel1);
- DMA_InitStructure.DMA_PeripheralBaseAddr = ( uint32_t ) ( & ( ADC_x->DR ) );
- DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ADC_ConvertedValue;
- DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
- DMA_InitStructure.DMA_BufferSize = NOFCHANEL;
- DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
- DMA_InitStructure.DMA_MemoryInc =DMA_MemoryInc_Enable ;
- DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
- DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
- DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
- DMA_InitStructure.DMA_Priority = DMA_Priority_High;
- DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
- DMA_Init( DMA1_Channel1, &DMA_InitStructure);
- DMA_Cmd( DMA1_Channel1 , ENABLE);
-
-
- /*-----------------------------------------------------------------*/
- ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
- ADC_InitStructure.ADC_ScanConvMode = ENABLE;
- ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
- ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None ;
- ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
- ADC_InitStructure.ADC_NbrOfChannel = NOFCHANEL ;
- ADC_Init(ADC_x, &ADC_InitStructure);
-
- RCC_ADCCLKConfig(RCC_PCLK2_Div8);
-
- ADC_RegularChannelConfig(ADC_x, ADC_CHANNEL1, 1, ADC_SampleTime_55Cycles5);
- ADC_RegularChannelConfig(ADC_x, ADC_CHANNEL2, 2, ADC_SampleTime_55Cycles5);
- ADC_RegularChannelConfig(ADC_x, ADC_CHANNEL3, 3, ADC_SampleTime_55Cycles5);
- ADC_RegularChannelConfig(ADC_x, ADC_CHANNEL4, 4, ADC_SampleTime_55Cycles5);
- ADC_RegularChannelConfig(ADC_x, ADC_CHANNEL5, 5, ADC_SampleTime_55Cycles5);
- ADC_RegularChannelConfig(ADC_x, ADC_CHANNEL6, 6, ADC_SampleTime_55Cycles5);
-
-
- ADC_DMACmd(ADC_x, ENABLE);
- ADC_Cmd(ADC_x,ENABLE );
-
-
- ADC_ResetCalibration(ADC_x);
- while(ADC_GetResetCalibrationStatus(ADC_x));
- ADC_StartCalibration(ADC_x);
- while(ADC_GetCalibrationStatus(ADC_x));
- ADC_SoftwareStartConvCmd(ADC_x, ENABLE);
- }
- void ADCx_Init(void)
- {
- ADC_GPIO_Config();
- ADCx_GPIO_Config();
- }
復制代碼
|
評分
-
查看全部評分
|