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){

// 接收完成,处理数据

}

相关推荐
qq_3975623128 分钟前
QT工程 , 生成别的电脑运行的exe程序
嵌入式硬件·qt
qqssss121dfd2 小时前
STM32H750XBH6的ETH模块移植LWIP
网络·stm32·嵌入式硬件
想放学的刺客3 小时前
单片机嵌入式试题(第27期)设计可移植、可配置的外设驱动框架的关键要点
c语言·stm32·单片机·嵌入式硬件·物联网
天昊吖4 小时前
stc8H启用DMA发送后 卡住【踩坑日志】
单片机
李永奉4 小时前
杰理芯片SDK开发-ENC双麦降噪配置/调试教程
人工智能·单片机·嵌入式硬件·物联网·语音识别
BackCatK Chen4 小时前
第 1 篇:软件视角扫盲|TMC2240 软件核心特性 + 学习路径(附工具清单)
c语言·stm32·单片机·学习·电机驱动·保姆级教程·tmc2240
兆龙电子单片机设计4 小时前
【STM32项目开源】STM32单片机多功能电子秤
stm32·单片机·开源·毕业设计·智能家居
切糕师学AI4 小时前
ARM 架构中的复位(Reset)与复位流程
arm开发·单片机·嵌入式·复位
wotaifuzao5 小时前
STM32多协议网关-FreeRTOS事件驱动架构实战
stm32·嵌入式硬件·can·freertos·uart·modbus·spi
llilian_165 小时前
信号发生器 多通道多功能脉冲信号发生器应用解决方案 多功能脉冲发生器
功能测试·单片机·嵌入式硬件·测试工具