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);
}
相关推荐
就是蠢啊10 分钟前
51单片机——DS1302 时钟芯片(一)
单片机·嵌入式硬件·51单片机
淘晶驰AK21 分钟前
电机控制是不是就绑死在单片机上了
单片机·嵌入式硬件
bubiyoushang88810 小时前
基于STM32F103与A3988驱动芯片的两相四线步进电机控制方案
stm32·单片机·嵌入式硬件
bai54593614 小时前
STM32 备份寄存器
stm32·单片机·嵌入式硬件
cold_Mirac14 小时前
stm32-freertos和逻辑编程下堆栈功能的区分
stm32·单片机·嵌入式硬件
youcans_14 小时前
【动手学STM32G4】(3)上位机实时显示多路波形
stm32·单片机·嵌入式硬件·上位机
铁手飞鹰15 小时前
[HAL库分析—GPIO]
c语言·stm32·单片机·嵌入式硬件
徐某人..15 小时前
网络编程学习--第一天
arm开发·单片机·学习·arm
yrx02030716 小时前
STM32F103通过L298N驱动两相4线步进电机【42步进电机】
stm32·单片机·嵌入式硬件·步进电机
安当加密16 小时前
基于 SLA 的操作系统双因素安全登录:USB Key 与 OTP 动态口令实践
单片机·嵌入式硬件·安全