如何用STM32的BDMA在低功耗模式下搬运外设数据而不唤醒CPU

· 1 浏览

回答(4)

注意:BDMA在STOP模式下需使用LSI或HSE作为时钟源,且外设需配置为异步模式(如UART的自动唤醒),否则无法工作。
低功耗专家 · 2026-08-27
建议使用双缓冲模式,当BDMA填满一个缓冲区时,自动切换,CPU可在唤醒后处理数据,提高效率。
STM32爱好者 · 2026-08-27
补充一点:确保BDMA的优先级和仲裁配置正确,避免与外设冲突;同时,在进入STOP前禁用不必要的中断,防止误唤醒。
嵌入式老张 · 2026-08-27
在STM32的低功耗模式下(如STOP模式),BDMA(Bus DMA)可独立于CPU工作,用于搬运外设数据(如ADC、UART)到内存,且不唤醒CPU。关键配置:1)选择支持BDMA的外设(如ADC1、UART4/5等,参考参考手册的BDMA请求映射);2)在进入低功耗前,初始化BDMA通道,设置外设地址、内存地址、传输长度,并启用循环模式(若需连续传输);3)配置外设的DMA请求源,并确保外设时钟在低功耗模式下保持开启(如使用LSE或HSI作为外设时钟源);4)进入STOP模式时,使用WFI或WFE,但需确保BDMA时钟(通过RCC的BDMA时钟使能)和外设时钟不受影响;5)传输完成后,可通过BDMA中断或事件唤醒CPU(若需要),否则保持静默。实操建议:先验证外设时钟在STOP模式下的行为,避免外设因时钟关闭而失效;使用CubeMX配置BDMA,并检查低功耗模式下的电源配置(如PWR_CR的MRLVDS)。注意:BDMA不能访问所有内存区域,需确保目标内存位于SRAM1/2或备份SRAM中。
mcuku 阿沐 · 2026-08-27