STM32——ADC知识总结及多通道采样实验

1.ADC概念

ADC,全称:Analog-to-Digital Converter,指模拟/数字转换器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2 STM32各系列ADC的主要特性

在这里插入图片描述

3.F4框图

在这里插入图片描述

4.转换序列与转换时间

A/D转换被组织为两组:规则组(常规转换组)和注入组(注入转换组)
规则组最多可以有16个转换,注入组最多有4个转换

4.1规则组和注入组执行优先级对比

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2转换时间

在这里插入图片描述
在这里插入图片描述

5.触发源blog.csdnimg.cn/direct/f7ca0dd32f5443aab9798321c743be8e.png)

6.中断

在这里插入图片描述

7.单次转换模式和连续转换模式与扫描模式

单次转换模式和连续转换模式与
扫描模式
在这里插入图片描述
在这里插入图片描述

8 结构体

typedef struct
{
ADC_TypeDef Instance; / ADC 寄存器基地址 /
ADC_InitTypeDef Init; /
ADC 参数初始化结构体变量 */
DMA_HandleTypeDef DMA_Handle; / DMA 配置结构体 */
……
} ADC_HandleTypeDef;

typedef struct
{
uint32_t DataAlign; /* 设置数据的对齐方式 /
uint32_t ScanConvMode; /
扫描模式 /
FunctionalState ContinuousConvMode; /
开启单次转换模式或者连续转换模式 / uint32_t NbrOfConversion; / 设置转换通道数目 /
FunctionalState DiscontinuousConvMode; /
是否使用规则通道组间断模式 /
uint32_t NbrOfDiscConversion; /
配置间断模式的规则通道个数 /
uint32_t ExternalTrigConv; /
ADC 外部触发源选择 */
} ADC_InitTypeDef;

typedef struct
{
uint32_t Channel; /* ADC 转换通道*/
uint32_t Rank; /* ADC 转换顺序 /
uint32_t SamplingTime; /
ADC 采样周期 */
} ADC_ChannelConfTypeDef;

9. 多通道采集实验配置步骤在这里插入图片描述

在这里插入图片描述

10 实战

10.1 adc.h

#ifndef __ADC_H
#define __ADC_H

#include "./SYSTEM/sys/sys.h"

//1.开启 ADCx 和通道输出的 GPIO 时钟,配置该 IO 口的复用功能输出
//1.1 ADC及引脚定义  ADC复用PA5口
#define ADC_ADCX_CHY_GPIO_PORT          GPIOA
#define ADC_ADCX_CHY_GPIO_PIN           GPIO_PIN_5               
#define ADC_ADCX_CHY_GPIO_CLK_ENABLE()  do{
      __HAL_RCC_GPIOA_CLK_ENABLE(); }while(0)      //PA口时钟使能

#define ADC_ADCX                        ADC1
#define ADC_ADCX_CHY                    ADC_CHANNEL_5                                      //通道Y,  0 <= Y <= 17
#define ADC_ADCX_ADCX_GPIO_CLK_ENABLE()      do{
      __HAL_RCC_ADC1_CLK_ENABLE(); }while(0)    // PA口时钟使能

#define ADC_CH_NUM              6                                                          //转换的通道数目 

///* ADC DMA采集 DMA数据流相关 定义
// * 注意: 这里我们的通道还是使用上面的定义.
#define ADC_ADCX_DMASx             DMA2_Stream4
#define ADC_ADCX_DMASx_Chanel      DMA_CHANNEL_0                                          //ADC1_DMA请求源
#define ADC_ADCX_DMASx_IRQn        DMA2_Stream4_IRQn                                      //DMA2_Stream4_IRQn
#define ADC_ADCX_DMASx_IRQHandler  DMA2_Stream4_IRQHandler                                

#define ADC_ADCX_DMASx_IS_TC()     ( DMA2->HISR & (1 << 5) )                             //判断 DMA2_Stream4 传输完成标志, 这是一个假函数形式, * 不能当函数使用, 只能用在if等语句里面
#define ADC_ADCX_DMASx_CLR_TC()     do{
      DMA2->HIFCR |= 1 << 5; }while(0)                 //清除 DMA2_Stream4 传输完成标志

void adc_channel_set(ADC_HandleTypeDef *adc_handle, uint32_t ch, uint32_t rank, uint32_t stime);    /* ADC通道设置 */

void adc_dma_enable( uint16_t ndtr);        /* 使能一次ADC DMA采集传输 */

void adc_nch_dma_init(uint32_t tmr);        /* ADC多通道 DMA采集初始化 */
void adc_nch_dma_gpio_init(void);           /* ADC多通道 GPIO初始化 */
void adc_nch_dma_enable(uint16_t ndtr);     /* 使能一次ADC DMA多通道采集传输 */

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_libinc++

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值