32 template <
typename,
typename =
void>
35 float Get(ADC_HandleTypeDef* hadc)
52 switch (hadc->Init.Resolution)
54#ifdef ADC_RESOLUTION_16B
55 case ADC_RESOLUTION_16B:
58#ifdef ADC_RESOLUTION_12B
59 case ADC_RESOLUTION_12B:
62#ifdef ADC_RESOLUTION_10B
63 case ADC_RESOLUTION_10B:
66#ifdef ADC_RESOLUTION_8B
67 case ADC_RESOLUTION_8B:
70#ifdef ADC_RESOLUTION_6B
71 case ADC_RESOLUTION_6B:
80 template <
typename T,
typename =
void>
86 T, std::void_t<decltype(std::declval<T>()->Init.ContinuousConvMode)>>
91 template <
typename T,
typename =
void>
97 T, std::void_t<decltype(std::declval<T>()->Init.DMAContinuousRequests)>>
102 template <
typename T,
typename =
void>
106 template <
typename T>
108 T, std::void_t<decltype(std::declval<T>()->Init.NbrOfConversion)>> : std::true_type
112 template <
typename T,
typename =
void>
116 template <
typename T>
118 T, std::void_t<decltype(std::declval<T>()->DMA_Handle->Init.Mode)>> : std::true_type
122 template <
typename T>
123 static typename std::enable_if<HasContinuousConvMode<T>::value>::type
124 AssertContinuousConvModeEnabled(T hadc)
126 ASSERT(hadc->Init.ContinuousConvMode == ENABLE);
128 template <
typename T>
129 static typename std::enable_if<!HasContinuousConvMode<T>::value>::type
130 AssertContinuousConvModeEnabled(T)
134 template <
typename T>
135 static typename std::enable_if<HasContinuousConvMode<T>::value>::type
136 AssertContinuousConvModeDisabled(T hadc)
138 ASSERT(hadc->Init.ContinuousConvMode == DISABLE);
140 template <
typename T>
141 static typename std::enable_if<!HasContinuousConvMode<T>::value>::type
142 AssertContinuousConvModeDisabled(T)
146 template <
typename T>
147 static typename std::enable_if<HasDMAContinuousRequests<T>::value>::type
148 AssertDMAContReqEnabled(T hadc)
150 ASSERT(hadc->Init.DMAContinuousRequests == ENABLE);
152 template <
typename T>
153 static typename std::enable_if<!HasDMAContinuousRequests<T>::value>::type
154 AssertDMAContReqEnabled(T)
158 template <
typename T>
159 static typename std::enable_if<HasNbrOfConversion<T>::value>::type AssertNbrOfConvEq(
162 ASSERT(hadc->Init.NbrOfConversion == n);
164 template <
typename T>
165 static typename std::enable_if<!HasNbrOfConversion<T>::value>::type AssertNbrOfConvEq(
170 template <
typename T>
171 static typename std::enable_if<HasDMACircularMode<T>::value>::type AssertDMACircular(
174 ASSERT(hadc->DMA_Handle !=
nullptr);
175 ASSERT(hadc->DMA_Handle->Init.Mode == DMA_CIRCULAR);
177 template <
typename T>
178 static typename std::enable_if<!HasDMACircularMode<T>::value>::type AssertDMACircular(T)
206 float Read()
override;
226 std::initializer_list<uint32_t> channels,
float vref);
250 alignas(LIBXR_CACHE_LINE_SIZE) std::atomic<uint32_t> locked_ = 0U;
251 ADC_HandleTypeDef* hadc_;
252 const uint8_t NUM_CHANNELS;
253 uint8_t filter_size_;
260 float ConvertToVoltage(
float adc_value);
STM32ADC(ADC_HandleTypeDef *hadc, RawData dma_buff, std::initializer_list< uint32_t > channels, float vref)
STM32ADC 类,用于处理 STM32 系统的 ADC 通道。 Provides handling for STM32.