libxr  1.0
Want to be the best embedded framework
Loading...
Searching...
No Matches
stm32_dac.cpp
1#include "stm32_dac.hpp"
2
3#if defined(HAL_DAC_MODULE_ENABLED)
4
5using namespace LibXR;
6
7STM32DAC::STM32DAC(DAC_HandleTypeDef* hadc, uint32_t channel, float init_voltage,
8 float vref)
9 : hdac_(hadc), channel_(channel), vref_(vref)
10{
11// NOLINTBEGIN
12#if defined(DAC_ALIGN_12B_R)
13 align_ = DAC_ALIGN_12B_R;
14 resolution_ = 4095;
15#elif defined(DAC_ALIGN_8B_R)
16 align_ = DAC_ALIGN_8B_R;
17 resolution_ = 255;
18#else
19#error "No supported DAC_ALIGN_xxx defined"
20#endif
21 // NOLINTEND
22
23 Write(init_voltage);
24 HAL_DAC_Start(hdac_, channel_);
25}
26
27ErrorCode STM32DAC::Write(float voltage)
28{
29 std::clamp(voltage, 0.0f, vref_);
30 return HAL_DAC_SetValue(
31 hdac_, channel_, align_,
32 static_cast<uint16_t>(voltage / vref_ * static_cast<float>(resolution_))) ==
33 HAL_OK
34 ? ErrorCode::OK
35 : ErrorCode::FAILED;
36}
37
38#endif
LibXR 命名空间
Definition ch32_gpio.hpp:9