可以看到对应的采集引脚是PC2,数据手册中可以看到:
PC2对应AIN2,原理图中的命名其实可以统一一下。
ES32VF2264支持1路高速模数转换器(ADC)。ADC(Analog to Digital Convertor)是12位分辨率的逐次逼近型模数转换器。具有多达20个复用通道,可测量从管脚输入的17个外部信号、3个内部信号(包括1路温感通道、1路1/4VDD和1路内部VREF 1.2V)。这些通道的模数转换可在单次、连续、扫描或不连续采样模式下进行。ADC的结果存储在一个左对齐或右对齐的16位数据寄存器中。
接下来我们进行一下初始化,IO口初始化:
#define ADC_CHANNEL2_PIN ALD_GPIO_PIN_2
#define ADC_CHANNEL2_PORT GPIOC
void init_adc_pin(void)
{
/* Initialize adc gpio pin: PC0 */
ald_gpio_init_t gpio_init;
memset(&gpio_init, 0x0, sizeof(ald_gpio_init_t));
gpio_init.mode = ALD_GPIO_MODE_CLOSE;
gpio_init.pupd = ALD_GPIO_FLOATING;
gpio_init.odrv = ALD_GPIO_OUT_DRIVE_NORMAL;
gpio_init.flt = ALD_GPIO_FILTER_DISABLE;
gpio_init.type = ALD_GPIO_TYPE_CMOS;
gpio_init.func = ALD_GPIO_FUNC_0;
ald_gpio_init(ADC_CHANNEL2_PORT, ADC_CHANNEL2_PIN, &gpio_init);
return;
}
复制代码ald_adc_handle_t g_adc_config;
ald_adc_nch_conf_t g_nch_config;
void init_ADC(void)
{
memset(&g_adc_config, 0x0, sizeof(ald_adc_handle_t));
memset(&g_nch_config, 0x0, sizeof(ald_adc_nch_conf_t));
/* Initialize adc */
g_adc_config.perh = ADC;
g_adc_config.init.align = ALD_ADC_DATAALIGN_RIGHT;
g_adc_config.init.scan = ENABLE;
g_adc_config.init.cont = DISABLE;
g_adc_config.init.disc = ALD_ADC_ALL_DISABLE;
g_adc_config.init.disc_nr = ALD_ADC_DISC_NR_1;
g_adc_config.init.data_bit = ALD_ADC_CONV_BIT_12;
g_adc_config.init.div = ALD_ADC_CKDIV_16;
g_adc_config.init.nche_sel = ALD_ADC_NCHESEL_MODE_ALL;
g_adc_config.init.nch_nr = ALD_ADC_NCH_NR_1;
g_adc_config.init.n_ref = ALD_ADC_NEG_REF_VSS;
g_adc_config.init.p_ref = ALD_ADC_POS_REF_VDD;
g_adc_config.normal_cplt_cbk = normal_convert_complete;
ALD_ADC_ENABLE(&g_adc_config);
ALD_ADC_DISABLE(&g_adc_config);
ald_adc_init(&g_adc_config);
/* Initialize nromal convert channel */
g_nch_config.ch = ALD_ADC_CHANNEL_2;
g_nch_config.idx = ALD_ADC_NCH_IDX_1;
g_nch_config.samp = ALD_ADC_SAMPLETIME_4;
ald_adc_normal_channel_config(&g_adc_config, &g_nch_config);
ald_mcu_irq_config(ADC_IRQn, 4, ENABLE);
}
复制代码uint32_t g_adc_result;
void normal_convert_complete(ald_adc_handle_t *arg)
{
g_adc_result = ald_adc_normal_get_value(&g_adc_config) * 3300 / 4095;
return;
}
复制代码