Day36:DMA 配置与使用

DMA 配置步骤:

使能 DMA 时钟

配置 DMA 通道参数 (传输方向、源地址、目标地址、传输量)

使能外设的 DMA 请求

启动 DMA 传输

DMA+ADC 应用:(连续采集数据到内存)

// ADC+DMA初始化

void ADC1_DMA_Init(void){

// ADC配置(扫描模式+连续转换)

hadc1.Init.ScanConvMode = ENABLE;

hadc1.Init.ContinuousConvMode = ENABLE;

hadc1.Init.NbrOfConversion = 10; // 转换10个通道

// 配置DMA

DMA_HandleTypeDef hdma_adc;

hdma_adc.Instance = DMA1_Channel1;

hdma_adc.Init.Direction = DMA_PERIPH_TO_MEMORY; // 外设到内存

hdma_adc.Init.PeriphInc = DMA_PINC_DISABLE; // 外设地址不变

hdma_adc.Init.MemInc = DMA_MINC_ENABLE; // 内存地址递增

hdma_adc.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; // 外设数据字对齐

hdma_adc.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; // 内存数据字对齐

hdma_adc.Init.Mode = DMA_CIRCULAR; // 循环模式

hdma_adc.Init.Priority = DMA_PRIORITY_LOW;

HAL_DMA_Init(&hdma_adc);

// 关联DMA和ADC

__HAL_LINKDMA(&hadc1, DMA_Handle, hdma_adc);

HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, 10); // 启动DMA转换

}

DMA+UART 应用:(发送大数据)

// 发送大数组(1KB)

uint8_t buffer[1024];

void UART_DMA_Send(void){

HAL_UART_Transmit_DMA(&huart1, buffer, sizeof(buffer));

}

// 接收完成回调(使用DMA+中断)

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){

// 接收完成,处理数据

}

相关推荐
xuxg20051 小时前
4G 模组 AT 命令解析框架课程正式发布
stm32·嵌入式·at命令解析框架
CODECOLLECT3 小时前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen3 小时前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制
全栈游侠6 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
Lsir10110_6 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件
深圳市九鼎创展科技8 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计8 小时前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件
風清掦10 小时前
【江科大STM32学习笔记-05】EXTI外部中断11
笔记·stm32·学习
小龙报10 小时前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机
范纹杉想快点毕业10 小时前
嵌入式与单片机开发核心学习指南——从思维转变到第一性原理的深度实践
单片机·嵌入式硬件