GD32VF103_DAC
程序员文章站
2024-03-19 14:18:16
...
前言
GD32VF103_环境配置_GPIO_外部中断
GD32VF103_定时器中断
GD32VF103_串口发送_printf_接收中断_DMA
我们前三节写了GPIO, EXTI, TIMER, USART的用例, 本节写DAC的用例, 默认 PA4-DAC0
, PA5-DAC1
, 我们程序里面默认DAC0输出3.3V的1/2, DAC1输出为3.3V的1/4.
新建工程
打开NucleiStudio:
- File -> New -> C/C++ Project, 选择C Managed Build
- 选择GigaDevice RISC-V Project, 填入工程名
- MCU默认暂时只有GD32VF103, 然后Demo也没法选, 只有Running_LED, 不变
- 下一步, 完成.
DAC
main.c代码如下:
#include "gd32vf103.h"
//PA4 -- DAC0
//PA5 -- DAC1
#define DAC0_OUT_VAL (0x7FF0) //3.3 * 1/2
#define DAC1_OUT_VAL (0x3FF0) //3.3 * 1/4
int main(void) {
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_DAC);
/* once enabled the DAC, the corresponding GPIO pin
is connected to the DAC converter automatically */
gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_4);
gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_5);
dac_deinit();
dac_trigger_disable(DAC0);
dac_wave_mode_config(DAC0, DAC_WAVE_DISABLE);
dac_output_buffer_enable(DAC0);
dac_trigger_disable(DAC1);
dac_wave_mode_config(DAC1, DAC_WAVE_DISABLE);
dac_output_buffer_enable(DAC1);
dac_enable(DAC0);
dac_data_set(DAC0, DAC_ALIGN_12B_L, DAC0_OUT_VAL);
dac_enable(DAC1);
dac_data_set(DAC1, DAC_ALIGN_12B_L, DAC1_OUT_VAL);
while(1) {
}
return 0;
}
代码中 DAC_ALIGN_12B_L
靠左12bit对齐, 所以#define DAC0_OUT_VAL (0x7FF0)
就代表了一半输出.
调试运行, 拿出万用表, 测量AVDD电压3.31V, PA4电压为1.65V, PA5电压为0.82V, 符合预期. 工程代码略.
推荐阅读