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