STM32——ADC

1、勾选标准外设库

2、代码实现

mian.c

#include <stm32f10x.h>
#include "delay.h"
#include "adc.h"

int main(void)
{
	uint16_t adc_result;
	float adc_value;
	adc_init();
	while(1)
	{
		adc_result = adc_getresult();
		adc_value = adc_result * 3.3 / 4095;
		delay_s(2);
	}
}


adc.h

#ifndef _ADC_H
#define _ADC_H

#include <stm32f10x.h>

void adc_init(void);
uint16_t adc_getresult(void);

#endif 

adc.c

#include "adc.h"

void adc_init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	ADC_InitTypeDef ADC_InitStructure;
	//打开ADC1 GPIOA时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA, ENABLE);
	//配置PA1为模拟输入模式
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
	/* ADC1 configuration*/
  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//独立模式
  ADC_InitStructure.ADC_ScanConvMode = DISABLE;//单通道 非扫描
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//使能连续转换
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//软件触发
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//数据右对齐
  ADC_InitStructure.ADC_NbrOfChannel = 1;//单通道 只有一个通道需要转换
  ADC_Init(ADC1, &ADC_InitStructure);
  /* ADC1 regular channels configuration */ 
  ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_28Cycles5);  
  /* Enable ADC1 */
  ADC_Cmd(ADC1, ENABLE);

  //ADC校准
  /* Enable ADC1 reset calibration register */   
  ADC_ResetCalibration(ADC1);
  /* Check the end of ADC1 reset calibration register */
  while(ADC_GetResetCalibrationStatus(ADC1));

  /* Start ADC1 calibration */
  ADC_StartCalibration(ADC1);
  /* Check the end of ADC1 calibration */
  while(ADC_GetCalibrationStatus(ADC1));

	//启动ADC转换
	/* Start ADC1 Software Conversion */ 
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);

}

uint16_t adc_getresult(void)
{
	while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) == RESET);
	return (ADC_GetConversionValue(ADC1));
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值