ADC模数转换---STM32

描述:STM32单片机接受HRTM温湿度传感器采集的数据;

一、简介

ADC模拟---数字转换器:

ADC可以江引脚上连续变化的模拟电压转换为内存中的数字变量,建立模拟电路到数字电路的桥梁;

12位逐次逼近型的ADC,1us转换时间

输入电压范围:0~3.3V,转换结果范围:0~4095

18个输入通道,可测量16个外部和2个内部信号源

模拟看门狗自动检测输入电压范围

STM32F103C8T6 ADC资源:ADC1、ADC2、10个外部输入通道

ADC通道和引脚对应表:

转换模式:四种转换模式

触发源:

需要一个触发条件;

数据对齐:

ADC是12位,转换结果是12位的,但是寄存器是16位的,所以就需要对齐方式;一般使用第一种对齐方式

转换时间:

ADC转换步骤:采样、保持、量化、编码

STM32 ADC的总转换时间位:

Tconv = 采样时间+12.5个ADC周期

例如:当ADCCLK = 14MHz,采样时间位1.5个ADC周期

Tconv= 15 + 12.5 = 14个ADC周期 = 1us

如果不需要特别快的转换时间,就可以忽略这个;

ADC基本结构:

HRTM030模块介绍:

HRTM030的温度和湿度都是模拟量;

**原理:**通过变换电路将湿敏电阻元件的阻抗值随相对湿度变化的曲线转变为线性电压输出

VCC--->5V

H --->PA1

T --->PA2

GND--->GND

二、工程代码

配置流程:

1.开启时钟(RCC/GPIO/ADC);

2.配置GPIO(模拟输入);

3.配置多路开关;

4.配置ADC转换器;

5.配置看门狗(看需要);

6.配置中断(看需要);

7.使能ADC(ADC_CMD());

hrtm.c

cs 复制代码
#include "stm32f10x.h"  // Device header
#include "delay.h"
#include "hrtm.h"


int Rec_Data[2] = {0};


void HRTM_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
		ADC_InitTypeDef ADC_InitStructure; 
	
		RCC_ADCCLKConfig(RCC_PCLK2_Div6);
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AIN; 
    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_1 | GPIO_Pin_2 ;      
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
    
    GPIO_Init(GPIOA, &GPIO_InitStructure);
		
	 
	
		ADC_DeInit(ADC1);  																												//复位ADC1,将外设 ADC1 的全部寄存器重设为缺省值
 
		ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;												//ADC工作模式:ADC1和ADC2工作在独立模式
		ADC_InitStructure.ADC_ScanConvMode = DISABLE;															//模数转换工作在单通道模式
		ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;												//模数转换工作在单次转换模式
		ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;				//转换由软件而不是外部触发启动
		ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;										//ADC数据右对齐
		ADC_InitStructure.ADC_NbrOfChannel = 3;																		//顺序进行规则转换的ADC通道的数目(仅在扫描模式下有用)
		ADC_Init(ADC1, &ADC_InitStructure);																				//根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器   
 
  
		ADC_Cmd(ADC1, ENABLE);																										//使能指定的ADC1
	
		ADC_ResetCalibration(ADC1);																								//使能复位校准  
	 
		while(ADC_GetResetCalibrationStatus(ADC1));																//等待复位校准结束
	
		ADC_StartCalibration(ADC1);	 																							//开启AD校准
 
		while(ADC_GetCalibrationStatus(ADC1));	 																	//等待校准结束
 
	//	ADC_SoftwareStartConvCmd(ADC1, ENABLE);																		//使能指定的ADC1的软件转换启动功能

}



u16 Get_Adc(u8 ch)
{
	ADC_SoftwareStartConvCmd(ADC1,ENABLE);
    ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);
	while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) == RESET);//第二个参数 规则组转换完成标志位
	return ADC_GetConversionValue(ADC1);
}


s16 Get_Adc_Average(u8 ch,u8 times)
{
	s32 temp_val=0;
	s8 t;
	
	for(t=0;t<times;t++)
	{
		temp_val+=Get_Adc(ch);
		delay_ms(6);
	}
	return temp_val/times;
}

void HT_Data(void)
{
		 // 读取湿度传感器的 ADC 值 (PA1)
    Rec_Data[0] = Get_Adc_Average(ADC_Channel_1,10);
		Rec_Data[0] = (Rec_Data[0] / 4095.0) * 3.3; 
		

    // 读取温度传感器的 ADC 值 (PA2)
    Rec_Data[1] = Get_Adc_Average(ADC_Channel_2,10);
		Rec_Data[1] = (Rec_Data[1] / 4095.0) * 3.3; 

}

hrtm.h

cs 复制代码
#ifndef __HRTM_H
#define __HRTM_H

#include "stm32f10x.h"                  // Device header
#include "sys.h"


extern int Rec_Data[2];


void HRTM_Init(void);
u16 Get_Adc(u8 ch);

s16 Get_Adc_Average(u8 ch,u8 times);
void HT_Data(void);

#endif
相关推荐
学工科的皮皮志^_^2 小时前
电压源和电流源学习理解
单片机·嵌入式硬件·学习
linweidong4 小时前
跨平台驱动开发:打造兼容多款MCU的硬核方案
驱动开发·单片机·嵌入式硬件·bsp·rtos·spi驱动·hal设计
易享电子4 小时前
基于单片机大棚浇水灌溉控制系统Proteus仿真(含全部资料)
单片机·嵌入式硬件·fpga开发·51单片机·proteus
wh_xia_jun5 小时前
Python串口通信与MQTT物联网网关:连接STM32与物联网平台
python·stm32·物联网
星辰pid7 小时前
STM32基于can总线通信控制多个舵机/电机原理及代码
stm32·单片机·嵌入式硬件
武文斌777 小时前
项目学习总结:CAN总线、摄像头、STM32概述
linux·arm开发·stm32·单片机·嵌入式硬件·学习·c#
淘晶驰AK8 小时前
主流的 MCU 开发语言为什么是 C 而不是 C++?
c语言·开发语言·单片机
云山工作室15 小时前
2025年单片机毕业设计选题物联网计算机电气电子通信类
单片机·物联网·课程设计
Ching·17 小时前
STM32L4xx编译提示Keil MDK Warning: L6989W警告问题及其解决办法
stm32·单片机·嵌入式硬件
小莞尔17 小时前
【51单片机】【protues仿真】基于51单片机温度测量系统
c语言·单片机·嵌入式硬件·物联网·51单片机