Analog input with AD converter calibration for STM32F1 and STM32F3 boards.

Committer:
hudakz
Date:
Sat Nov 18 14:26:35 2017 +0000
Revision:
0:99f4dfbbb498
Child:
1:e4bcfca7d2df
Initial release.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hudakz 0:99f4dfbbb498 1 #ifndef ANALOGINCAL_H
hudakz 0:99f4dfbbb498 2 #define ANALOGINCAL_H
hudakz 0:99f4dfbbb498 3
hudakz 0:99f4dfbbb498 4 /* Analog input with AD converter calibration for STM32F1 and STM32F3 boards.
hudakz 0:99f4dfbbb498 5 * Substitutes AnalogIn.
hudakz 0:99f4dfbbb498 6 *
hudakz 0:99f4dfbbb498 7 */
hudakz 0:99f4dfbbb498 8
hudakz 0:99f4dfbbb498 9 #include "mbed.h"
hudakz 0:99f4dfbbb498 10
hudakz 0:99f4dfbbb498 11 class AnalogInCal : public AnalogIn
hudakz 0:99f4dfbbb498 12 {
hudakz 0:99f4dfbbb498 13 public:
hudakz 0:99f4dfbbb498 14
hudakz 0:99f4dfbbb498 15 /** Creates an AnalogIn, connected to the specified pin
hudakz 0:99f4dfbbb498 16 *
hudakz 0:99f4dfbbb498 17 * @param pin AnalogIn pin to connect to
hudakz 0:99f4dfbbb498 18 * @param cal Flag to request calibration. Defaults to true.
hudakz 0:99f4dfbbb498 19 */
hudakz 0:99f4dfbbb498 20 AnalogInCal(PinName pin, bool cal = true) : AnalogIn(pin) {
hudakz 0:99f4dfbbb498 21 if (cal)
hudakz 0:99f4dfbbb498 22 calibrate();
hudakz 0:99f4dfbbb498 23 }
hudakz 0:99f4dfbbb498 24
hudakz 0:99f4dfbbb498 25 /** Calibrates the associated AD Convertor
hudakz 0:99f4dfbbb498 26 *
hudakz 0:99f4dfbbb498 27 */
hudakz 0:99f4dfbbb498 28 void calibrate() {
hudakz 0:99f4dfbbb498 29 lock();
hudakz 0:99f4dfbbb498 30 #if defined(TARGET_STM32F1)
hudakz 0:99f4dfbbb498 31 while(HAL_ADCEx_Calibration_Start(&(_adc.handle)) != HAL_OK);
hudakz 0:99f4dfbbb498 32 #elif defined(TARGET_STM32F3)
hudakz 0:99f4dfbbb498 33 while(HAL_ADCEx_Calibration_Start(&(_adc.handle), ADC_SINGLE_ENDED) != HAL_OK);
hudakz 0:99f4dfbbb498 34 #endif
hudakz 0:99f4dfbbb498 35 unlock();
hudakz 0:99f4dfbbb498 36 }
hudakz 0:99f4dfbbb498 37
hudakz 0:99f4dfbbb498 38 };
hudakz 0:99f4dfbbb498 39
hudakz 0:99f4dfbbb498 40 #endif // ANALOGINCAL_H