SuperAPI AI 工具集

dma-baremetal

编程与开发

查看项目

更新于 10-16 06:49

技能介绍

用途:配置 DMA 控制器,实现内存到外设、外设到内存的数据传输,包括通道/流设置、突发长度、循环模式、半传输中断,以及 Cortex-M7 上的缓存一致性处理。

适用场景:将 UART/SPI/ADC 的批量传输从 CPU 卸载;音频/流式双缓冲;排查 DMA 不触发或数据损坏问题。

工作流程:

  1. STM32 DMA2 流(外设→内存)示例: RCC->AHB1ENR |= RCC_AHB1ENR_DMA1EN; DMA1_Stream5->PAR = (uint32_t)&USART2->DR; DMA1_Stream5->M0AR = (uint32_t)rx_buf; DMA1_Stream5->NDTR = sizeof(rx_buf); DMA1_Stream5->CR = DMA_SxCR_MINC | DMA_SxCR_TCIE | DMA_SxCR_CHSEL_2 | DMA_SxCR_EN; USART2->CR3 |= USART_CR3_DMAR;

  2. 循环/双缓冲:DMA1_Stream5->CR |= DMA_SxCR_CIRC; 自动重载 NDTR;HTIF 对应前半,TCIF 对应后半,在中断中处理。

  3. Cortex-M7 缓存(H7):DMA 缓冲区放在非缓存区域,或清理/无效 D-Cache: SCB_CleanDCache_by_Addr((void*)tx_buf, len); SCB_InvalidateDCache_by_Addr((void*)rx_buf, len);

  4. 智能体用法示例:/dma-baremetal Configure UART RX DMA circular buffer on STM32F4

常见问题:DMA 不启动——流/通道不匹配,需查参考手册 DMA 请求映射表;接收数据损坏——M7 缓存一致性,接收完成后无效缓存;NDTR 卡住——外设 DMA 使能缺失,检查 USART_CR3 的 DMAR/DMAT;中断风暴——在 ISR 中清除标志,DMA_LISR/HIFCR。

相关技能:baremetal/uart-serial-baremetal(USART DMA 使能)、baremetal/adc-dac-baremetal(ADC DMA 模式)、low-level-programming/cpu-cache-opt(缓存行概念)。

限制:资料未提供具体支持的芯片型号范围、安装方式、收费信息及完整 API 列表,暂未提供。