关于ADC的一些原理和实验我们已经有了2篇笔记,链接如下:
关于ADC的笔记1_Mr_rustylake的博客-优快云博客
STM32-ADC单通道采集实验_Mr_rustylake的博客-优快云博客
实验要求:通过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; //对于存储器需要存储多个数据,所以选择增量模式
g_dma_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWOR

该文详细介绍了如何使用STM32的ADC1通道1通过DMA进行电位器电压的采集。配置包括DMA初始化、ADC设置、转换时间和采样时间的选择。代码示例展示了从ADC转换到DMA传输的完整流程,以及如何处理转换结果并显示电压值。
最低0.47元/天 解锁文章
1966

被折叠的 条评论
为什么被折叠?



