libxr  1.0
Want to be the best embedded framework
Loading...
Searching...
No Matches
stm32_adc.hpp
1#pragma once
2
3#include "main.h"
4
5#ifdef HAL_ADC_MODULE_ENABLED
6
7#ifdef ADC
8#undef ADC
9#endif
10
11#include "adc.hpp"
12#include "libxr.hpp"
13
14namespace LibXR
15{
16
23{
30 template <typename, typename = void>
32 {
33 float Get(ADC_HandleTypeDef* hadc)
34 {
35 UNUSED(hadc);
36 return 4095.0f;
37 }
38 };
39
45 template <typename T>
46 struct GetADCResolution<T, std::void_t<decltype(std::declval<T>().Init.Resolution)>>
47 {
48 float Get(T* hadc)
49 {
50 switch (hadc->Init.Resolution)
51 {
52#ifdef ADC_RESOLUTION_16B
53 case ADC_RESOLUTION_16B:
54 return 65535.0f;
55#endif
56#ifdef ADC_RESOLUTION_12B
57 case ADC_RESOLUTION_12B:
58 return 4095.0f;
59#endif
60#ifdef ADC_RESOLUTION_10B
61 case ADC_RESOLUTION_10B:
62 return 1023.0f;
63#endif
64#ifdef ADC_RESOLUTION_8B
65 case ADC_RESOLUTION_8B:
66 return 255.0f;
67#endif
68#ifdef ADC_RESOLUTION_6B
69 case ADC_RESOLUTION_6B:
70 return 63.0f;
71#endif
72 default:
73 return 4095.0f;
74 }
75 }
76 };
77
78 public:
83 class Channel : public ADC
84 {
85 public:
94 Channel(STM32ADC* adc, uint8_t index, uint32_t ch);
95
102 float Read() override;
103
104 private:
105 Channel();
106 STM32ADC* adc_;
107 uint8_t index_;
108 uint32_t ch_;
109
110 friend class STM32ADC;
111 };
112
122 STM32ADC(ADC_HandleTypeDef* hadc, RawData dma_buff, const uint32_t* channels,
123 uint8_t num_channels, float vref);
124
128 ~STM32ADC();
129
136 Channel& GetChannel(uint8_t index);
137
144 float ReadChannel(uint8_t channel);
145
146 private:
147 ADC_HandleTypeDef* hadc_;
148 const uint8_t NUM_CHANNELS;
149 uint8_t filter_size_;
150 bool use_dma_;
151 RawData dma_buffer_;
152 float resolution_;
153 Channel* channels_;
154 float vref_;
155
156 float ConvertToVoltage(float adc_value);
157};
158
159} // namespace LibXR
160
161#endif
模拟数字转换器(ADC)基类
Definition adc.hpp:18
原始数据封装类。 A class for encapsulating raw data.
STM32ADC 类,用于处理 STM32 系统的 ADC 通道。 Provides handling for STM32 ADC.
Definition stm32_adc.hpp:84
float Read() override
读取 ADC 值
Definition stm32_adc.cpp:14
STM32ADC 类,用于处理 STM32 系统的 ADC 通道。 Provides handling for STM32 ADC channels.
Definition stm32_adc.hpp:23
~STM32ADC()
析构函数 Destructor
Definition stm32_adc.cpp:37
STM32ADC(ADC_HandleTypeDef *hadc, RawData dma_buff, const uint32_t *channels, uint8_t num_channels, float vref)
STM32ADC 类,用于处理 STM32 系统的 ADC 通道。 Provides handling for STM32.
Definition stm32_adc.cpp:16
float ReadChannel(uint8_t channel)
读取 ADC 值
Definition stm32_adc.cpp:45
Channel & GetChannel(uint8_t index)
获取 ADC 通道对象 Get ADC channel object
Definition stm32_adc.cpp:43
LibXR 命名空间
Definition ch32_gpio.hpp:9
获取 ADC 分辨率 Get ADC resolution
Definition stm32_adc.hpp:32