作者:山尖的霞1820_946 | 来源:互联网 | 2023-05-18 20:45
通过ADC注入通道的使用,可以实时获取4个GPIO输入的AD采样值,下面看具体的代码。芯片:STM32F205VCT6STEP1:初始化GPIOvoidGPIO_Configurat
通过ADC注入通道的使用,可以实时获取4个GPIO输入的AD采样值,下面看具体的代码。
芯片:STM32F205VCT6
STEP1:初始化GPIO
void GPIO_Configuration ( void )
{
//GPIO -PC0 PC1 PC2 PC3 -ADC3
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init ( GPIOC, &GPIO_InitStructure );
}
STEP2:初始化ADC
void ADC_Configuration(void)
{
ADC_InitTypeDef ADC_InitStructure
ADC_CommonInitTypeDef ADC_CommonInitStructure
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3, ENABLE)
//ADC Common Init
ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent
ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4
ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled
ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_20Cycles
ADC_CommonInit(&ADC_CommonInitStructure)
// ADC3 Init
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b
ADC_InitStructure.ADC_ScanCOnvMode= ENABLE
ADC_InitStructure.ADC_COntinuousConvMode= ENABLE
ADC_InitStructure.ADC_ExternalTrigCOnvEdge= ADC_ExternalTrigConvEdge_None
ADC_InitStructure.ADC_ExternalTrigCOnv= ADC_ExternalTrigConv_T1_CC1
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right
ADC_InitStructure.ADC_NbrOfCOnversion= 1
ADC_Init(ADC3, &ADC_InitStructure)
ADC_TempSensorVrefintCmd(ENABLE)
ADC_RegularChannelConfig(ADC3, ADC_Channel_Vrefint, 1, ADC_SampleTime_144Cycles)
ADC_AutoInjectedConvCmd(ADC3, ENABLE)
ADC_ExternalTrigInjectedConvEdgeConfig(ADC3, ADC_ExternalTrigInjecConvEdge_None)
ADC_InjectedSequencerLengthConfig(ADC3, 4)
ADC_InjectedChannelConfig(ADC3, ADC_Channel_10, 3,ADC_SampleTime_144Cycles)
ADC_InjectedChannelConfig(ADC3, ADC_Channel_11, 4,ADC_SampleTime_144Cycles)
ADC_InjectedChannelConfig(ADC3, ADC_Channel_12, 2,ADC_SampleTime_144Cycles)
ADC_InjectedChannelConfig(ADC3, ADC_Channel_13, 1,ADC_SampleTime_144Cycles)
ADC_SetInjectedOffset(ADC3, ADC_InjectedChannel_1, 2000)
ADC_SetInjectedOffset(ADC3, ADC_InjectedChannel_2, 2000)
// Enable ADC3
ADC_Cmd(ADC3, ENABLE)
ADC_SoftwareStartConv(ADC3)
}
STEP3:使用
value1 = ADC_GetInjectedConversionValue(ADC3, ADC_InjectedChannel_1);
value2 = ADC_GetInjectedConversionValue(ADC3, ADC_InjectedChannel_2);
value3 = ADC_GetInjectedConversionValue(ADC3, ADC_InjectedChannel_3);
value4 = ADC_GetInjectedConversionValue(ADC3, ADC_InjectedChannel_4);