54 .MemInc = DMA_MINC_ENABLE,
55 .PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD,
56 .MemDataAlignment = DMA_MDATAALIGN_HALFWORD,
61 handle.Instance = conf.adc;
63 .ClockPrescaler = conf.prescaler,
64 .ScanConvMode = ENABLE,
65 .ExternalTrigConv = ADC_SOFTWARE_START,
66 .DMAContinuousRequests = ENABLE,
72 while (HAL_ADC_Start_DMA(&handle, (uint32_t*)iBuffer, channelCnt) != HAL_OK);
79 while (HAL_ADC_Init(&handle) != HAL_OK);
80 __HAL_LINKDMA(&handle, DMA_Handle, dma.handle);
85 auto ret =
Channel{iBuffer[channelCnt], conf.
lsb};
87 ADC_ChannelConfTypeDef sConfig {
89 .Rank = channelCnt + 1,
92 while (HAL_ADC_ConfigChannel(&handle, &sConfig) != HAL_OK);
99 ADC_HandleTypeDef handle{};
101 uint32_t &channelCnt = handle.Init.NbrOfConversion;
Wrapper class for simple digital input/output pin.
Definition gpio.h:13
Class representing one measured pin/value.
Definition adc.h:21
double get()
return measured value
Definition adc.h:23
int16_t & raw
raw value from adc
Definition adc.h:27
Analog to Digital Converter Peripheral Driver.
Definition adc.h:32
DMA_Stream_TypeDef * dmaStream
DMA Stream for reading out raw values.
Definition adc.h:37
Channel get(ChannelConf conf)
register/create pin/channel for analog measurement
Definition adc.h:84
double lsb
Least Significant Bit value factor.
Definition adc.h:44
void init()
initialize driver.
Definition adc.h:78
uint32_t prescaler
Peripheral clock prescaler.
Definition adc.h:36
void measure()
start measuring all registered channels/pins
Definition adc.h:71
ADC_TypeDef * adc
ADC Peripheral.
Definition adc.h:35
DIO pin
Analog configured pin.
Definition adc.h:45
uint32_t samplingTime
sampling time
Definition adc.h:43
uint32_t channel
ADC Channel number [i.e. Pin].
Definition adc.h:42
uint32_t dmaChannel
DMA Channel.
Definition adc.h:38
HW(const Conf &conf)
create Driver with given Conf
Definition adc.h:49
channel configuration
Definition adc.h:41
driver configuration
Definition adc.h:34