adc.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #ifndef ADC_H
  2. #define ADC_H
  3. #include <stdint.h>
  4. #include <stdbool.h>
  5. typedef uint32_t tADCValue_t;
  6. typedef enum
  7. {
  8. eADCRes_12bit,
  9. eADCRes_10bit,
  10. eADCRes_8bit,
  11. eADCRes_6bit,
  12. }
  13. eADC_Resolution_t;
  14. static inline uint32_t ADC_GetFullScale( eADC_Resolution_t resolution )
  15. {
  16. switch( resolution )
  17. {
  18. case eADCRes_12bit: return 1 + 0xFFF;
  19. case eADCRes_10bit: return 1 + 0x3FF;
  20. case eADCRes_8bit: return 1 + 0xFF;
  21. case eADCRes_6bit: return 1 + 0x3F;
  22. default: return 0;
  23. }
  24. }
  25. typedef struct
  26. {
  27. bool (*Init)( eADC_Resolution_t resolution );
  28. bool (*Start)( uint32_t chid );
  29. bool (*Measure)( uint32_t timeout, tADCValue_t * pResult );
  30. void (*Stop)( uint32_t chid );
  31. uint32_t (*GetVoltage)( tADCValue_t * pResult );
  32. void (*DeInit)();
  33. }
  34. ADC_Handle_t;
  35. #ifdef STM32L1XX_IT_C
  36. extern ADC_HandleTypeDef Adc1Handle; // for stm32l1xx_it.c
  37. #endif
  38. extern const ADC_Handle_t ADC1Handle;
  39. // ADC_VREF_VOLTAGE_mV is VREFINT voltage (see datasheet)
  40. #define ADC_VREF_VOLTAGE_mV 1224
  41. #define ADC_VRED_V 3.3
  42. #define R13 56*10e3
  43. #define R32 511*10e3
  44. #define KDIVIDER() (R13 / (R13 + R32))
  45. #endif