43 template<auto Context, u8 Index, u32 Offset, u32 MaxValue>
74 operator float() const noexcept {
77 HAL_ADC_Start(Context);
78 HAL_ADC_PollForConversion(Context, HAL_MAX_DELAY);
80 return std::max(
static_cast<float>(HAL_ADC_GetValue(Context)) - Offset, 0.0F) / MaxValue;
91 constexpr
static u32 getHALChannel() noexcept {
93 case 0:
return ADC_CHANNEL_0;
94 case 1:
return ADC_CHANNEL_1;
95 case 2:
return ADC_CHANNEL_2;
96 case 3:
return ADC_CHANNEL_3;
97 case 4:
return ADC_CHANNEL_4;
98 case 5:
return ADC_CHANNEL_5;
99 case 6:
return ADC_CHANNEL_6;
100 case 7:
return ADC_CHANNEL_7;
101 case 8:
return ADC_CHANNEL_8;
102 case 9:
return ADC_CHANNEL_9;
103 case 10:
return ADC_CHANNEL_10;
104 case 11:
return ADC_CHANNEL_11;
105 case 12:
return ADC_CHANNEL_12;
106 case 13:
return ADC_CHANNEL_13;
107 case 14:
return ADC_CHANNEL_14;
108 case 15:
return ADC_CHANNEL_15;
109 case 16:
return ADC_CHANNEL_16;
110 case 17:
return ADC_CHANNEL_17;
111 case 18:
return ADC_CHANNEL_18;
112 default: bsp::unreachable();
119 void switchChannel() const noexcept {
120 ADC_ChannelConfTypeDef channelConfig = { 0 };
121 constexpr
auto HALChannel = getHALChannel();
123 channelConfig.Channel = HALChannel;
124 channelConfig.Rank = ADC_REGULAR_RANK_1;
125 channelConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
127 HAL_ADC_ConfigChannel(Context, &channelConfig);
133 template<auto,
template<auto, u8, u32, u32>
typename>