/* * DAC.cpp * * Created on: Jun 25, 2023 * Author: Carst */ #include #include #include "DAC.hpp" namespace ElektronischeLast { iDAC::iDAC() { /**DAC1 GPIO Configuration PA4 ------> DAC1_OUT1 PA5 ------> DAC1_OUT2 */ LL_GPIO_InitTypeDef GPIO_InitStruct = { .Pin = LL_GPIO_PIN_4, .Mode = LL_GPIO_MODE_ANALOG, .Pull = LL_GPIO_PULL_NO, }; LL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Pin = LL_GPIO_PIN_5; LL_GPIO_Init(GPIOA, &GPIO_InitStruct); /** DAC channel OUT1 config */ LL_DAC_InitTypeDef DAC_InitStruct = { .TriggerSource = LL_DAC_TRIG_SOFTWARE, .WaveAutoGeneration = LL_DAC_WAVE_AUTO_GENERATION_NONE, .OutputBuffer = LL_DAC_OUTPUT_BUFFER_ENABLE, .OutputConnection = LL_DAC_OUTPUT_CONNECT_GPIO, .OutputMode = LL_DAC_OUTPUT_MODE_NORMAL, }; LL_DAC_Init(DAC1, LL_DAC_CHANNEL_1, &DAC_InitStruct); LL_DAC_DisableTrigger(DAC1, LL_DAC_CHANNEL_1); LL_DAC_EnableDMAReq(DAC1, LL_DAC_CHANNEL_1); LL_DAC_Enable(DAC1, LL_DAC_CHANNEL_1); /** DAC channel OUT2 config */ LL_DAC_Init(DAC1, LL_DAC_CHANNEL_2, &DAC_InitStruct); LL_DAC_DisableTrigger(DAC1, LL_DAC_CHANNEL_2); LL_DAC_Enable(DAC1, LL_DAC_CHANNEL_2); } iDAC::~iDAC() { } void iDAC::write(DAC_CHANNEL channel, uint32_t data) { LL_DAC_ConvertData12RightAligned(DAC, /*(channel == CHANNEL_1) ?*/ LL_DAC_CHANNEL_1 /*: LL_DAC_CHANNEL_2*/, data); } }