本帖最后由 贪玩 于 2022-2-21 19:00 编辑
发现AT32F403A的DMA有一个弹性映射的功能,捣鼓了一天,发现还挺好用的
AT32F403A的DMA请求分成了固定映射和弹性映射,固定映射的存在,主要的目的是为了兼容STM32F103,弹性映射则提供了更为灵活的通道与数据流的选择
下图是AT32F403A的DMA 1的请求表,这种方式和我们之前熟悉的STM32F103的DMA 请求配置方式一样,每一个通道只能传输固定的几个外设,比如下图的DMA1通道1,那么只能传输ADC1、TMR2_CH3、TMR4_CH1,这种方式称之为固定映射
弹性映射,顾名思义,那就是DMA通道上可以传输的数据流是灵活可变的, 如下表所示,每个通道,都可以通过设置CHx_SRC来选择外设,例如将 通道1的CHx_SRC设置成12,那么就将通道1和SPI2_TX连接上了 雅特力提供了一个函数实现这个功能 雅特力提供了一个函数实现这个功能 void dma_flexible_config(dma_type* dma_x, uint8_t flex_channelx, dma_flexible_request_type flexible_request); dma_x:用于选择哪个DMA flex_channelx:用于选择DMA的哪个通道 flexible_request:用于选择哪个数据流
例如: dma_flexible_config(DMA1, FLEX_CHANNEL1, DMA_FLEXIBLE_SPI2_RX); 意思是选择DMA1 的通道1,数据流选择SPI2的RX
然后其他的配置过程就和STM32F103的一样了 |