Vous êtes sur la page 1sur 2

#include "stm32f4xx_adc.h" #include "stm32f4xx_gpio.h" #include "stm32f4xx_rcc.

h" int ConvertedValue = 0; //Converted value readed from ADC void adc_configure(){ ADC_InitTypeDef ADC_init_structure; //Structure for adc confguration GPIO_InitTypeDef GPIO_initStructre; //Structure for analog input pin //Clock configuration RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);//The ADC1 is connected the APB2 peripheral bus thus we will use its clock source RCC_AHB1PeriphClockCmd(RCC_AHB1ENR_GPIOCEN,ENABLE);//Clock for the ADC port!! D o not forget about this one ;) //Analog pin configuration GPIO_initStructre.GPIO_Pin = GPIO_Pin_0;//The channel 10 is connected to PC0 GPIO_initStructre.GPIO_Mode = GPIO_Mode_AN; //The PC0 pin is configured in anal og mode GPIO_initStructre.GPIO_PuPd = GPIO_PuPd_NOPULL; //We don't need any pull up or pull down GPIO_Init(GPIOC,&GPIO_initStructre);//Affecting the port with the initializatio n structure configuration //ADC structure configuration ADC_DeInit(); ADC_init_structure.ADC_DataAlign = ADC_DataAlign_Right;//data converted will be shifted to right ADC_init_structure.ADC_Resolution = ADC_Resolution_12b;//Input voltage is conve rted into a 12bit number giving a maximum value of 4096 ADC_init_structure.ADC_ContinuousConvMode = ENABLE; //the conversion is continu ous, the input data is converted more than once ADC_init_structure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;// conver sion is synchronous with TIM1 and CC1 (actually I'm not sure about this one :/) ADC_init_structure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//n o trigger for conversion ADC_init_structure.ADC_NbrOfConversion = 1;//I think this one is clear :p ADC_init_structure.ADC_ScanConvMode = DISABLE;//The scan is configured in one c hannel ADC_Init(ADC1,&ADC_init_structure);//Initialize ADC with the previous configura tion //Enable ADC conversion ADC_Cmd(ADC1,ENABLE); //Select the channel to be read from ADC_RegularChannelConfig(ADC1,ADC_Channel_10,1,ADC_SampleTime_144Cycles); } int adc_convert(){ ADC_SoftwareStartConv(ADC1);//Start the conversion while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));//Processing the conversion return ADC_GetConversionValue(ADC1); //Return the converted data } int main(void){ adc_configure();//Start configuration while(1){//loop while the board is working ConvertedValue = adc_convert();//Read the ADC converted value } }

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); /* Time base configuration */ TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); TIM_TimeBaseStructure.TIM_Period = 0xFF; TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure); /* TIM6 TRGO selection */ TIM_SelectOutputTrigger(TIM6, TIM_TRGOSource_Update); /* TIM6 enable counter */ TIM_Cmd(TIM6, ENABLE); /* DAC Config */ DAC_InitTypeDef DAC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE); DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO; DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable; DAC_Init(DAC_Channel_1, &DAC_InitStructure); DAC_Cmd(DAC_Channel_1, ENABLE); while(1){ DAC_SetChannel1Data(DAC_Align_12b_R, 4095); }

Vous aimerez peut-être aussi