STM32-单通道ADC采集(DMA读取)实验

该文详细介绍了如何使用STM32的ADC1通道1通过DMA进行电位器电压的采集。配置包括DMA初始化、ADC设置、转换时间和采样时间的选择。代码示例展示了从ADC转换到DMA传输的完整流程,以及如何处理转换结果并显示电压值。
摘要由CSDN通过智能技术生成

关于ADC的一些原理和实验我们已经有了2篇笔记,链接如下:

关于ADC的笔记1_Mr_rustylake的博客-CSDN博客

STM32-ADC单通道采集实验_Mr_rustylake的博客-CSDN博客

实验要求:通过ADC1通道1(PA1)采集电位器的电压,并显示ADC转换的数字量和换算后的电压值。

我们通过下表可以知道DMA1通道1的外设对应的就是ADC1的读取。

首先确定我们的最小刻度,Vref = 3.3V,所以0V <= Vin <= 3.3V,所以最小刻度是3.3V / 4096(2^12)。

接下来确定转换时间。采样时间239.5个ADC时钟周期为例,可以得到转换时间为21us。

时间转换公式参考如下公式:Tcvtmin=(12.5+X)周期=(12.5 + X)/(12MHz)=21us。

 因为使用的是DMA读取,所以采取连续转换模式,因为使用的是单通道,所以不扫描。

接下来我们编写实验代码:

先编写函数代码adc.c:

#include "./BSP/ADC/adc.h"
 
ADC_HandleTypeDef g_adc_handle;
DMA_HandleTypeDef g_dma_handle;
uint8_t g_adc_dma_sta; //标志DMA的传输是否完成

void adc_dam_init(uint32_t mar){
 
    ADC_ChannelConfTypeDef adc_ch_conf;

    __HAL_RCC_DMA1_CLK_ENABLE();

    g_dma_handle.Instance = DMA1_Channel1;
    g_dma_handle.Init.Direction = DMA_PERIPH_TO_MEMORY;  //外设到内存
    g_dma_handle.Init.PeriphInc = DMA_PINC_DISABLE;  //因为选取的是DMA1的数据寄存器,选择不增量
    g_dma_handle.Init.MemInc = DMA_MINC_ENABLE;  //对于存储器需要存储多个数据ÿ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值