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 adc_config_t adcConfig[ADC_CHANNEL_COUNT];
|
||||||
extern volatile uint16_t adcValues[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)
|
void adcInit(drv_adc_config_t *init)
|
||||||
{
|
{
|
||||||
ADC_InitTypeDef ADC_InitStructure;
|
ADC_InitTypeDef ADC_InitStructure;
|
||||||
|
@ -96,12 +102,12 @@ void adcInit(drv_adc_config_t *init)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
RCC_ADCCLKConfig(RCC_ADC12PLLCLK_Div256); // 72 MHz divided by 256 = 281.25 kHz
|
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_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_MemoryBaseAddr = (uint32_t)adcValues;
|
||||||
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
|
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
|
||||||
DMA_InitStructure.DMA_BufferSize = adcChannelCount;
|
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_Priority = DMA_Priority_High;
|
||||||
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
|
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
|
// calibrate
|
||||||
|
|
||||||
ADC_VoltageRegulatorCmd(ADC1, ENABLE);
|
ADC_VoltageRegulatorCmd(ADC_INSTANCE, ENABLE);
|
||||||
delay(10);
|
delay(10);
|
||||||
ADC_SelectCalibrationMode(ADC1, ADC_CalibrationMode_Single);
|
ADC_SelectCalibrationMode(ADC_INSTANCE, ADC_CalibrationMode_Single);
|
||||||
ADC_StartCalibration(ADC1);
|
ADC_StartCalibration(ADC_INSTANCE);
|
||||||
while(ADC_GetCalibrationStatus(ADC1) != RESET);
|
while(ADC_GetCalibrationStatus(ADC_INSTANCE) != RESET);
|
||||||
ADC_VoltageRegulatorCmd(ADC1, DISABLE);
|
ADC_VoltageRegulatorCmd(ADC_INSTANCE, DISABLE);
|
||||||
|
|
||||||
|
|
||||||
ADC_CommonInitTypeDef ADC_CommonInitStructure;
|
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_DMAAccessMode = ADC_DMAAccessMode_1;
|
||||||
ADC_CommonInitStructure.ADC_DMAMode = ADC_DMAMode_Circular;
|
ADC_CommonInitStructure.ADC_DMAMode = ADC_DMAMode_Circular;
|
||||||
ADC_CommonInitStructure.ADC_TwoSamplingDelay = 0;
|
ADC_CommonInitStructure.ADC_TwoSamplingDelay = 0;
|
||||||
ADC_CommonInit(ADC1, &ADC_CommonInitStructure);
|
ADC_CommonInit(ADC_INSTANCE, &ADC_CommonInitStructure);
|
||||||
|
|
||||||
ADC_StructInit(&ADC_InitStructure);
|
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_AutoInjMode = ADC_AutoInjec_Disable;
|
||||||
ADC_InitStructure.ADC_NbrOfRegChannel = adcChannelCount;
|
ADC_InitStructure.ADC_NbrOfRegChannel = adcChannelCount;
|
||||||
|
|
||||||
ADC_Init(ADC1, &ADC_InitStructure);
|
ADC_Init(ADC_INSTANCE, &ADC_InitStructure);
|
||||||
|
|
||||||
uint8_t rank = 1;
|
uint8_t rank = 1;
|
||||||
for (i = 0; i < ADC_CHANNEL_COUNT; i++) {
|
for (i = 0; i < ADC_CHANNEL_COUNT; i++) {
|
||||||
if (!adcConfig[i].enabled) {
|
if (!adcConfig[i].enabled) {
|
||||||
continue;
|
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 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 GPIOC
|
||||||
#define VBAT_ADC_GPIO_PIN GPIO_Pin_0
|
#define VBAT_ADC_GPIO_PIN GPIO_Pin_0
|
||||||
#define VBAT_ADC_CHANNEL ADC_Channel_6
|
#define VBAT_ADC_CHANNEL ADC_Channel_6
|
||||||
|
|
|
@ -62,6 +62,28 @@
|
||||||
//#define USE_SPI
|
//#define USE_SPI
|
||||||
//#define USE_SPI_DEVICE_2 // PB12,13,14,15 on AF5
|
//#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
|
||||||
#define LED_STRIP_TIMER TIM1
|
#define LED_STRIP_TIMER TIM1
|
||||||
|
|
||||||
|
|
|
@ -61,6 +61,10 @@
|
||||||
|
|
||||||
#define USE_ADC
|
#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 GPIOC
|
||||||
#define VBAT_ADC_GPIO_PIN GPIO_Pin_0
|
#define VBAT_ADC_GPIO_PIN GPIO_Pin_0
|
||||||
#define VBAT_ADC_CHANNEL ADC_Channel_6
|
#define VBAT_ADC_CHANNEL ADC_Channel_6
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue