DAC数模转换,输入数字端口输出对应的电压,范围 0x000 - 0xFFF。
选择引脚 PA4。按键按下一次增加电压,循环增加,万用表测量即可。
dac.c
#include "dac.h"
#include "gd32vf103.h"
#include "gd32vf103_libopt.h"
// ************************************************************************************************************** //
//DAC 初始化
void DAC0_Init()
{
rcu_periph_clock_enable(RCU_GPIOA); //开启GPIOA时钟
rcu_periph_clock_enable(RCU_DAC); //开启DAC时钟
gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_4); //初始化引脚 PA4
dac_deinit();
//dac_trigger_source_config(DAC0, DAC_TRIGGER_EXTI_9); //DAC触发源选择 \\----不使用
dac_trigger_disable(DAC0); //不使能触发模式
dac_wave_mode_config(DAC0, DAC_WAVE_DISABLE); //DAC噪声波模式选择
//dac_wave_mode_config(DAC0, DAC_WAVE_MODE_LFSR); //DAC噪声波模式选择 \\____不使用
//dac_lfsr_noise_config(DAC0, DAC_LFSR_BITS11_0); //DAC LFSR模式设置 //~~~~不使用
dac_output_buffer_disable(DAC0); //DAC输出缓冲区使能
dac_data_set(DAC0, DAC_ALIGN_12B_R, 0); //设置DAC0 数据
dac_enable(DAC0);
}
dac.h
#ifndef __DAC_H__
#define __DAC_H__
#include "gd32vf103.h"
#include "systick.h"
// ************************************************************************************************************** //
void DAC0_Init(void);
#endif
main.c
#include "gd32vf103.h"
#include "gd32vf103c_start.h"
#include "systick.h"
#include <stdio.h>
#include <string.h>
#include "led.h"
#include "key.h"
#include "usart0.h"
#include "dac.h"
// ************************************************************************************************************* //
//主函数
int main(void)
{
uint16_t Value = 0;
uint8_t key = 0;
eclic_global_interrupt_enable();
eclic_priority_group_set(ECLIC_PRIGROUP_LEVEL3_PRIO1);
LED_Init(); //LED灯初始化
KEY_Init(); //KEY按键初始化
USART0_Init(); //USART0初始化
DAC0_Init(); //DAC0初始化
printf("串口测试 USART TEST 0123456789 \n\r");
while(1)
{
key = KEY_Scan();
if(key == 1)
{
LED0_T;
Value+=0x100;if(Value > 0xfff) {Value = 0x000;}
dac_data_set(DAC0, DAC_ALIGN_12B_R, Value); //设置DAC0 数据
}
delay_1ms(100);
}
}
个人见解,感谢阅读。