GD32 ADC功能及代码详解

您所在的位置:网站首页 ADC_INSERTED_CHANNEL_AUTO GD32 ADC功能及代码详解

GD32 ADC功能及代码详解

2023-04-15 13:18| 来源: 网络整理| 查看: 265

最近实习,接触到的板子是GD32,是国产兆易的,在学习裸机的ADC例程,期间学习到了好多知识。也很后悔在学校里没有深入学习这些东西。导致在工作中遇到很多问题。

ADC是模数转换器,这个不用说了,大家都知道。具有12位分辨率。它一共有18个通道,16个外部通道,两个内部通道。各种通道的AD转换可以配置成单次、连续、扫描或间断转换模式。接下来讲解下这些转换模式的区别。

单次转换模式 每次转换都要触发,单通道,先触发规则通道,在采样,在转换。如下图所示。图中的EOC是转换完成标志。

连续转换模式 只第一次触发,之后就不停的转换按着顺序,逐个转换一遍,每个通道转换完成都会引发EOC或者EOIC就被置位,且循环不停。

在这里插入图片描述

扫描转换模式

触发一次,规则组或者注入组所有指定的通道按着顺序,逐个转换一遍,只有当最后一个通道转换完成后,才会引发EOC或者就被置位。每轮转换,都需要触发信号。

扫描转换模式,且连续转换失能

在这里插入图片描述

扫描转换模式,且连续转换使能

在这里插入图片描述

连续转换和扫描转换有什么区别

连续默认是单通道,要多通道首先要先设置扫描 扫描模式:触发一次,规则组或者注入组所有指定的通道按照顺序,逐个转换一遍。注:扫描模式下,要使能DMA。

使用ADC规则通道,获取五路通道,用扫描转换模式实现的,代码如下:

/*! \file main.c \brief ADC Temperature Vrefint demo */ /* Copyright (C) 2017 GigaDevice 2017-06-23, V1.0.0, demo for GD32F30x */ #include "gd32f30x.h" #include "gd32f303c_eval.h" #include "systick.h" #include #define BOARD_ADC_CHANEL ADC_CHANNEL_13 #define ADC_GPIO_PORT GPIOC #define ADC_GPIO_PIN GPIO_PIN_3 //IN0 :PA0 IN1: PA1 IN2 :PA2 IN3:PA3 uint16_t adc_value[5]; //float temperature; float vref_value; void rcu_config(void); void gpio_config(void); void dma_config(void); void adc_config(void); /*! \brief main function \param[in] none \param[out] none \retval none */ int main(void) { int i; /* system clocks configuration */ rcu_config(); /* configure systick */ systick_config(); /*GPIO configuration*/ gpio_config(); /* ADC configuration */ adc_config(); /* USART configuration */ gd_eval_com_init(EVAL_COM1); while(1){ dma_config(); adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL); //规则通道 /* delay a time in milliseconds */ delay_1ms(2000); /* value convert */ // temperature = (1.43 - ADC_IDATA0(ADC0)*3.3/4096) * 1000 / 4.3 + 25; for ( i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3