DMA简介
- DMA(Direct Memory Access)直接存储器存取
- DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输,无须CPU干预,节省了CPU的资源
- 12个独立可配置的通道: DMA1(7个通道), DMA2(5个通道)
- 每个通道都支持软件触发和特定的硬件触发
- STM32F103C8T6 DMA资源:DMA1(7个通道)



DMA数据传输宽度与大小

DMA数据传输: 源端大于目标,高位舍弃。 源端小于目标,高位补零。
代码
|
|
DMA_InitTypeDef为DMA配置结构体
- 外设配置:
DMA_PeripheralBaseAddr为外设基地址,转运来源DMA_PeripheralDataSize为外设数据宽度DMA_PeripheralInc为外设地址自增:DMA_PeripheralInc_Enable开启DMA_PeripheralInc_Disable关闭- 存储器配置:
DMA_MemoryBaseAddr为存储器基地址,转运目标DMA_MemoryDataSize为存储器数据宽度DMA_MemoryInc为存储器地址自增:DMA_MemoryInc_Enable开启DMA_MemoryInc_Disable关闭DMA_DIR为数据传输方向:DMA_DIR_PeripheralDST存储器到外设DMA_DIR_PeripheralSRC外设到存储器DMA_BufferSize为转运的数据大小(转运次数)DMA_Mode为模式,主要配置自动重装DMA_Mode_Circular循环模式DMA_Mode_Normal单次模式DMA_M2M软硬件触发选择DMA_M2M_Enable开启DMA_M2M_Disable关闭DMA_Priority优先级
| DMA_PeripheralDataSize | 值 | 描述 |
|---|---|---|
| DMA_PeripheralDataSize_Byte | ((uint32_t)0x00000000) | 1Byte |
| DMA_PeripheralDataSize_HalfWord | ((uint32_t)0x00000100) | 2Byte |
| DMA_PeripheralDataSize_Word | ((uint32_t)0x00000200) | 4Byte |
| DMA_MemoryDataSize | 值 | 描述 |
|---|---|---|
| DMA_MemoryDataSize_Byte | ((uint32_t)0x00000000) | 1Byte |
| DMA_MemoryDataSize_HalfWord | ((uint32_t)0x00000400) | 2Byte |
| DMA_MemoryDataSize_Word | ((uint32_t)0x00000800) | 4Byte |
| DMA_Priority | 值 | 描述 | |
|---|---|---|---|
| DMA_Priority_VeryHigh | ((uint32_t)0x00003000) | 非常高 | |
| DMA_Priority_High | ((uint32_t)0x00002000) | 高 | |
| DMA_Priority_Medium | ((uint32_t)0x00001000) | 中 | |
| DMA_Priority_Low | ((uint32_t)0x00000000) | 低 |
DMA + ADC 协同工作

DMA请求

更多DMA请求映像的相关内容:STM32F10xxx参考手册(中文).pdf 页码147/手册10.3.7
代码
|
|
DMA_Cmd(DMA1_Channel1, ENABLE);启用DMA通道1ADC_DMACmd(ADC1, ENABLE);启用ADC1触发DMA1信号ADC_Cmd(ADC1, ENABLE);启用ADC1