STM32F103C8T6--DMA

DMA(Direct Memory Access,直接存储器访问)是一种无需 CPU 干预,直接在外设存储器之间、或存储器与存储器之间进行数据传输的技术。

核心优势:减少 CPU 在数据搬运上的开销,让 CPU 专注于逻辑处理,提升系统整体效率。

类型

起始地址

存储器

用途

ROM

0x0800 0000

程序存储器Flash

存储C语言编译后的程序代码

0x1FFF F000

系统存储器

存储BootLoader,用于串口下载

0x1FFF F800

选项字节

存储一些独立于程序代码的配置参数

RAM

0x2000 0000

运行内存SRAM

存储运行过程中的临时变量

0x4000 0000

外设寄存器

存储各个外设的配置参数

0xE000 0000

内核外设寄存器

存储内核各个外设的配置参数

void myDMA_Init(uint32_t p1,uint32_t p2,uint16_t size){

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);

DMA在AHB总线上。

DMA_InitTypeDef DMA_InitStructure;

DMA_InitStructure.DMA_PeripheralBaseAddr = p1;外设起始地址

DMA_InitStructure.DMA_PeripheralDataSize DMA_PeripheralDataSize_Word;

数据宽度:

DMA_PeripheralDataSize_Byte      8位

DMA_PeripheralDataSize_HalfWord 16位

DMA_PeripheralDataSize_Word     32位

DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable;地址是否自增

DMA_InitStructure.DMA_MemoryBaseAddr = p2;内存地址

DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;

DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;

DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;

传输方向:

DMA_DIR_PeripheralDST外设做目的地destination

DMA_DIR_PeripheralSRC外设做源source

DMA_InitStructure.DMA_BufferSize = size; 传输计数器,传输几次

DMA_InitStructure.DMA_M2M = DMA_M2M_Enable;软件触发是否开启

DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;是否自动重装载(连续转换模式)

DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;优先级选择

DMA_Init(DMA1_Channel1,&DMA_InitStructure);

}

外设要启动对应DMA

若软件触发

void DMA_Transfer(uint16_t num){

DMA_Cmd(DMA1_Channel1,DISABLE);

DMA_SetCurrDataCounter(DMA1_Channel1,num);

DMA_Cmd(DMA1_Channel1,ENABLE);使能则开始转换

while(!DMA_GetFlagStatus(DMA1_FLAG_TC1))

DMA_ClearFlag(DMA1_FLAG_TC1);

确保转换完成

}

posted @ 2025-10-26 20:59  mc12356  阅读(37)  评论(0)    收藏  举报  来源