没志青年
发布于 2025-06-13 / 13 阅读
0

32单片机 - DAC

#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); 
}