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);
}
相关推荐
逐步前行2 小时前
STM32_TIM_寄存器操作
stm32·单片机·嵌入式硬件
0南城逆流03 小时前
【STM32】知识点介绍七:PWM功能
stm32·单片机·嵌入式硬件
智者知已应修善业3 小时前
【51单片机独立按键控制数码管移动反向,2片74CH573/74CH273段和位,按键按下保持原状态】2023-3-25
经验分享·笔记·单片机·嵌入式硬件·算法·51单片机
我是一棵无人问荆的小草4 小时前
单片机通电后延迟启动策略
单片机·嵌入式硬件
日更嵌入式的打工仔4 小时前
UART RX为什么要上拉
单片机
三佛科技-187366133977 小时前
FT32F030F6AP7高性能32位RISC内核MCU解析(兼容STM32F030K6TP7)
stm32·单片机·嵌入式硬件
LCMICRO-133108477468 小时前
长芯微LDC90810完全P2P替代ADC128D818,是一款八通道系统监控器,专为监控复杂系统状态而设计。
stm32·单片机·嵌入式硬件·fpga开发·硬件工程·模数转换芯片adc
嵌入式老菜鸟qq1252427738 小时前
关于S2-LP休眠
单片机·嵌入式硬件·mcu·射频工程
SUNNYSPY0018 小时前
65R310-ASEMI超结MOS管TO-252封装
单片机
weixin_462901979 小时前
ESP32 LED控制器
单片机·嵌入式硬件