mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-17 05:15:25 +03:00
STM32F103 - Fix ADC initialisation, somehow the changes got lost when
implementing the STM32F303 ADC code. Now this is inline with the STM32F303 initialisation. This also deletes some redundant code due to better initialisation sequence.
This commit is contained in:
parent
22a5e4ceae
commit
4c4c7b311f
1 changed files with 9 additions and 13 deletions
|
@ -19,7 +19,7 @@
|
|||
extern adc_config_t adcConfig[ADC_CHANNEL_COUNT];
|
||||
extern volatile uint16_t adcValues[ADC_CHANNEL_COUNT];
|
||||
|
||||
uint8_t adcChannelCount;
|
||||
extern uint8_t adcChannelCount;
|
||||
|
||||
void adcInit(drv_adc_config_t *init)
|
||||
{
|
||||
|
@ -29,19 +29,20 @@ void adcInit(drv_adc_config_t *init)
|
|||
|
||||
// configure always-present battery index (ADC4)
|
||||
adcConfig[ADC_BATTERY].adcChannel = ADC_Channel_4;
|
||||
adcConfig[ADC_BATTERY].dmaIndex = adcChannelCount - 1;
|
||||
adcConfig[ADC_BATTERY].dmaIndex = adcChannelCount;
|
||||
adcChannelCount++;
|
||||
|
||||
// optional ADC5 input on rev.5 hardware
|
||||
if (hse_value == 12000000) {
|
||||
adcChannelCount++;
|
||||
adcConfig[ADC_EXTERNAL1].adcChannel = ADC_Channel_5;
|
||||
adcConfig[ADC_EXTERNAL1].dmaIndex = adcChannelCount - 1;
|
||||
adcConfig[ADC_EXTERNAL1].dmaIndex = adcChannelCount;
|
||||
adcChannelCount++;
|
||||
}
|
||||
// another channel can be stolen from PWM for current measurement or other things
|
||||
if (init->powerAdcChannel > 0) {
|
||||
adcChannelCount++;
|
||||
adcConfig[ADC_EXTERNAL2].adcChannel = init->powerAdcChannel;
|
||||
adcConfig[ADC_EXTERNAL2].dmaIndex = adcChannelCount - 1;
|
||||
adcConfig[ADC_EXTERNAL2].dmaIndex = adcChannelCount;
|
||||
adcChannelCount++;
|
||||
}
|
||||
|
||||
// ADC driver assumes all the GPIO was already placed in 'AIN' mode
|
||||
|
@ -68,21 +69,16 @@ void adcInit(drv_adc_config_t *init)
|
|||
adc.ADC_NbrOfChannel = adcChannelCount;
|
||||
ADC_Init(ADC1, &adc);
|
||||
|
||||
// fixed ADC4
|
||||
ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_28Cycles5);
|
||||
// configure any additional ADC channels (2 + n)
|
||||
for (i = 1; i < adcChannelCount; i++)
|
||||
for (i = 0; i < adcChannelCount; i++)
|
||||
ADC_RegularChannelConfig(ADC1, adcConfig[i].adcChannel, i + 1, ADC_SampleTime_28Cycles5);
|
||||
ADC_DMACmd(ADC1, ENABLE);
|
||||
|
||||
ADC_DMACmd(ADC1, ENABLE);
|
||||
ADC_Cmd(ADC1, ENABLE);
|
||||
|
||||
// Calibrate ADC
|
||||
ADC_ResetCalibration(ADC1);
|
||||
while(ADC_GetResetCalibrationStatus(ADC1));
|
||||
ADC_StartCalibration(ADC1);
|
||||
while(ADC_GetCalibrationStatus(ADC1));
|
||||
|
||||
// Fire off ADC
|
||||
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue