ADC采集

一、硬件引脚介绍

CSM32L051的P72、P70、P20具备ADC采集功能,本篇文章只对这三个引脚的ADC进行采集。

二、引脚通道配置介绍

通过查阅数据手册发现:

P20引脚用到的ADC为   ANI0      通道为    ADC_Channel_0

P70引脚用到的ADC为   ANI29    通道为   ADC_Channel_29

P72引脚用到的ADC为   ANI31    通道为   ADC_Channel_31

进行ADC初始化时要用到这些参数,需要先查阅好资料。

三、ADC初始化

void adc_init(void)
{
	GPIO_InitTypeDef      GPIO_InitStructure;
	ADC_InitTypeDef       ADC_InitStructure;
	

	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Ctrl = GPIO_Control_ANA; //模拟输入
	GPIO_Init(GPIO_PORT2, &GPIO_InitStructure);//初始化
	

	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0 | GPIO_Pin_2;
	GPIO_InitStructure.GPIO_Ctrl = GPIO_Control_ANA; //模拟输入
	GPIO_Init(GPIO_PORT7, &GPIO_InitStructure);//初始化
	
	ADC_InitStructure.ADC_Mode = ADC_Mode_Select; //选择模式
	ADC_InitStructure.ADC_ConvSpeed = ADC_ConvSpeed_High; //高速变换模式
	ADC_InitStructure.ADC_Prescaler = ADC_Prescaler_Div32;//预分频
	ADC_InitStructure.ADC_RefVoltage = ADC_Ref_Vdd; //使用VDD参考电压
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrig_Software; //软件触发
	ADC_InitStructure.ADC_ContinuousConvMode = ADC_Conv_Continuous;//开启连续转换
	ADC_InitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_4Cycles; 
	ADC_InitStructure.ADC_UpLimit = ADC_UpLimit_Setting; //adc采样高8位 采样比较最大值,默认值
	ADC_InitStructure.ADC_LowLimit = ADC_LowLimit_Setting; //adc采样高8位 采样比较最低值,默认值
	ADC_Init(&ADC_InitStructure);
	
}

四、ADC读取

unsigned int adc1 = 0;//用于存放P20  adc的值
unsigned int adc2 = 0;//用于存放P70  adc的值
unsigned int adc3 = 0; //用于存放P72 adc的值
unsigned short get_value_adc1[8*2];//adc1
unsigned short get_value_adc2[8*2];//adc2
unsigned short get_value_adc3[8*2];//adc3

void adc_read(void)
{
	adc1 = ADC_Converse(ADC_Channel_0,8,get_value_adc1);//读取adc1
	adc2 = ADC_Converse(ADC_Channel_29,8,get_value_adc2);//读取adc2
	adc3 = ADC_Converse(ADC_Channel_31,8,get_value_adc3);//读取adc3
}

五、ADC.h文件调用

#ifndef _ADC_H_
#define _ADC_H_

#include "adc.h"

void adc_init(void);
void adc_read(void);

extern unsigned int adc1;
extern unsigned int adc2;
extern unsigned int adc3;


#endif




六、main函数调用

int main()
{
    adc_init();
    while(1)
    {
        adc_read();
        //可在这里调用adc1 - adc3 的值
        //例如  int a  = adc1;
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值