mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-16 21:05:35 +03:00
SPRACINGF3 - Enable ADC for VBAT, Current and RSSI.
This commit is contained in:
parent
430ccd2338
commit
fdb81ed3b9
4 changed files with 54 additions and 18 deletions
|
@ -32,6 +32,12 @@
|
|||
extern adc_config_t adcConfig[ADC_CHANNEL_COUNT];
|
||||
extern volatile uint16_t adcValues[ADC_CHANNEL_COUNT];
|
||||
|
||||
#ifndef ADC_INSTANCE
|
||||
#define ADC_INSTANCE ADC1
|
||||
#define ADC_AHB_PERIPHERAL RCC_AHBPeriph_DMA1
|
||||
#define ADC_DMA_CHANNEL DMA1_Channel1
|
||||
#endif
|
||||
|
||||
void adcInit(drv_adc_config_t *init)
|
||||
{
|
||||
ADC_InitTypeDef ADC_InitStructure;
|
||||
|
@ -96,12 +102,12 @@ void adcInit(drv_adc_config_t *init)
|
|||
#endif
|
||||
|
||||
RCC_ADCCLKConfig(RCC_ADC12PLLCLK_Div256); // 72 MHz divided by 256 = 281.25 kHz
|
||||
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1 | RCC_AHBPeriph_ADC12, ENABLE);
|
||||
RCC_AHBPeriphClockCmd(ADC_AHB_PERIPHERAL | RCC_AHBPeriph_ADC12, ENABLE);
|
||||
|
||||
DMA_DeInit(DMA1_Channel1);
|
||||
DMA_DeInit(ADC_DMA_CHANNEL);
|
||||
|
||||
DMA_StructInit(&DMA_InitStructure);
|
||||
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR;
|
||||
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC_INSTANCE->DR;
|
||||
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)adcValues;
|
||||
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
|
||||
DMA_InitStructure.DMA_BufferSize = adcChannelCount;
|
||||
|
@ -113,19 +119,19 @@ void adcInit(drv_adc_config_t *init)
|
|||
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
|
||||
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
|
||||
|
||||
DMA_Init(DMA1_Channel1, &DMA_InitStructure);
|
||||
DMA_Init(ADC_DMA_CHANNEL, &DMA_InitStructure);
|
||||
|
||||
DMA_Cmd(DMA1_Channel1, ENABLE);
|
||||
DMA_Cmd(ADC_DMA_CHANNEL, ENABLE);
|
||||
|
||||
|
||||
// calibrate
|
||||
|
||||
ADC_VoltageRegulatorCmd(ADC1, ENABLE);
|
||||
ADC_VoltageRegulatorCmd(ADC_INSTANCE, ENABLE);
|
||||
delay(10);
|
||||
ADC_SelectCalibrationMode(ADC1, ADC_CalibrationMode_Single);
|
||||
ADC_StartCalibration(ADC1);
|
||||
while(ADC_GetCalibrationStatus(ADC1) != RESET);
|
||||
ADC_VoltageRegulatorCmd(ADC1, DISABLE);
|
||||
ADC_SelectCalibrationMode(ADC_INSTANCE, ADC_CalibrationMode_Single);
|
||||
ADC_StartCalibration(ADC_INSTANCE);
|
||||
while(ADC_GetCalibrationStatus(ADC_INSTANCE) != RESET);
|
||||
ADC_VoltageRegulatorCmd(ADC_INSTANCE, DISABLE);
|
||||
|
||||
|
||||
ADC_CommonInitTypeDef ADC_CommonInitStructure;
|
||||
|
@ -136,7 +142,7 @@ void adcInit(drv_adc_config_t *init)
|
|||
ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_1;
|
||||
ADC_CommonInitStructure.ADC_DMAMode = ADC_DMAMode_Circular;
|
||||
ADC_CommonInitStructure.ADC_TwoSamplingDelay = 0;
|
||||
ADC_CommonInit(ADC1, &ADC_CommonInitStructure);
|
||||
ADC_CommonInit(ADC_INSTANCE, &ADC_CommonInitStructure);
|
||||
|
||||
ADC_StructInit(&ADC_InitStructure);
|
||||
|
||||
|
@ -149,24 +155,24 @@ void adcInit(drv_adc_config_t *init)
|
|||
ADC_InitStructure.ADC_AutoInjMode = ADC_AutoInjec_Disable;
|
||||
ADC_InitStructure.ADC_NbrOfRegChannel = adcChannelCount;
|
||||
|
||||
ADC_Init(ADC1, &ADC_InitStructure);
|
||||
ADC_Init(ADC_INSTANCE, &ADC_InitStructure);
|
||||
|
||||
uint8_t rank = 1;
|
||||
for (i = 0; i < ADC_CHANNEL_COUNT; i++) {
|
||||
if (!adcConfig[i].enabled) {
|
||||
continue;
|
||||
}
|
||||
ADC_RegularChannelConfig(ADC1, adcConfig[i].adcChannel, rank++, adcConfig[i].sampleTime);
|
||||
ADC_RegularChannelConfig(ADC_INSTANCE, adcConfig[i].adcChannel, rank++, adcConfig[i].sampleTime);
|
||||
}
|
||||
|
||||
ADC_Cmd(ADC1, ENABLE);
|
||||
ADC_Cmd(ADC_INSTANCE, ENABLE);
|
||||
|
||||
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_RDY));
|
||||
while(!ADC_GetFlagStatus(ADC_INSTANCE, ADC_FLAG_RDY));
|
||||
|
||||
ADC_DMAConfig(ADC1, ADC_DMAMode_Circular);
|
||||
ADC_DMAConfig(ADC_INSTANCE, ADC_DMAMode_Circular);
|
||||
|
||||
ADC_DMACmd(ADC1, ENABLE);
|
||||
ADC_DMACmd(ADC_INSTANCE, ENABLE);
|
||||
|
||||
ADC_StartConversion(ADC1);
|
||||
ADC_StartConversion(ADC_INSTANCE);
|
||||
}
|
||||
|
||||
|
|
|
@ -70,6 +70,10 @@
|
|||
|
||||
#define USE_ADC
|
||||
|
||||
#define ADC_INSTANCE ADC1
|
||||
#define ADC_AHB_PERIPHERAL RCC_AHBPeriph_DMA1
|
||||
#define ADC_DMA_CHANNEL DMA1_Channel1
|
||||
|
||||
#define VBAT_ADC_GPIO GPIOC
|
||||
#define VBAT_ADC_GPIO_PIN GPIO_Pin_0
|
||||
#define VBAT_ADC_CHANNEL ADC_Channel_6
|
||||
|
|
|
@ -62,6 +62,28 @@
|
|||
//#define USE_SPI
|
||||
//#define USE_SPI_DEVICE_2 // PB12,13,14,15 on AF5
|
||||
|
||||
#define USE_ADC
|
||||
|
||||
#define ADC_INSTANCE ADC2
|
||||
#define ADC_DMA_CHANNEL DMA2_Channel1
|
||||
#define ADC_AHB_PERIPHERAL RCC_AHBPeriph_DMA2
|
||||
|
||||
#define VBAT_ADC_GPIO GPIOA
|
||||
#define VBAT_ADC_GPIO_PIN GPIO_Pin_4
|
||||
#define VBAT_ADC_CHANNEL ADC_Channel_1
|
||||
|
||||
#define CURRENT_METER_ADC_GPIO GPIOA
|
||||
#define CURRENT_METER_ADC_GPIO_PIN GPIO_Pin_5
|
||||
#define CURRENT_METER_ADC_CHANNEL ADC_Channel_2
|
||||
|
||||
#define RSSI_ADC_GPIO GPIOB
|
||||
#define RSSI_ADC_GPIO_PIN GPIO_Pin_2
|
||||
#define RSSI_ADC_CHANNEL ADC_Channel_12
|
||||
|
||||
#define RSSI_ADC_GPIO GPIOB
|
||||
#define RSSI_ADC_GPIO_PIN GPIO_Pin_2
|
||||
#define RSSI_ADC_CHANNEL ADC_Channel_12
|
||||
|
||||
#define LED_STRIP
|
||||
#define LED_STRIP_TIMER TIM1
|
||||
|
||||
|
|
|
@ -61,6 +61,10 @@
|
|||
|
||||
#define USE_ADC
|
||||
|
||||
#define ADC_INSTANCE ADC1
|
||||
#define ADC_AHB_PERIPHERAL RCC_AHBPeriph_DMA1
|
||||
#define ADC_DMA_CHANNEL DMA1_Channel1
|
||||
|
||||
#define VBAT_ADC_GPIO GPIOC
|
||||
#define VBAT_ADC_GPIO_PIN GPIO_Pin_0
|
||||
#define VBAT_ADC_CHANNEL ADC_Channel_6
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue