ADC单通道采集实验

前言

本文以STM32F1系列为例,通过一个小实验简单介绍ADC单通道采集

实验目标:

使用ADC1采集通道1的电压值,通道1连接光敏电阻1


文章目录


一、实验视频

ADC单通道采集实验

二、实验概述

(1)流程框图

(2)硬件接线

光敏电阻的A0接STM32的PA1、vcc接3.3v,GND接STM32的GND

三、详细步骤

1. ADC初始化函数的编写

c 复制代码
void adc_init(void)
{
    adc_handle.Instance=ADC1;
    adc_handle.Init.DataAlign = ADC_DATAALIGN_RIGHT;
    adc_handle.Init.ScanConvMode = ADC_SCAN_DISABLE;
    adc_handle.Init.ContinuousConvMode = DISABLE;
    adc_handle.Init.DiscontinuousConvMode = DISABLE;
    adc_handle.Init.NbrOfConversion = 1;
    adc_handle.Init.NbrOfDiscConversion = 0;
    adc_handle.Init.ExternalTrigConv = ADC_SOFTWARE_START;
    HAL_ADC_Init(&adc_handle);
    
    HAL_ADCEx_Calibration_Start(&adc_handle);
}

2.adc对应MSP函数的编写

c 复制代码
void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
{
    //句柄
    RCC_PeriphCLKInitTypeDef adc_clk_init = {0};
    //使能时钟
    __HAL_RCC_GPIOA_CLK_ENABLE();
    __HAL_RCC_ADC1_CLK_ENABLE();
    
    gpio_handle.Mode = GPIO_MODE_ANALOG;
    gpio_handle.Pin = GPIO_PIN_1;
    HAL_GPIO_Init(GPIOA,&gpio_handle);
    
    
    //配置ADC具体的工作时钟
    adc_clk_init.PeriphClockSelection = RCC_PERIPHCLK_ADC;
    adc_clk_init.AdcClockSelection = RCC_ADCPCLK2_DIV6;  //72Mhz进行6分频之后,12Mhz是stm32ADC常用时钟频率
    HAL_RCCEx_PeriphCLKConfig(&adc_clk_init);
    
}

3.配置ADC采样通道

c 复制代码
//通道设置函数
void adc_channel(uint32_t channel,uint32_t rank ,uint32_t stime)
{
    ADC_ChannelConfTypeDef adc_channel_handle;
    adc_channel_handle.Channel = channel; // ADC_CHANNEL_1
    adc_channel_handle.Rank = rank;  // ADC_REGULAR_RANK_1
    adc_channel_handle.SamplingTime = stime;     //
    
    HAL_ADC_ConfigChannel(&adc_handle,&adc_channel_handle);
}

4.封装一个获取ADC值的函数

c 复制代码
//获取ADC转化值
uint16_t adc_value(void)
{
    //调用通道配置函数
    adc_channel(ADC_CHANNEL_1,ADC_REGULAR_RANK_1,ADC_SAMPLETIME_239CYCLES_5);
    
    //启动ADC转换器
    HAL_ADC_Start(&adc_handle);
    
    //使用阻塞的方式等待规则组转换完成
    HAL_ADC_PollForConversion(&adc_handle,10);
    
    //返回转化后的结果
    return (uint16_t)HAL_ADC_GetValue(&adc_handle);
}
相关推荐
AOI小白新手上路2 天前
江科协51单片机 17-2 红外遥控电机调速实验调试总结
单片机·嵌入式硬件·51单片机
oshan20122 天前
零基础STM32入门教程--10-PWM 呼吸灯
stm32·单片机·嵌入式硬件
jianqiang.xue2 天前
智能体整体架构设计:四大模块与目录组织
单片机·嵌入式硬件·物联网·架构·esp32
Messy create2 天前
【BMS-AFE-温度检测】
stm32·单片机·能源
东莞市永盛电气2 天前
三相208V变380V变压器,出海工业设备供电适配方案
python·单片机·嵌入式硬件
新晨单片机设计2 天前
S001A-基于STM32单片机超声波视力保护仪【Proteus仿真+Keil程序+原理图】
stm32·单片机·proteus
星河单片机2 天前
STM32驱动Y01-3IN1空气质量模块+OLED显示完整教程
stm32·单片机·嵌入式硬件·空气质量·甲醛检测·二氧化碳检测·tvoc检测
别催小唐敲代码2 天前
stm32_mpu6050_滤波教程
stm32·单片机·嵌入式硬件
CPETW2 天前
USB TO I2C_(Excel)_Scan ---- 1000KHz总线速率测试_A
c语言·开发语言·网络·科技·单片机
单片机仿真设计2 天前
【proteus仿真】基于 51 单片机距离传感器警报装置设计(仿真图+程序)
单片机·嵌入式硬件·51单片机·proteus·毕设