1#ifndef STM32_ADC_UTILS_HAL
2#define STM32_ADC_UTILS_HAL
6#if defined(_STM32_DEF_)
8#define _TRGO_NOT_AVAILABLE 12345
11#include "../../../common/foc_utils.h"
12#include "../../../communication/SimpleFOCDebug.h"
13#include "../../../drivers/hardware_specific/stm32/stm32_mcu.h"
23uint32_t _getADCChannel(PinName pin, ADC_TypeDef* adc = NP);
24uint32_t _getADCInjectedRank(uint8_t ind);
27uint32_t _timerToInjectedTRGO(TIM_HandleTypeDef* timer);
30uint32_t _timerToRegularTRGO(TIM_HandleTypeDef* timer);
33int _adcToIndex(ADC_HandleTypeDef *AdcHandle);
34int _adcToIndex(ADC_TypeDef *AdcHandle);
37int _findIndexOfFirstPinMapADCEntry(
int pin);
38int _findIndexOfLastPinMapADCEntry(
int pin);
39ADC_TypeDef* _findBestADCForInjectedPins(
int num_pins,
int pins[], ADC_HandleTypeDef adc_handles[]);
40ADC_TypeDef* _findBestADCForRegularPin(
int pin, ADC_HandleTypeDef adc_handles[]);
43struct Stm32AdcInterruptConfig {
44 bool needs_downsample = 0;
45 uint8_t tim_downsample = 0;
46 bool use_adc_interrupt = 0;
50uint32_t _initTimerInterruptDownsampling(Stm32CurrentSenseParams*
cs_params, STM32DriverParams* driver_params, Stm32AdcInterruptConfig& adc_interrupt_config);
52uint8_t _handleInjectedConvCpltCallback(ADC_HandleTypeDef *AdcHandle, Stm32AdcInterruptConfig& adc_interrupt_config, uint32_t adc_val[4]);
56float _readADCInjectedChannelVoltage(
int pin,
void*
cs_params, Stm32AdcInterruptConfig& adc_interrupt_config, uint32_t adc_val[4]);