您的位置:首页 > 其它

STM32 ADC注入通道的使用

2016-05-13 22:50 344 查看
通过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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  stm32 芯片