可以看到对应的采集引脚是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;
- }