第七部分:2. STM32之ADC实验--ADC多通道采集传感器的模拟信号(AD采集4路传感器模块实验:对射式槽型传感器、热敏传感器、反射式传感器附赠温湿度传感器教程)

这个多通道采用非扫描模式--单次转换模式

1.代码配置链路图

2. ADC的输入通道

3.ADC的非扫描模式的转换模式(单次和连续)

4.ADC的扫描模式的转换模式(单次和连续)

5.采集校准

代码实验:

代码部分:

#include "stm32f10x.h"                  // Device header


void AD_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE); //开启ADC1的时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	RCC_ADCCLKConfig(RCC_PCLK2_Div6);		//配置ADC时钟分频器	
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;   //ADC模拟输入模式
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	
	//配置ADC1模1块初始化
	ADC_InitTypeDef ADC_InitStructure;
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right ;
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent ;
	ADC_InitStructure.ADC_NbrOfChannel = 1;
	ADC_InitStructure.ADC_ScanConvMode = DISABLE;
	ADC_Init(ADC1,&ADC_InitStructure);
	
	
/*	
ADC_ContinuousConvMode = DISABLE

关闭连续转换模式。ADC在每次触发时仅进行一次转换,转换完成后停止,适用于单次采样的场合。
ADC_DataAlign = ADC_DataAlign_Right

数据右对齐。ADC转换结果存储时,低位对齐方式,通常选择右对齐便于读取和处理。
ADC_ExternalTrigConv = ADC_ExternalTrigConv_None

外部触发关闭。ADC转换不依赖外部触发源,适用于单次软件触发或内部定时触发的场景。
ADC_Mode = ADC_Mode_Independent

独立模式。ADC模块工作在独立模式下,不与其他ADC模块联动。
ADC_NbrOfChannel = 1

仅采样一个通道。配置当前ADC转换序列中包含的通道数量为1,适用于单通道采样的情况。
ADC_ScanConvMode = DISABLE

关闭扫描转换模式。ADC仅对一个通道进行采样,不自动扫描多个通道。
*/	
	
	
	//中断
	//模拟看门狗
	
	//开启ADC电源
	ADC_Cmd(ADC1,ENABLE);
	
	//ADC校准
	ADC_ResetCalibration(ADC1);
	while((ADC_GetResetCalibrationStatus(ADC1) == SET));
	ADC_StartCalibration(ADC1);
	while((ADC_GetCalibrationStatus(ADC1))  == SET);
	
}

//启动转换,获取结果

uint16_t AD_GetValue(uint8_t ADC_Channel)
{
	//配置规则组的输入通道
	ADC_RegularChannelConfig(ADC1,ADC_Channel,1,ADC_SampleTime_55Cycles5);
	ADC_SoftwareStartConvCmd(ADC1,ENABLE);
	while((ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) == RESET));
	return ADC_GetConversionValue(ADC1);
}



float ADC_ValueToVoltage(uint16_t adc_value)
{
    return (adc_value * 3.3f) / 4095.0f;
}


















视频演示现象

STM32多路ADC采集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值