#define STM32_ODEN_DISABLED 0U\r
#define STM32_ODEN_ENABLED (SYSCFG_PWRCR_ODEN)\r
\r
+#define STM32_VOS_SCALE0 0U\r
#define STM32_VOS_SCALE3 (PWR_D3CR_VOS_0)\r
#define STM32_VOS_SCALE2 (PWR_D3CR_VOS_1)\r
#define STM32_VOS_SCALE1 (PWR_D3CR_VOS_1 | PWR_D3CR_VOS_0)\r
* @name Constants depending on VOS and ODEN setting\r
* @{\r
*/\r
-#if STM32_VOS == STM32_VOS_SCALE1\r
+#if STM32_VOS == STM32_VOS_SCALE1 || STM32_VOS == STM32_VOS_SCALE0\r
#define STM32_0WS_THRESHOLD 70000000U\r
#define STM32_1WS_THRESHOLD 140000000U\r
#define STM32_2WS_THRESHOLD 210000000U\r
.calibration = 0,
};
-const ADCConversionGroup ADC::m_group_config = {
+ADCConversionGroup ADC::m_group_config = {
.circular = true,
.num_channels = 1,
.end_cb = ADC::conversionCallback,
{/* 20k */ 80, 8},
{/* 32k */ 80, 5},
{/* 48k */ 96, 4},
- {/* 96k */ 96, 2}
+ {/* 96k */ 288, 10}
}};
adcsample_t *ADC::m_current_buffer = nullptr;
adcStart(m_driver, &m_config);
adcSTM32EnableVREF(m_driver);
-
- setRate(SClock::Rate::R32K);
}
void ADC::start(adcsample_t *buffer, size_t count, Operation operation)
RCC->CR |= RCC_CR_PLL2ON;
while ((RCC->CR & RCC_CR_PLL2RDY) != RCC_CR_PLL2RDY);
+ m_group_config.smpr[0] = rate != SClock::Rate::R96K ? ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_12P5)
+ : ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_2P5);
+
adcStart(m_driver, &m_config);
}
static ADCDriver *m_driver;
static const ADCConfig m_config;
- static const ADCConversionGroup m_group_config;
+ static ADCConversionGroup m_group_config;
static std::array<std::array<uint32_t, 2>, 6> m_rate_presets;
\r
ADC::begin();\r
DAC::begin();\r
+ SClock::begin();\r
USBSerial::begin();\r
\r
+ SClock::setRate(SClock::Rate::R32K);\r
+ ADC::setRate(SClock::Rate::R32K);\r
+\r
// Start the conversion manager thread\r
chTMObjectInit(&conversion_time_measurement);\r
chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1,\r