EFM32例程——ADC

硬件:EFM32GG230512
工具:keil5

ADC实验
简单测量电压

初始化

/*********************************************************************************************************
** Function name:      adc_ch2_init
** Descriptions:       ADC初始化
** input parameters:   none
** output parameters:  none
** Returned value:     none
*********************************************************************************************************/
void adc_init(void){
	
//	CMU_ClockEnable(cmuClock_HFPER, true);
    CMU_ClockEnable(cmuClock_ADC0, true);                               /* 使能ADC模块时钟              */

    ADC_Init_TypeDef tAdcInit = {
        .ovsRateSel = adcOvsRateSel2,                                   /* ADC过采样配置                */
        .lpfMode    = adcLPFilterBypass,                                /* 旁路输入滤波RC电路           */
        .warmUpMode = adcWarmupNormal,                                  /* 正常预热模式                 */
        .timebase   = ADC_TimebaseCalc(0),                              /* 基时间配置                   */
        .prescale   = ADC_PrescaleCalc(7000000, 0),                     /* ADC时钟分频配置              */
        .tailgate   = false                                             /* 不使能Tailgate               */
    };
    ADC_InitSingle_TypeDef tSingleInit = {
        .prsSel     = adcPRSSELCh0,                                     /* 选择PRS通道0                 */
        .acqTime    = adcAcqTime16,                                     /* 配置采集时间为16周期         */
        .reference  = adcRefVDD,                                        /* 使用VDD参考电压              */
        .resolution = adcRes12Bit,                                      /* 使用12位分辨率               */
        .input      = adcSingleInpCh2,                             		/* 输入选择通道2                */
        .diff       = false,                                            /* 不采用差分采集模式           */
        .prsEnable  = false,                                            /* 禁能PRS输入                  */
        .leftAdjust = false,                                            /* 使用右对准                   */
        .rep        = false                                             /* 不使用连续转换               */
    };
    ADC_Init(ADC0, &tAdcInit);
    ADC_InitSingle(ADC0, &tSingleInit);                                 /* 初始化ADC单次转换            */
}

/*********************************************************************************************************
** Function name:      get_ch2_value
** Descriptions:       获取ch2通道电压值
** input parameters:   none
** output parameters:  none
** Returned value:     电压值
*********************************************************************************************************/
uint32_t get_value(void){
	uint32_t ulVoltage;
	
	CMU_ClockEnable(cmuClock_ADC0, true);
	
	ADC_Start(ADC0, adcStartSingle);                                    /* 启动单次转换                 */
	
	while (ADC0->STATUS & ADC_STATUS_SINGLEACT) ;
		
	ulVoltage = ADC_DataSingleGet(ADC0) * 330 / 4095;                   /* 计算采集到的电压值           */
	
	CMU_ClockEnable(cmuClock_ADC0, false);
	
	return (ulVoltage);
}

main

/*********************************************Copyright (c)***********************************************
** File name:             	  	main.c
** Created by:					Gui              
** Version:               		V1.0.0        
** Descriptions:            	ADC测试,使用PD2作为输入,检测电压值
*********************************************************************************************************/
#include "system.h"
#include "em_device.h"
#include "em_chip.h"
#include "em_cmu.h"
#include "delay.h"
#include "adc.h"

int main()
{
	CMU_ClockEnable(cmuClock_HFPER, true); //前置芯片设置
	CMU_ClockEnable(cmuClock_GPIO, true);
	
	if(SysTick_Config(SystemCoreClockGet()/1000))while(1);//1ms的systick中断
	adc_init();
	
	while(1){
		get_value();
	}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值