登录/注册

stm32f429 adc dma

更多

在STM32F429上配置ADC与DMA的步骤如下:


1. 硬件与资源确认


2. 初始化配置

2.1 启用时钟

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);   // 启用GPIOA时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);    // 启用ADC1时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);     // 启用DMA2时钟

2.2 配置GPIO

GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;                  // PA0(ADC1通道0)
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AN;               // 模拟输入
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;           // 无上拉/下拉
GPIO_Init(GPIOA, &GPIO_InitStruct);

3. 配置DMA

DMA_InitTypeDef DMA_InitStruct;
DMA_StructInit(&DMA_InitStruct);
DMA_InitStruct.DMA_Channel = DMA_Channel_0;             // DMA通道0(查手册确认)
DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR; // ADC数据寄存器地址
DMA_InitStruct.DMA_Memory0BaseAddr = (uint32_t)adc_buffer;   // 内存缓冲区地址
DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralToMemory;    // 外设→内存
DMA_InitStruct.DMA_BufferSize = BUFFER_SIZE;            // 缓冲区大小
DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable; // 外设地址固定
DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;    // 内存地址自增
DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; // 16位
DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
DMA_InitStruct.DMA_Mode = DMA_Mode_Circular;            // 循环模式
DMA_InitStruct.DMA_Priority = DMA_Priority_High;        // 高优先级
DMA_Init(DMA2_Stream0, &DMA_InitStruct);
DMA_Cmd(DMA2_Stream0, ENABLE);                          // 启动DMA

4. 配置ADC

ADC_InitTypeDef ADC_InitStruct;
ADC_CommonInitTypeDef ADC_CommonInitStruct;

// 通用配置(ADC时钟分频、模式)
ADC_CommonInitStruct.ADC_Mode = ADC_Mode_Independent;    // 独立模式
ADC_CommonInitStruct.ADC_Prescaler = ADC_Prescaler_Div4; // ADC时钟=84MHz/4=21MHz
ADC_CommonInit(ADC1, &ADC_CommonInitStruct);

// ADC参数
ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b;      // 12位分辨率
ADC_InitStruct.ADC_ScanConvMode = DISABLE;               // 单通道禁用扫描
ADC_InitStruct.ADC_ContinuousConvMode = ENABLE;          // 连续转换
ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; // 触发源(可选)
ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;      // 数据右对齐
ADC_InitStruct.ADC_NbrOfConversion = 1;                  // 1个转换通道
ADC_Init(ADC1, &ADC_InitStruct);

// 配置通道0的采样时间
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_84Cycles);

// 启用DMA请求
ADC_DMACmd(ADC1, ENABLE);

5. 校准并启动ADC

ADC_Cmd(ADC1, ENABLE);                   // 启用ADC
ADC_SoftwareStartConv(ADC1);             // 启动转换(若使用软件触发)

6. 数据处理(示例)

extern uint16_t adc_buffer[BUFFER_SIZE];

while (1) {
    if (DMA_GetFlagStatus(DMA2_Stream0, DMA_FLAG_TCIF0)) {  // 检查传输完成标志
        DMA_ClearFlag(DMA2_Stream0, DMA_FLAG_TCIF0);
        // 处理adc_buffer中的数据
    }
}

关键点

通过以上步骤,ADC将自动将转换结果通过DMA传输到指定内存,无需CPU干预。

stm32f429可以用dma驱动spiflash吗?

stm32f429可以用dma驱动spiflash吗,要怎么配置

2023-09-21 06:10:54

Zephyr笔记:在STM32F429上运行HelloWorld

前面文章的操作,虽然在Windows下能够成功的编译STM32F429的工程,但是却不能在野火挑战者V2开发板上运行,因为Zephyr代码中的STM32F429硬件和野火的外围硬件不一样(其实CPU

2023-04-06 11:42:33

STM32F429 HAL库ADC+DMA+TIM3外部触发配置过程是怎样的

STM32F429 HAL库ADC+DMA+TIM3外部触发配置过程是怎样的

2022-01-21 07:47:28

STM32F429参考手册中文版

STM32F429参考手册中文版

资料下载 ah此生不换 2022-01-26 13:48:08

STM32F429开发板用户手册】第8章 STM32F429的终极调试组件Event Recorder

【STM32F429开发板用户手册】第8章 STM32F429的终极调试组件Event Recorder

资料下载 佚名 2021-12-04 14:06:04

STM32F429开发板用户手册】第1章 初学STM32F429的准备工作

【STM32F429开发板用户手册】第1章 初学STM32F429的准备工作

资料下载 麻酱 2021-12-04 13:51:04

"【STM32F429开发板用户手册】第36章 STM32F429的FMC总线应用之DMA双缓冲驱动AD7606(8通道同步采样, 16bit, 正负

"【STM32F429开发板用户手册】第36章 STM32F429的FMC总线应用之DMA双缓冲驱动AD7606(8通道同步采样, 1

资料下载 佚名 2021-11-22 10:06:09

STM32F429开发板底板的电路原理图免费下载

本文档的主要内容详细介绍的是STM32F429开发板底板的电路原理图免费下载。

资料下载 佚名 2020-08-29 15:40:42

如何去正确使用STM32F429DMA串口呢

如何对STM32F429 DMA串口数据进行配置?如何去正确使用STM32F429的D

2021-12-06 07:04:51

如何使用STM32F429定时器去触发ADC采样呢

STM32怎么配置呢?如何使用STM32F429定时器去触发ADC采样呢?ADC

2021-10-25 07:07:37

stm32f429之多通道ADC介绍

stm32f429之多通道ADC通过DMA数据采集原来的程序使用时stm32f

2021-08-16 07:24:18

STM32F429DMA2D应用之刷色块

第46章 STM32F429的DMA2D应用之刷色块,位图和Alpha混合本章节为大家讲解DMA2D应用中经常用到的刷色块,刷位图,Alpha混

2021-08-10 06:51:32

stm32f429/f767核心板电路方案

stm32f429/767 核心板,邮票孔,SDRAM等长布线,兼容正点原子底板。 在正点原子阿波罗F4核心板基础上又添加邮票空引脚设计。走线优化。 Stm3

2020-12-07 10:56:33

STM32F429芯片带FIFO的DMA传输实现过程

STM32系列芯片都内置DMA外设,其中很多系列的DMA配备了FIFO。这里以STM3

2020-09-04 14:36:14

阿波罗STM32F429开发板资源说明

阿波罗STM32F429开发板资源说明

2019-10-17 09:54:00

7天热门专题 换一换
相关标签