目录
概述
1 软硬件介绍
1.1 软件版本
1.2 ADC引脚介绍
2 STM32Cube配置项目
2.1 配置基本参数
2.2 ADC通道配置
2.3 DMA通道配置
3 项目代码介绍
3.1 自生成代码
3.2 ADC-DMA初始化
3.3 测试函数
3.4 ADC1、ADC2、ADC3轮询采集数据存贮格式
4 测试
源代码下载地址:
NUCLEO-F446RE:STM32F446RE实现多通道ADC转换功能实现(DMA)资源-CSDN文库
概述
本文主要介绍应用基于STM32F446RE实现多通道ADC转换功能实现。笔者同时使用ADC1、ADC2、ADC3,每个ADC模块采集两路模拟量,且同时使用DMA方式存贮数据。笔者详细介绍基于STM32Cube配置ADC参数,并生成项目代码的方法。完成项目配置后,生成代码,并实现初始化通道的功能,然后编译代码,下载到板卡中验证其功能。
1 软硬件介绍
1.1 软件版本
软硬件信息 | 版本信息 |
---|---|
STM32 MCU | STM32F446RE |
Keil | MDK ARM 5.38 |
调试工具:st-link | ST-LINK/V2-1 |
STM32Cube | V6.8.1 |
STM32CubeProgrammer | v2.16.0 |
1.2 ADC引脚介绍
1) NUCLEO-F446RE上的IO定义
2) Analog 端口定义
2 STM32Cube配置项目
2.1 配置基本参数
STM32Cube已经提供NUCLEO系列开发板对应的配置模版,笔者使用开发板型号为NUCLEO-F446RE,在Board信息栏,找到对应的选择型号后,点击该选项,软件会自动完成基本上
配置好的参数内容如下:
2.2 ADC通道配置
配置选项实现:
ADC1:CH0 PA0 IN0 - A0
CH1 PA1 IN1 - A1
ADC2:
CH2 PA4 IN4 - A2
CH3 PB0 IN8 - A3
ADC3:
CH10 PC0 IN10 - A4
CH11 PC1 IN11 - A5
STM32Cube上的配置信息如下:
2.3 DMA通道配置
1)ADC1 DMA配置
2)ADC2 DMA配置
3)ADC3 DMA配置
3)DMA配置
DMA数据宽度配置
3 项目代码介绍
3.1 自生成代码
在adc.c文件中生成3个初始化函数:
1) ADC1模块的初始化函数
void MX_ADC1_Init(void)
2) ADC2模块的初始化函数
void MX_ADC2_Init(void)
3) ADC3模块的初始化函数
void MX_ADC3_Init(void)
3.2 ADC-DMA初始化
代码26行: 定义DMA数据buff
代码第30行:启动ADC-3
代码第31行:启动ADC-2
代码第32行:启动ADC-1
#define TOTAL_DATA_LEN 6static uint32_t adc123DMAValue[TOTAL_DATA_LEN];void ADC_ConvInit(void)
{HAL_ADC_Start(&hadc3);HAL_ADC_Start(&hadc2);HAL_ADCEx_MultiModeStart_DMA(&hadc1,(uint32_t *)adc123DMAValue,TOTAL_DATA_LEN);}
3.3 测试函数
代码427~434行: 为每个通道填充数据
代码436行: 打印数据
源代码如下:
static uint16_t adc1DMAValue[6];
void HAL_ADC_Pintflog( void )
{adc1DMAValue[0] = (uint16_t)adc123DMAValue[0]; // PA0 IN0 - A0adc1DMAValue[1] = (uint16_t)(adc123DMAValue[1]>>16); // PA1 IN1 - A1 adc1DMAValue[2] = (uint16_t)(adc123DMAValue[0]>>16); // PA4 IN4 - A2adc1DMAValue[3] = (uint16_t)(adc123DMAValue[2]); // PB0 IN8 - A3adc1DMAValue[4] = (uint16_t)adc123DMAValue[1]; // PC1 N11 - A4adc1DMAValue[5] = (uint16_t)(adc123DMAValue[2]>>16); // PC0 N10 - A5 printf(" ch1: %d, ch2: %d, ch3: %d, ch4: %d, ch5: %d, ch6: %d \r\n", adc1DMAValue[0],adc1DMAValue[1],adc1DMAValue[2],adc1DMAValue[3],adc1DMAValue[4],adc1DMAValue[5]);
}
3.4 ADC1、ADC2、ADC3轮询采集数据存贮格式
当3路ADC一起采集数据时,存储数据的规律如下:
4 测试
1) 选择A5通道进行测试
当选中到最大位置式,A5通道数据如下:
2)选择A0通道测试
当选中到最小位置式,A0通道数据如下: