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);
}
相关推荐
Dev_XH9 小时前
【成品设计】基于单片机的工厂设备能耗监控与优化系统
stm32·单片机·嵌入式硬件·物联网
路上有只喵1 天前
认识元器件 · 单片机(MCU/MPU/SOC) · 实战篇 11
单片机·嵌入式硬件
不昀1 天前
开关电源电流互感器怎么选:匝比、采样电阻与复位的计算笔记
单片机·嵌入式硬件·电子元器件
小李不想当小白1 天前
WDG看门狗(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
智者知已应修善业1 天前
【51单片机实现从下到上,从上到下,从中间到两边,两边到中间】2024-10-23
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
辰哥单片机设计1 天前
STM32智能药盒丨2027单片机新项目
stm32·单片机·嵌入式硬件
LCG米2 天前
STM32硬件CRC外设实测:多项式固定陷阱、CRC-32校验不匹配根因与软件查表法耗时对比落地
stm32·单片机·嵌入式硬件
La Pulga2 天前
【FreeRTOS源码学习笔记】任务切换
单片机·mcu·学习·嵌入式·freertos·实时操作系统
女神下凡2 天前
芯参谋(85):Linux_PPI_NAND_驱动开发指南
linux·运维·arm开发·驱动开发·单片机·嵌入式硬件·设计规范