@@ -179,48 +179,77 @@ uint32_t _getADCChannelFromPinMap(PinName pin)
179179 channel = ADC_CHANNEL_0;
180180 break ;
181181#endif
182+ #ifdef ADC_CHANNEL_1
182183 case 1 :
183184 channel = ADC_CHANNEL_1;
184185 break ;
186+ #endif
187+ #ifdef ADC_CHANNEL_2
185188 case 2 :
186189 channel = ADC_CHANNEL_2;
187190 break ;
191+ #endif
192+ #ifdef ADC_CHANNEL_3
188193 case 3 :
189194 channel = ADC_CHANNEL_3;
190195 break ;
196+ #endif
197+ #ifdef ADC_CHANNEL_4
191198 case 4 :
192199 channel = ADC_CHANNEL_4;
193200 break ;
201+ #endif
202+ #ifdef ADC_CHANNEL_5
194203 case 5 :
195204 channel = ADC_CHANNEL_5;
196205 break ;
206+ #endif
207+ #ifdef ADC_CHANNEL_6
197208 case 6 :
198209 channel = ADC_CHANNEL_6;
199210 break ;
211+ #endif
212+ #ifdef ADC_CHANNEL_7
200213 case 7 :
201214 channel = ADC_CHANNEL_7;
202215 break ;
216+ #endif
217+ #ifdef ADC_CHANNEL_8
203218 case 8 :
204219 channel = ADC_CHANNEL_8;
205220 break ;
221+ #endif
222+ #ifdef ADC_CHANNEL_9
206223 case 9 :
207224 channel = ADC_CHANNEL_9;
208225 break ;
226+ #endif
227+ #ifdef ADC_CHANNEL_10
209228 case 10 :
210229 channel = ADC_CHANNEL_10;
211230 break ;
231+ #endif
232+ #ifdef ADC_CHANNEL_11
212233 case 11 :
213234 channel = ADC_CHANNEL_11;
214235 break ;
236+ #endif
237+ #ifdef ADC_CHANNEL_12
215238 case 12 :
216239 channel = ADC_CHANNEL_12;
217240 break ;
241+ #endif
242+ #ifdef ADC_CHANNEL_13
218243 case 13 :
219244 channel = ADC_CHANNEL_13;
220245 break ;
246+ #endif
247+ #ifdef ADC_CHANNEL_14
221248 case 14 :
222249 channel = ADC_CHANNEL_14;
223250 break ;
251+ #endif
252+ #ifdef ADC_CHANNEL_15
224253 case 15 :
225254 channel = ADC_CHANNEL_15;
226255 break ;
@@ -246,43 +275,62 @@ uint32_t _getADCChannelFromPinMap(PinName pin)
246275 case 20 :
247276 channel = ADC_CHANNEL_20;
248277 break ;
278+ #endif
279+ #ifdef ADC_CHANNEL_21
249280 case 21 :
250281 channel = ADC_CHANNEL_21;
251282 break ;
283+ #endif
284+ #ifdef ADC_CHANNEL_22
252285 case 22 :
253286 channel = ADC_CHANNEL_22;
254287 break ;
288+ #endif
289+ #ifdef ADC_CHANNEL_23
255290 case 23 :
256291 channel = ADC_CHANNEL_23;
257292 break ;
258293#ifdef ADC_CHANNEL_24
259294 case 24 :
260295 channel = ADC_CHANNEL_24;
261296 break ;
297+ #endif
298+ #ifdef ADC_CHANNEL_25
262299 case 25 :
263300 channel = ADC_CHANNEL_25;
264301 break ;
302+ #endif
303+ #ifdef ADC_CHANNEL_26
265304 case 26 :
266305 channel = ADC_CHANNEL_26;
267306 break ;
268307#ifdef ADC_CHANNEL_27
269308 case 27 :
270309 channel = ADC_CHANNEL_27;
271310 break ;
311+ #endif
312+ #ifdef ADC_CHANNEL_28
272313 case 28 :
273314 channel = ADC_CHANNEL_28;
274315 break ;
316+ #endif
317+ #ifdef ADC_CHANNEL_29
275318 case 29 :
276319 channel = ADC_CHANNEL_29;
277320 break ;
321+ #endif
322+ #ifdef ADC_CHANNEL_30
278323 case 30 :
279324 channel = ADC_CHANNEL_30;
280325 break ;
326+ #endif
327+ #ifdef ADC_CHANNEL_31
281328 case 31 :
282329 channel = ADC_CHANNEL_31;
283330 break ;
284331#endif
285332#endif
333+ #endif
286334#endif
287335 default :
288336 _Error_Handler (" ADC: Unknown adc channel" , (int )(STM_PIN_CHANNEL (function)));
@@ -322,18 +370,26 @@ uint32_t _getADCChannel(PinName pin, ADC_TypeDef *AdcHandle )
322370
323371uint32_t _getADCInjectedRank (uint8_t ind){
324372 switch (ind) {
373+ #ifdef ADC_INJECTED_RANK_1
325374 case 0 :
326375 return ADC_INJECTED_RANK_1;
327376 break ;
377+ #endif
378+ #ifdef ADC_INJECTED_RANK_2
328379 case 1 :
329380 return ADC_INJECTED_RANK_2;
330381 break ;
382+ #endif
383+ #ifdef ADC_INJECTED_RANK_3
331384 case 2 :
332385 return ADC_INJECTED_RANK_3;
333386 break ;
387+ #endif
388+ #ifdef ADC_INJECTED_RANK_4
334389 case 3 :
335390 return ADC_INJECTED_RANK_4;
336391 break ;
392+ #endif
337393 default :
338394 return 0 ;
339395 break ;
@@ -390,41 +446,50 @@ uint32_t _initTimerInterruptDownsampling(Stm32CurrentSenseParams* cs_params, STM
390446
391447// returns 0 if no downsampling is needed, 1 if downsampling is needed, 2 if error
392448uint8_t _handleInjectedConvCpltCallback (ADC_HandleTypeDef *AdcHandle, Stm32AdcInterruptConfig& adc_interrupt_config, uint32_t adc_val[4 ]) {
449+ #ifndef HAL_ADCEx_InjectedGetValue
450+ return 0 ; // error: function not available
451+ #else
393452
394- // if the timer han't repetition counter - downsample two times
395- if ( adc_interrupt_config.needs_downsample && adc_interrupt_config.tim_downsample ++ > 0 ) {
396- adc_interrupt_config.tim_downsample = 0 ;
397- return 1 ;
398- }
399-
400- adc_val[0 ]=HAL_ADCEx_InjectedGetValue (AdcHandle, ADC_INJECTED_RANK_1);
401- adc_val[1 ]=HAL_ADCEx_InjectedGetValue (AdcHandle, ADC_INJECTED_RANK_2);
402- adc_val[2 ]=HAL_ADCEx_InjectedGetValue (AdcHandle, ADC_INJECTED_RANK_3);
403- adc_val[3 ]=HAL_ADCEx_InjectedGetValue (AdcHandle, ADC_INJECTED_RANK_4);
404-
405- return 0 ; // no downsampling needed
453+ // if the timer han't repetition counter - downsample two times
454+ if ( adc_interrupt_config.needs_downsample && adc_interrupt_config.tim_downsample ++ > 0 ) {
455+ adc_interrupt_config.tim_downsample = 0 ;
456+ return 1 ;
457+ }
458+
459+ adc_val[0 ]=HAL_ADCEx_InjectedGetValue (AdcHandle, ADC_INJECTED_RANK_1);
460+ adc_val[1 ]=HAL_ADCEx_InjectedGetValue (AdcHandle, ADC_INJECTED_RANK_2);
461+ adc_val[2 ]=HAL_ADCEx_InjectedGetValue (AdcHandle, ADC_INJECTED_RANK_3);
462+ adc_val[3 ]=HAL_ADCEx_InjectedGetValue (AdcHandle, ADC_INJECTED_RANK_4);
463+
464+ return 0 ; // no downsampling needed
465+ #endif
406466}
407467
408468// reads the ADC injected voltage for the given pin
409469// returns the voltage
410470// if the pin is not found in the current sense parameters, returns 0
411471float _readADCInjectedChannelVoltage (int pin, void * cs_params, Stm32AdcInterruptConfig& adc_interrupt_config, uint32_t adc_val[4 ]) {
412- Stm32CurrentSenseParams* cs_p = (Stm32CurrentSenseParams*)cs_params;
413- uint8_t channel_no = 0 ;
414- uint8_t adc_index = (uint8_t )_adcToIndex (cs_p->adc_handle );
415- for (int i=0 ; i < 3 ; i++){
416- if ( pin == cs_p->pins [i]){ // found in the buffer
417- if (adc_interrupt_config.use_adc_interrupt ){
418- return adc_val[channel_no] * cs_p->adc_voltage_conv ;
419- }else {
420- // an optimized way to go from i to the channel i=0 -> channel 1, i=1 -> channel 2, i=2 -> channel 3
421- uint32_t channel = _getADCInjectedRank (channel_no);
422- return HAL_ADCEx_InjectedGetValue (cs_p->adc_handle , channel) * cs_p->adc_voltage_conv ;
472+ #ifndef HAL_ADCEx_InjectedGetValue
473+ return 0 ; // error: function not available
474+ #else
475+
476+ Stm32CurrentSenseParams* cs_p = (Stm32CurrentSenseParams*)cs_params;
477+ uint8_t channel_no = 0 ;
478+ uint8_t adc_index = (uint8_t )_adcToIndex (cs_p->adc_handle );
479+ for (int i=0 ; i < 3 ; i++){
480+ if ( pin == cs_p->pins [i]){ // found in the buffer
481+ if (adc_interrupt_config.use_adc_interrupt ){
482+ return adc_val[channel_no] * cs_p->adc_voltage_conv ;
483+ }else {
484+ // an optimized way to go from i to the channel i=0 -> channel 1, i=1 -> channel 2, i=2 -> channel 3
485+ uint32_t channel = _getADCInjectedRank (channel_no);
486+ return HAL_ADCEx_InjectedGetValue (cs_p->adc_handle , channel) * cs_p->adc_voltage_conv ;
487+ }
423488 }
424- }
425- if ( _isset (cs_p-> pins [i])) channel_no++;
426- }
427- return 0 ; // pin not found
489+ if ( _isset (cs_p-> pins [i])) channel_no++;
490+ }
491+ return 0 ; // pin not found
492+ # endif
428493}
429494
430495#endif
0 commit comments