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 小时前
基于单片机的窗帘、灯光、空调智能家居控制系统设计
单片机·嵌入式硬件·毕业设计·智能家居·课程设计·期末大作业
oshan201213 小时前
小华HC32L136K8TA 单片机新建 MDK5 工程模板(二)
单片机·嵌入式硬件
三品吉他手会点灯14 小时前
STM32F103学习笔记-16-RCC(第4节)-使用 HSI 配置系统时钟并用 MCO 监控系统时钟
笔记·stm32·单片机·嵌入式硬件·学习
Lester_110115 小时前
嵌入式学习笔记 - 关于看门狗定时器的喂狗的操作放在中断还是放在主循环
笔记·单片机·学习
bai54593615 小时前
LED闪烁功能代码详解
单片机·嵌入式硬件
吃货界的硬件攻城狮18 小时前
【STM32】低功耗模式下的IO配置详解(标准库实现)
stm32·单片机·嵌入式硬件
星辰pid19 小时前
stm32基于两个SI24R1(NRF24L01)的遥控控制原理(可移植diy遥控小车)
stm32·单片机·嵌入式硬件
清风66666621 小时前
基于单片机的智慧校园自动打铃系统设计
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
czhaii21 小时前
51的DSP来了, 100MHz, STC32G144K246
stm32·单片机·fpga开发