#ifndef __BSP_DAC3_H__
#define __BSP_DAC3_H__
#include "stm32g4xx_hal.h"
extern DAC_HandleTypeDef hdac3;
void DAC3_Init(void);
void DAC3_Set_Value(uint32_t channel, uint32_t val);
void DAC3_Start(void);
#endif
#include "DAC3.h"
DAC_HandleTypeDef hdac3;
void DAC3_Init(void)
{
__HAL_RCC_DAC3_CLK_ENABLE();
hdac3.Instance = DAC3;
if (HAL_DAC_Init(&hdac3) != HAL_OK)
{
while(1);
}
DAC_ChannelConfTypeDef sConfig = {0};
sConfig.DAC_HighFrequency = DAC_HIGH_FREQUENCY_INTERFACE_MODE_AUTOMATIC;
sConfig.DAC_DMADoubleDataMode = DISABLE;
sConfig.DAC_SignedFormat = DISABLE;
sConfig.DAC_SampleAndHold = DAC_SAMPLEANDHOLD_DISABLE; // 关闭采样保持
sConfig.DAC_Trigger = DAC_TRIGGER_NONE; // 不触发
sConfig.DAC_Trigger2 = DAC_TRIGGER_NONE; // 不触发
sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_DISABLE;
sConfig.DAC_ConnectOnChipPeripheral = DAC_CHIPCONNECT_INTERNAL; // 只内部通道
sConfig.DAC_UserTrimming = DAC_TRIMMING_FACTORY; //工厂矫正模式
if (HAL_DAC_ConfigChannel(&hdac3, &sConfig, DAC_CHANNEL_1) != HAL_OK)
{
while(1);
}
if (HAL_DAC_ConfigChannel(&hdac3, &sConfig, DAC_CHANNEL_2) != HAL_OK)
{
while(1);
}
}
void DAC3_Set_Value(uint32_t channel, uint32_t val) {
if (val > 4095) val = 4095;
HAL_DAC_SetValue(&hdac3, channel, DAC_ALIGN_12B_R, val); // 输出中间电压(0~4095)
}
void DAC3_Start(void) {
HAL_DAC_Start(&hdac3, DAC_CHANNEL_1);
HAL_DAC_Start(&hdac3, DAC_CHANNEL_2);
}