@@ -179,48 +179,77 @@ uint32_t _getADCChannelFromPinMap(PinName pin)
179
179
channel = ADC_CHANNEL_0;
180
180
break ;
181
181
#endif
182
+ #ifdef ADC_CHANNEL_1
182
183
case 1 :
183
184
channel = ADC_CHANNEL_1;
184
185
break ;
186
+ #endif
187
+ #ifdef ADC_CHANNEL_2
185
188
case 2 :
186
189
channel = ADC_CHANNEL_2;
187
190
break ;
191
+ #endif
192
+ #ifdef ADC_CHANNEL_3
188
193
case 3 :
189
194
channel = ADC_CHANNEL_3;
190
195
break ;
196
+ #endif
197
+ #ifdef ADC_CHANNEL_4
191
198
case 4 :
192
199
channel = ADC_CHANNEL_4;
193
200
break ;
201
+ #endif
202
+ #ifdef ADC_CHANNEL_5
194
203
case 5 :
195
204
channel = ADC_CHANNEL_5;
196
205
break ;
206
+ #endif
207
+ #ifdef ADC_CHANNEL_6
197
208
case 6 :
198
209
channel = ADC_CHANNEL_6;
199
210
break ;
211
+ #endif
212
+ #ifdef ADC_CHANNEL_7
200
213
case 7 :
201
214
channel = ADC_CHANNEL_7;
202
215
break ;
216
+ #endif
217
+ #ifdef ADC_CHANNEL_8
203
218
case 8 :
204
219
channel = ADC_CHANNEL_8;
205
220
break ;
221
+ #endif
222
+ #ifdef ADC_CHANNEL_9
206
223
case 9 :
207
224
channel = ADC_CHANNEL_9;
208
225
break ;
226
+ #endif
227
+ #ifdef ADC_CHANNEL_10
209
228
case 10 :
210
229
channel = ADC_CHANNEL_10;
211
230
break ;
231
+ #endif
232
+ #ifdef ADC_CHANNEL_11
212
233
case 11 :
213
234
channel = ADC_CHANNEL_11;
214
235
break ;
236
+ #endif
237
+ #ifdef ADC_CHANNEL_12
215
238
case 12 :
216
239
channel = ADC_CHANNEL_12;
217
240
break ;
241
+ #endif
242
+ #ifdef ADC_CHANNEL_13
218
243
case 13 :
219
244
channel = ADC_CHANNEL_13;
220
245
break ;
246
+ #endif
247
+ #ifdef ADC_CHANNEL_14
221
248
case 14 :
222
249
channel = ADC_CHANNEL_14;
223
250
break ;
251
+ #endif
252
+ #ifdef ADC_CHANNEL_15
224
253
case 15 :
225
254
channel = ADC_CHANNEL_15;
226
255
break ;
@@ -246,43 +275,62 @@ uint32_t _getADCChannelFromPinMap(PinName pin)
246
275
case 20 :
247
276
channel = ADC_CHANNEL_20;
248
277
break ;
278
+ #endif
279
+ #ifdef ADC_CHANNEL_21
249
280
case 21 :
250
281
channel = ADC_CHANNEL_21;
251
282
break ;
283
+ #endif
284
+ #ifdef ADC_CHANNEL_22
252
285
case 22 :
253
286
channel = ADC_CHANNEL_22;
254
287
break ;
288
+ #endif
289
+ #ifdef ADC_CHANNEL_23
255
290
case 23 :
256
291
channel = ADC_CHANNEL_23;
257
292
break ;
258
293
#ifdef ADC_CHANNEL_24
259
294
case 24 :
260
295
channel = ADC_CHANNEL_24;
261
296
break ;
297
+ #endif
298
+ #ifdef ADC_CHANNEL_25
262
299
case 25 :
263
300
channel = ADC_CHANNEL_25;
264
301
break ;
302
+ #endif
303
+ #ifdef ADC_CHANNEL_26
265
304
case 26 :
266
305
channel = ADC_CHANNEL_26;
267
306
break ;
268
307
#ifdef ADC_CHANNEL_27
269
308
case 27 :
270
309
channel = ADC_CHANNEL_27;
271
310
break ;
311
+ #endif
312
+ #ifdef ADC_CHANNEL_28
272
313
case 28 :
273
314
channel = ADC_CHANNEL_28;
274
315
break ;
316
+ #endif
317
+ #ifdef ADC_CHANNEL_29
275
318
case 29 :
276
319
channel = ADC_CHANNEL_29;
277
320
break ;
321
+ #endif
322
+ #ifdef ADC_CHANNEL_30
278
323
case 30 :
279
324
channel = ADC_CHANNEL_30;
280
325
break ;
326
+ #endif
327
+ #ifdef ADC_CHANNEL_31
281
328
case 31 :
282
329
channel = ADC_CHANNEL_31;
283
330
break ;
284
331
#endif
285
332
#endif
333
+ #endif
286
334
#endif
287
335
default :
288
336
_Error_Handler (" ADC: Unknown adc channel" , (int )(STM_PIN_CHANNEL (function)));
@@ -322,18 +370,26 @@ uint32_t _getADCChannel(PinName pin, ADC_TypeDef *AdcHandle )
322
370
323
371
uint32_t _getADCInjectedRank (uint8_t ind){
324
372
switch (ind) {
373
+ #ifdef ADC_INJECTED_RANK_1
325
374
case 0 :
326
375
return ADC_INJECTED_RANK_1;
327
376
break ;
377
+ #endif
378
+ #ifdef ADC_INJECTED_RANK_2
328
379
case 1 :
329
380
return ADC_INJECTED_RANK_2;
330
381
break ;
382
+ #endif
383
+ #ifdef ADC_INJECTED_RANK_3
331
384
case 2 :
332
385
return ADC_INJECTED_RANK_3;
333
386
break ;
387
+ #endif
388
+ #ifdef ADC_INJECTED_RANK_4
334
389
case 3 :
335
390
return ADC_INJECTED_RANK_4;
336
391
break ;
392
+ #endif
337
393
default :
338
394
return 0 ;
339
395
break ;
@@ -390,41 +446,50 @@ uint32_t _initTimerInterruptDownsampling(Stm32CurrentSenseParams* cs_params, STM
390
446
391
447
// returns 0 if no downsampling is needed, 1 if downsampling is needed, 2 if error
392
448
uint8_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
393
452
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
406
466
}
407
467
408
468
// reads the ADC injected voltage for the given pin
409
469
// returns the voltage
410
470
// if the pin is not found in the current sense parameters, returns 0
411
471
float _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
+ }
423
488
}
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
428
493
}
429
494
430
495
#endif
0 commit comments