STM32模拟量采集

文章详细介绍了STM32F103C8T6微控制器的ADC资源,包括其12位逐次逼近型ADC的特性,如转换时间和通道数量。内容涵盖ADC的规则组和注入组功能,以及如何进行通道配置和选择模拟输入。此外,还提供了具体的代码示例,展示了如何进行时钟和GPIO配置、ADC结构体初始化、校准过程以及数据采集的实现,主要采用软件触发的单次转换模式。
摘要由CSDN通过智能技术生成

STM32AD转换

1、stm32F103C8T6AD资源介绍

stm32F103C8T6有两个ADC资源,12位逐次逼近型ADC,输入电压范围0~3.3V,转换范围0到4095(2^12-1),两者线性相关。最大转换时间1us,即最大频率为1MHZ。18个转换通道,可测量16个外部和两个内部信号源,但引出引脚只能测10个外部信号源。有规则组和注入组两个转换单元,有单次、连续转换模式,非扫描、扫描模式。
ADC转换基本框图
在这里插入图片描述

1.规则组

规则组可以一次性转换16个AD数据,但规则组数据通道寄存器只能存放一个数据,如果要实现一次性转换,且保证数据不丢失,一般需要配合DMA来使用。

2.注入组

注入组可以一次性转换4个AD数据,且注入组数据通道寄存器可以存放四个数据。

2、AD转换具体代码实现(基于标准库软件触发)

1、配置时钟和GPIO口
ADC共有10个输入通道,ADC1和ADC2都复用在每一个通道上,即每个通道可以选择不同的ADC资源。每个通道有对应的IO口,这里选用PA0,选择ADC1_IN0。
ADCCLOCK最大频率为14MHZ。

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
	RCC_ADCCLKConfig(RCC_PCLK2_Div6); //6分频,72/6=12MHZ
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);

2、规则组通道配置
把通道0放在第一个序列,采样时间55.5个ADC周期

ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1, ADC_SampleTime_55Cycles5);	

3、ADC结构体配置以及校准
单次转换模式每次采集都要重新软件触发一次,连续转换模式只要软件触发一次就行且不需要判断EOC标志位。

	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_Cmd(ADC1,ENABLE); //使能ADC
	
	ADC_ResetCalibration(ADC1);		//复位校准
	while (ADC_GetResetCalibrationStatus(ADC1) == SET);
	ADC_StartCalibration(ADC1);		//开始校准
	while (ADC_GetCalibrationStatus(ADC1) == SET);

4、ADC数据采集

	ADC_SoftwareStartConvCmd(ADC1, ENABLE); //开始转换
	while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET); //判断转换是否完成,即判断EOC标志位是否置1
	ADC_GetConversionValue(ADC1); //数据采集函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值