280|0

437

帖子

3

TA的资源

纯净的硅(高级)

楼主
 

【极海APM32M3514电机通用评估板】 ADC输入测试 [复制链接]

 

ADC输入测试,串口输出ADC采样的电压值。

 

一、硬件部分

 

测试使用开发板上的电位器RV1,调整RV1改变ADC输入电压。

电路图部分如下:

对应MCU输入端口

 

二、程序部分

 

2.1、adc.c

#include "main.h"

void init_adc(void)
{
	GPIO_Config_T gpioConfig;
	ADC_Config_T  adcConfig;

	/* RCM Enable*/
	RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_GPIOA);
	RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_ADC);
	RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_SYSCFG);
	/* GPIO Configuration */
	gpioConfig.pin = GPIO_PIN_7;
	gpioConfig.mode = GPIO_MODE_AN;
	gpioConfig.pupd = GPIO_PUPD_PU;
	GPIO_Config(GPIOA, &gpioConfig);
	/* ADC Configuration */
	ADC_Reset();
	ADC_ConfigStructInit(&adcConfig);
	/* Set resolution*/
	adcConfig.resolution    = ADC_RESOLUTION_12B;
	/* Set dataAlign*/
	adcConfig.dataAlign     = ADC_DATA_ALIGN_RIGHT;
	/* Set scanDir*/
	adcConfig.scanDir       = ADC_SCAN_DIR_UPWARD;
	/* Set convMode continous*/
	adcConfig.convMode      = ADC_CONVERSION_CONTINUOUS;
	/* Set extTrigConv*/
	adcConfig.extTrigConv1  = ADC_EXT_TRIG_CONV_TRG0;
	/* Set TrigEdge*/
	adcConfig.extTrigEdge1  = ADC_EXT_TRIG_EDGE_NONE;

	ADC_Config(&adcConfig);
	ADC_ConfigChannel(ADC_CHANNEL_7, ADC_SAMPLE_TIME_239_5);
	/* Enable Interrupt*/
	ADC_EnableInterrupt(ADC_INT_CS);

	NVIC_EnableIRQRequest(ADC_COMP_IRQn, 2);

	/* Calibration*/
	ADC_ReadCalibrationFactor();
	/* Enable ADC*/
	ADC_Enable();
}

void ADC_Isr(void)
{
	uint32_t adcData = 0;
	uint32_t voltage = 0;

	if (ADC_ReadIntFlag(ADC_INT_FLAG_CS) == SET)
	{
			ADC_ClearIntFlag(ADC_INT_FLAG_CS);
			/* Read ADC Conversion value */
			adcData = ADC_ReadConversionValue();
			/*  voltage(mV) =  adcData * (3300mV / 4095) */
			voltage = (adcData * 3300) / 4095;
			/* output to serial port */
			printf("voltage : %d mV\r\n", voltage);
	}
}

 

2.2、adc.h

#ifndef _ADC_H
#define _ADC_H

void init_adc(void);
void ADC_Isr(void);

#endif

 

2.3、main.c

#include "main.h"
int main(void)
{
	APM_DelayInit();
	APM_DelayMs(5000);
	
	init_usart();
	init_led();
	init_adc();
	
	/* Wait until ADC is ready */
    while (!ADC_ReadStatusFlag(ADC_FLAG_ADRDY));
    ADC_StartConversion();

	while (1)
	{
		led_on();
		APM_DelayMs(100);
		led_off();
		APM_DelayMs(100);
	}
}

2.4、main.h

#ifndef __MAIN_H
#define __MAIN_H

#ifdef __cplusplus
extern "C" {
#endif

/* Includes */
#include <stdio.h>
#include <string.h>
#include "Board.h"
#include "apm32m35xx.h"
#include "bsp_delay.h"
#include "apm32m35xx_rcm.h"
#include "apm32m35xx_gpio.h"
#include "apm32m35xx_misc.h"
#include "apm32m35xx_usart.h"
#include "apm32m35xx_adc.h"


#include "led/led.h"
#include "usart/usart.h"
#include "adc/adc.h"

#ifdef __cplusplus
}
#endif

#endif

 

三、程序运行结果

 

下载程序后,串口打印ADC采集的电压值

 

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/5 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表