目录
GD32F450最多2组DAC。数据可以采用 8 位或 12 位模式,左对齐或右对齐模式。
在使能 DAC 模块前,GPIO 口(PA4 对应 DAC0,PA5 对应 DAC1)应配置为模拟模式。
1. 初始化
1.1 GPIO初始化
#define IO_DAC GPIOA
#define PIN_DAC_0 4
#define PIN_DAC_1 5
#define PIN_DAC PIN_DAC_0
#define DACSetAN() gpio_mode_set(IO_DAC, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, ((uint32_t)1 << PIN_DAC))
1.2 使能RCU
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_DAC);
1.3 配置DAC
dac_trigger_disable(DAC_OUT);
dac_wave_mode_config(DAC_OUT, DAC_WAVE_DISABLE);
dac_output_buffer_enable(DAC_OUT);
不使用触发。
1.4 使能DAC
dac_enable(DAC_OUT);
2. DAC输出
dac_data_set(DAC_OUT, DAC_ALIGN_12B_R, gDacValue);
采用右对齐,12bit的设置,DAC的有效值范围为0-0xFFF。
3. 实例
GD32450i-EVAL的DAC输出配置:
通过按键Wakeup和Tamper增减DAC的设置值,用万用表量测DACOUT可以看到电压从0-3.3V的变化。
case KEY_WAKEUP | KEY_BREAK:
gDacValue += 0x10;
gDacValue &= 0xFFF;
//Printf("DAC Set Value:0x%x\n", gDacValue);
dac_data_set(DAC_OUT, DAC_ALIGN_12B_R, gDacValue);
break;
case KEY_TAMPER | KEY_BREAK:
gDacValue -= 0x10;
gDacValue &= 0xFFF;
//Printf("DAC Set Value:0x%x\n", gDacValue);
dac_data_set(DAC_OUT, DAC_ALIGN_12B_R, gDacValue);
break;