STM32H7的DMAMUX
什么是DMAMUX
DMAMUX 其实就是 DMA 控制器前一级的多路选择器,有了这个选择器就不用再像 F1,F4 系列那样每个通道(数据流)要固定选择指定的外设,有了多路选择器就可以任意选择,外设使用 DMA 方式时无需再选择指定的 DMA 通道(数据流),任意通道(数据流)都可以。
当前STM32H7有两路DMAMUX,分别是DMAMUX1和DMAMUX2,其中DMAMUX1负责DMA1和 DMA2,而 DMAMUX2 负责 BDMA。
这张图反过来就好看多了。
DMAMUX2有8个输出通道,链接BDMA的8个输入通道。
DMA架构框图
DMA requests from peripherals接口
对于 DMAMUX1 来说,这个接口支持 107 个 DMA 外设请求,供 DMA1 和 DMA2 的数据流使用:
#define DMA_REQUEST_ADC1 9U /*!< DMAMUX1 ADC1 request */
#define DMA_REQUEST_ADC2 10U /*!< DMAMUX1 ADC2 request */
#define DMA_REQUEST_TIM1_CH1 11U /*!< DMAMUX1 TIM1 CH1 request */
#define DMA_REQUEST_TIM1_CH2 12U /*!< DMAMUX1 TIM1 CH2 request */
#define DMA_REQUEST_TIM1_CH3 13U /*!< DMAMUX1 TIM1 CH3 request */
#define DMA_REQUEST_TIM1_CH4 14U /*!< DMAMUX1 TIM1 CH4 request */
#define DMA_REQUEST_TIM1_UP 15U /*!< DMAMUX1 TIM1 UP request */
#define DMA_REQUEST_TIM1_TRIG 16U /*!< DMAMUX1 TIM1 TRIG request */
#define DMA_REQUEST_TIM1_COM 17U /*!< DMAMUX1 TIM1 COM request */
中间部分省略未写
#define DMA_REQUEST_TIM16_CH1 109U /*!< DMAMUX1 TIM16 CH1 request */
#define DMA_REQUEST_TIM16_UP 110U /*!< DMAMUX1 TIM16 UP request */
#define DMA_REQUEST_TIM17_CH1 111U /*!< DMAMUX1 TIM17 CH1 request */
#define DMA_REQUEST_TIM17_UP 112U /*!< DMAMUX1 TIM17 UP request */
#define DMA_REQUEST_SAI3_A 113U /*!< DMAMUX1 SAI3 A request */
#define DMA_REQUEST_SAI3_B 114U /*!< DMAMUX1 SAI3 B request */