mbed library sources
Dependents: frdm_kl05z_gpio_test
Fork of mbed-src by
Diff: targets/hal/TARGET_STM/TARGET_NUCLEO_F030R8/analogin_api.c
- Revision:
- 216:577900467c9e
- Parent:
- 171:3d240fda1f07
- Child:
- 227:7bd0639b8911
--- a/targets/hal/TARGET_STM/TARGET_NUCLEO_F030R8/analogin_api.c Tue May 27 08:30:06 2014 +0100 +++ b/targets/hal/TARGET_STM/TARGET_NUCLEO_F030R8/analogin_api.c Tue May 27 10:00:08 2014 +0100 @@ -57,15 +57,15 @@ int adc_inited = 0; void analogin_init(analogin_t *obj, PinName pin) { - + ADC_TypeDef *adc; ADC_InitTypeDef ADC_InitStructure; - + // Get the peripheral name (ADC_1, ADC_2...) from the pin and assign it to the object obj->adc = (ADCName)pinmap_peripheral(pin, PinMap_ADC); - + if (obj->adc == (ADCName)NC) { - error("ADC pin mapping failed"); + error("ADC pin mapping failed"); } // Configure GPIO @@ -80,13 +80,13 @@ // Get ADC registers structure address adc = (ADC_TypeDef *)(obj->adc); - + // Enable ADC clock RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); - + // Configure ADC ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; - ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; + ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_TRGO; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; @@ -102,81 +102,81 @@ } static inline uint16_t adc_read(analogin_t *obj) { - // Get ADC registers structure address - ADC_TypeDef *adc = (ADC_TypeDef *)(obj->adc); - - adc->CHSELR = 0; // Clear all channels first - - // Configure ADC channel - switch (obj->pin) { - case PA_0: - ADC_ChannelConfig(adc, ADC_Channel_0, ADC_SampleTime_7_5Cycles); - break; - case PA_1: - ADC_ChannelConfig(adc, ADC_Channel_1, ADC_SampleTime_7_5Cycles); - break; - case PA_2: - ADC_ChannelConfig(adc, ADC_Channel_2, ADC_SampleTime_7_5Cycles); - break; - case PA_3: - ADC_ChannelConfig(adc, ADC_Channel_3, ADC_SampleTime_7_5Cycles); - break; - case PA_4: - ADC_ChannelConfig(adc, ADC_Channel_4, ADC_SampleTime_7_5Cycles); - break; - case PA_5: - ADC_ChannelConfig(adc, ADC_Channel_5, ADC_SampleTime_7_5Cycles); - break; - case PA_6: - ADC_ChannelConfig(adc, ADC_Channel_6, ADC_SampleTime_7_5Cycles); - break; - case PA_7: - ADC_ChannelConfig(adc, ADC_Channel_7, ADC_SampleTime_7_5Cycles); - break; - case PB_0: - ADC_ChannelConfig(adc, ADC_Channel_8, ADC_SampleTime_7_5Cycles); - break; - case PB_1: - ADC_ChannelConfig(adc, ADC_Channel_9, ADC_SampleTime_7_5Cycles); - break; - case PC_0: - ADC_ChannelConfig(adc, ADC_Channel_10, ADC_SampleTime_7_5Cycles); - break; - case PC_1: - ADC_ChannelConfig(adc, ADC_Channel_11, ADC_SampleTime_7_5Cycles); - break; - case PC_2: - ADC_ChannelConfig(adc, ADC_Channel_12, ADC_SampleTime_7_5Cycles); - break; - case PC_3: - ADC_ChannelConfig(adc, ADC_Channel_13, ADC_SampleTime_7_5Cycles); - break; - case PC_4: - ADC_ChannelConfig(adc, ADC_Channel_14, ADC_SampleTime_7_5Cycles); - break; - case PC_5: - ADC_ChannelConfig(adc, ADC_Channel_15, ADC_SampleTime_7_5Cycles); - break; - default: - return 0; - } + // Get ADC registers structure address + ADC_TypeDef *adc = (ADC_TypeDef *)(obj->adc); + + adc->CHSELR = 0; // Clear all channels first - while(!ADC_GetFlagStatus(adc, ADC_FLAG_ADRDY)); // Wait ADC ready + // Configure ADC channel + switch (obj->pin) { + case PA_0: + ADC_ChannelConfig(adc, ADC_Channel_0, ADC_SampleTime_7_5Cycles); + break; + case PA_1: + ADC_ChannelConfig(adc, ADC_Channel_1, ADC_SampleTime_7_5Cycles); + break; + case PA_2: + ADC_ChannelConfig(adc, ADC_Channel_2, ADC_SampleTime_7_5Cycles); + break; + case PA_3: + ADC_ChannelConfig(adc, ADC_Channel_3, ADC_SampleTime_7_5Cycles); + break; + case PA_4: + ADC_ChannelConfig(adc, ADC_Channel_4, ADC_SampleTime_7_5Cycles); + break; + case PA_5: + ADC_ChannelConfig(adc, ADC_Channel_5, ADC_SampleTime_7_5Cycles); + break; + case PA_6: + ADC_ChannelConfig(adc, ADC_Channel_6, ADC_SampleTime_7_5Cycles); + break; + case PA_7: + ADC_ChannelConfig(adc, ADC_Channel_7, ADC_SampleTime_7_5Cycles); + break; + case PB_0: + ADC_ChannelConfig(adc, ADC_Channel_8, ADC_SampleTime_7_5Cycles); + break; + case PB_1: + ADC_ChannelConfig(adc, ADC_Channel_9, ADC_SampleTime_7_5Cycles); + break; + case PC_0: + ADC_ChannelConfig(adc, ADC_Channel_10, ADC_SampleTime_7_5Cycles); + break; + case PC_1: + ADC_ChannelConfig(adc, ADC_Channel_11, ADC_SampleTime_7_5Cycles); + break; + case PC_2: + ADC_ChannelConfig(adc, ADC_Channel_12, ADC_SampleTime_7_5Cycles); + break; + case PC_3: + ADC_ChannelConfig(adc, ADC_Channel_13, ADC_SampleTime_7_5Cycles); + break; + case PC_4: + ADC_ChannelConfig(adc, ADC_Channel_14, ADC_SampleTime_7_5Cycles); + break; + case PC_5: + ADC_ChannelConfig(adc, ADC_Channel_15, ADC_SampleTime_7_5Cycles); + break; + default: + return 0; + } - ADC_StartOfConversion(adc); // Start conversion - - while(ADC_GetFlagStatus(adc, ADC_FLAG_EOC) == RESET); // Wait end of conversion - - return(ADC_GetConversionValue(adc)); // Get conversion value + while (!ADC_GetFlagStatus(adc, ADC_FLAG_ADRDY)); // Wait ADC ready + + ADC_StartOfConversion(adc); // Start conversion + + while (ADC_GetFlagStatus(adc, ADC_FLAG_EOC) == RESET); // Wait end of conversion + + return (ADC_GetConversionValue(adc)); // Get conversion value } uint16_t analogin_read_u16(analogin_t *obj) { - return(adc_read(obj)); + return (adc_read(obj)); } float analogin_read(analogin_t *obj) { - uint16_t value = adc_read(obj); - return (float)value * (1.0f / (float)0xFFF); // 12 bits range + uint16_t value = adc_read(obj); + return (float)value * (1.0f / (float)0xFFF); // 12 bits range } #endif