单片机GD32F303RCT6 (Macos环境)开发 (十二)—— ADC的简单使用

ADC测量电压值

1、利用PA4脚的ADC功能,测量外部电压,PA脚接地时,usart0输出0,PA脚接3.3时输出电压3300(单位mv)
2、映射关系
在这里插入图片描述
3、增加adc.c adc.h 文件
adc.c

#include "gd32f30x.h"
#include "adc.h"
#include "type.h"
#include "systick.h"
/**
 * PA4 adc resolution test
 * Alternate: ADC01_IN4
*/

void pa4_adc_resolution_config(void)
{

    //配置PA4 ADC引脚
	rcu_periph_clock_enable(RCU_GPIOA);
	gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_4); 
	
	/* enable ADC1 clock */
	rcu_periph_clock_enable(RCU_ADC1);
	/* config ADC clock */
	rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV8);
   /* reset ADC */
    adc_deinit(ADC1);
 
    /* ADC mode config */
    adc_mode_config(ADC_MODE_FREE); 
    /* ADC continous function enable */
    adc_special_function_config(ADC1, ADC_CONTINUOUS_MODE, ENABLE); 
   
    /* ADC data alignment config */
    adc_data_alignment_config(ADC1, ADC_DATAALIGN_RIGHT);
    /* ADC resolusion 6B */
    //adc_resolution_config(ADC1, ADC_RESOLUTION_6B); 
    /* ADC channel length config */
    adc_channel_length_config(ADC1, ADC_REGULAR_CHANNEL, 1);

    /* ADC regular channel config */
    adc_regular_channel_config(ADC1, 0, ADC_CHANNEL_4, ADC_SAMPLETIME_55POINT5);

    /* ADC trigger config */
    adc_external_trigger_source_config(ADC1, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE); 
    adc_external_trigger_config(ADC1, ADC_REGULAR_CHANNEL, ENABLE);

    /* enable ADC interface */
    adc_enable(ADC1);  
    delay_1ms(1);
    /* ADC calibration and reset calibration */
    adc_calibration_enable(ADC1);
    /* enable ADC interface */    
	//	adc_software_trigger_enable(ADC0,ADC_REGULAR_CHANNEL);

    adc_software_trigger_enable(ADC1, ADC_REGULAR_CHANNEL);
}

void pa4_adc_resolution_test(void)
{
    uint16_t adc_value;
    pa4_adc_resolution_config();
    delay_1ms(1000);
    delay_1ms(1000);

    while(1)
    {        
        adc_flag_clear(ADC1, ADC_FLAG_EOC);
        while(SET != adc_flag_get(ADC1, ADC_FLAG_EOC)){
        }
        adc_value = ADC_RDATA(ADC1);        
        printf("Get ADC Value: %d\r\n", adc_value * 3300 / 4095);
        printf("\r\n ***********************************\r\n");
        delay_1ms(1000);
    }
}

adc.h

#ifndef __ADC_H__
#define __ADC_H__

void pa4_adc_resolution_test(void);
#endif

main.c在while循环里添加

#ifdef ENABLE_ADC_TEST    
    delay_1ms(1000);//等待1000ms
    pa4_adc_resolution_test();
#endif   

4、Makefile增加build 选项

ENABLE_ADC_TEST = yes

设置成no后,将不编译adc相关代码

5、终端输出信息如下:
在这里插入图片描述
6、代码路径:https://gitee.com/xiaoguo-tec_0/gd32-iap-code.git

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值