[NUCLEO_F303RE] Corrections in ADC

- remove unavailable ADCs and channels
- correct initialization routine
pull/872/head
bcostm 2015-01-28 11:06:44 +01:00
parent 2c2ab2cb06
commit 46317484f7
3 changed files with 13 additions and 61 deletions

View File

@ -38,9 +38,7 @@ extern "C" {
typedef enum {
ADC_1 = (int)ADC1_BASE,
ADC_2 = (int)ADC2_BASE,
ADC_3 = (int)ADC3_BASE,
ADC_4 = (int)ADC4_BASE
ADC_2 = (int)ADC2_BASE
} ADCName;
typedef enum {

View File

@ -44,18 +44,12 @@ const PinMap PinMap_ADC[] = {
{PA_2, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN3
{PA_3, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN4
{PA_4, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN1 - ARDUINO A2
{PA_5, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN2 - Warning: LED1 is connected on this pin
{PA_5, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN2 - Warning: LED1 is also connected to this pin
{PA_6, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN3
{PA_7, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN4
{PB_0, ADC_3, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC3_IN12 - ARDUINO A3
{PB_1, ADC_3, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC3_IN1
{PB_2, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN12
{PB_11, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC12_IN14
{PB_12, ADC_4, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC4_IN3
{PB_13, ADC_3, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC3_IN5
{PB_14, ADC_4, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC4_IN4
{PB_15, ADC_4, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC4_IN5
{PC_0, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC12_IN6 - ARDUINO A5
{PC_1, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC12_IN7 - ARDUINO A4

View File

@ -41,8 +41,6 @@ void analogin_init(analogin_t *obj, PinName pin)
{
static int adc1_inited = 0;
static int adc2_inited = 0;
static int adc3_inited = 0;
static int adc4_inited = 0;
// Get the peripheral name from the pin and assign it to the object
obj->adc = (ADCName)pinmap_peripheral(pin, PinMap_ADC);
@ -57,8 +55,6 @@ void analogin_init(analogin_t *obj, PinName pin)
// Check if ADC is already initialized
if ((obj->adc == ADC_1) && adc1_inited) return;
if ((obj->adc == ADC_2) && adc2_inited) return;
if ((obj->adc == ADC_3) && adc3_inited) return;
if ((obj->adc == ADC_4) && adc4_inited) return;
if (obj->adc == ADC_1) {
__ADC12_CLK_ENABLE();
@ -70,23 +66,13 @@ void analogin_init(analogin_t *obj, PinName pin)
adc2_inited = 1;
}
if (obj->adc == ADC_3) {
__ADC34_CLK_ENABLE();
adc3_inited = 1;
}
if (obj->adc == ADC_4) {
__ADC34_CLK_ENABLE();
adc4_inited = 1;
}
// Configure ADC
AdcHandle.Instance = (ADC_TypeDef *)(obj->adc);
AdcHandle.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV2;
AdcHandle.Init.Resolution = ADC_RESOLUTION12b;
AdcHandle.Init.DataAlign = ADC_DATAALIGN_RIGHT;
AdcHandle.Init.ScanConvMode = DISABLE;
AdcHandle.Init.EOCSelection = DISABLE;
AdcHandle.Init.EOCSelection = EOC_SINGLE_CONV;
AdcHandle.Init.LowPowerAutoWait = DISABLE;
AdcHandle.Init.ContinuousConvMode = DISABLE;
AdcHandle.Init.NbrOfConversion = 1;
@ -114,51 +100,22 @@ static inline uint16_t adc_read(analogin_t *obj)
switch (obj->pin) {
case PA_0:
sConfig.Channel = ADC_CHANNEL_1;
break;
case PA_1:
sConfig.Channel = ADC_CHANNEL_2;
break;
case PA_2:
sConfig.Channel = ADC_CHANNEL_3;
break;
case PA_3:
sConfig.Channel = ADC_CHANNEL_4;
break;
case PA_4:
sConfig.Channel = ADC_CHANNEL_1;
break;
case PA_1:
case PA_5:
sConfig.Channel = ADC_CHANNEL_2;
break;
case PA_2:
case PA_6:
sConfig.Channel = ADC_CHANNEL_3;
break;
case PA_3:
case PA_7:
sConfig.Channel = ADC_CHANNEL_4;
break;
case PB_0:
sConfig.Channel = ADC_CHANNEL_12;
break;
case PB_1:
sConfig.Channel = ADC_CHANNEL_1;
break;
case PB_2:
sConfig.Channel = ADC_CHANNEL_12;
break;
case PB_11:
sConfig.Channel = ADC_CHANNEL_14;
break;
case PB_12:
sConfig.Channel = ADC_CHANNEL_3;
break;
case PB_13:
sConfig.Channel = ADC_CHANNEL_5;
break;
case PB_14:
sConfig.Channel = ADC_CHANNEL_4;
break;
case PB_15:
case PC_4:
sConfig.Channel = ADC_CHANNEL_5;
break;
case PC_0:
@ -173,12 +130,15 @@ static inline uint16_t adc_read(analogin_t *obj)
case PC_3:
sConfig.Channel = ADC_CHANNEL_9;
break;
case PC_4:
sConfig.Channel = ADC_CHANNEL_5;
break;
case PC_5:
sConfig.Channel = ADC_CHANNEL_11;
break;
case PB_2:
sConfig.Channel = ADC_CHANNEL_12;
break;
case PB_11:
sConfig.Channel = ADC_CHANNEL_14;
break;
default:
return 0;
}