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>
87 T, std::void_t<decltype(std::declval<T>()->Init.ContinuousConvMode)>>
92 template <
typename T,
typename =
void>
99 T, std::void_t<decltype(std::declval<T>()->Init.DMAContinuousRequests)>>
104 template <
typename T,
typename =
void>
109 template <
typename T>
111 T, std::void_t<decltype(std::declval<T>()->Init.NbrOfConversion)>> : std::true_type
115 template <
typename T,
typename =
void>
120 template <
typename T>
122 T, std::void_t<decltype(std::declval<T>()->DMA_Handle->Init.Mode)>> : std::true_type
126 template <
typename T,
typename =
void>
131 template <
typename T>
133 T, std::void_t<decltype(std::declval<T>()->Init.ConversionDataManagement)>>
138 template <
typename T>
139 static typename std::enable_if<HasContinuousConvMode<T>::value>::type
140 AssertContinuousConvModeEnabled(T hadc)
142 ASSERT(hadc->Init.ContinuousConvMode == ENABLE);
145 template <
typename T>
146 static typename std::enable_if<!HasContinuousConvMode<T>::value>::type
147 AssertContinuousConvModeEnabled(T)
151 template <
typename T>
152 static typename std::enable_if<HasContinuousConvMode<T>::value>::type
153 AssertContinuousConvModeDisabled(T hadc)
155 ASSERT(hadc->Init.ContinuousConvMode == DISABLE);
158 template <
typename T>
159 static typename std::enable_if<!HasContinuousConvMode<T>::value>::type
160 AssertContinuousConvModeDisabled(T)
166 template <
typename T>
167 static typename std::enable_if<HasConversionDataManagement<T>::value>::type
168 AssertDMAContReqEnabled(T hadc)
170#ifdef ADC_CONVERSIONDATA_DMA_CIRCULAR
171 ASSERT(hadc->Init.ConversionDataManagement == ADC_CONVERSIONDATA_DMA_CIRCULAR);
178 template <
typename T>
179 static typename std::enable_if<!HasConversionDataManagement<T>::value &&
180 HasDMAContinuousRequests<T>::value>::type
181 AssertDMAContReqEnabled(T hadc)
183 ASSERT(hadc->Init.DMAContinuousRequests == ENABLE);
186 template <
typename T>
187 static typename std::enable_if<!HasConversionDataManagement<T>::value &&
188 !HasDMAContinuousRequests<T>::value>::type
189 AssertDMAContReqEnabled(T)
193 template <
typename T>
194 static typename std::enable_if<HasNbrOfConversion<T>::value>::type AssertNbrOfConvEq(
197 ASSERT(hadc->Init.NbrOfConversion == n);
200 template <
typename T>
201 static typename std::enable_if<!HasNbrOfConversion<T>::value>::type AssertNbrOfConvEq(
206 template <
typename T>
207 static typename std::enable_if<HasDMACircularMode<T>::value>::type AssertDMACircular(
210 ASSERT(hadc->DMA_Handle !=
nullptr);
211 ASSERT(hadc->DMA_Handle->Init.Mode == DMA_CIRCULAR);
214 template <
typename T>
215 static typename std::enable_if<!HasDMACircularMode<T>::value>::type AssertDMACircular(T)
243 float Read()
override;
263 std::initializer_list<uint32_t> channels,
float vref);
287 alignas(LIBXR_CACHE_LINE_SIZE) std::atomic<uint32_t> locked_ = 0U;
288 ADC_HandleTypeDef* hadc_;
289 const uint8_t NUM_CHANNELS;
290 uint8_t filter_size_;
297 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.