文章目录前言1. DMA介绍1.1 什么是DMA1.2 DMA的意义1.3 搬运什么数据2. DMA框图3. DMA控制器4. DMA优先级管理5. DMA传输方式6. 指针递增模式7. DMA数据对齐方式8. DMA寄存器及库函数介绍8.1 DMA寄存器8.2 DMA库函数总结前言CPU也可以搬运数据但是DMA可以搬运数据让CPU节约的时间可以处理更重要的事情。1. DMA介绍1.1 什么是DMA外设DR寄存器DMA详述DMADirect Memory Access直接存储器访问提供在外设与内存、存储器和存储器之间的高速数据传输使用。它允许不同速度的硬件装置来沟通而不需要依赖于CPU在这个时间中CPU对于内存的工作来说就无法使用。DMA简述就是一个数据搬运工1.2 DMA的意义代替CPU搬运数据为CPU减负。数据搬运的工作比较耗时间数据搬运工作时效要求高有数据来就要搬走没啥技术含量CPU节约出来的时间可以处理更重要的事。1.3 搬运什么数据存储器、外设这里的外设指的是spi、usart、iic、adc 等基于APB1、APB2或AHB时钟的外设而这里的存储器包括自身的闪存(flash)或者内存(SRAM)以及外设的存储设备都可以作为访问地源或者目的。三种搬运方式存储器→存储器例如复制某特别大的数据buf存储器→外设例如将某数据buf写入串口TDR寄存器外设→存储器例如将串口RDR寄存器写入某数据buf存储器→存储器复制某特别大的数据buf存储器→外设将某数据buf写入串口TDR寄存器外设→存储器将串口RDR寄存器写入某数据buf2. DMA框图3. DMA控制器STM32F103有2个DMA控制器DMA1有7个通道DMA2有5个通道。**一个通道每次只能搬运一个外设的数据**如果同时有多个外设的DMA请求则按照优先级进行响应。STM32F103C8T6只有DMA1使用前一定要查看参考手册DMA1有7个通道DMA2有5个通道4. DMA优先级管理优先级管理采用软件硬件软件每个通道的优先级可以在DMA_CCRx寄存器中设置有4个等级最高级高级中级低级硬件如果2个请求它们的软件优先级相同则较低编号的通道比较高编号的通道有较高的优先权。比如如果软件优先级相同通道2优先于通道45. DMA传输方式DMA_Mode_Normal(正常模式)一次DMA数据传输完后停止DMA传送也就是只传输一次DMA_Mode_Circular(循环传输模式)当传输结束时硬件自动会将传输数据量寄存器进行重装进行下一轮的数据传输。也就是多次传输模式。6. 指针递增模式外设和存储器指针在每次传输后可以自动向后递增或保持常量。当设置为增量模式时下一个要传输的地址将是前一个地址加上增量值。7. DMA数据对齐方式源左边搬到目标右边8. DMA寄存器及库函数介绍8.1 DMA寄存器重点寄存器除了TEIE和HTIE位不用看其它都要看。一个是源一个是目标地址直接填写即可。8.2 DMA库函数// 开启时钟__HAL_RCC_DMA1_CLK_ENABLE()// 初始化HAL_DMA_Init()HAL_DMA_Start()// 内存→外设连接搬运数据__HAL_LINKDMA()// 串口发送与接收__HAL_UART_Transmit_DMA()__HAL_UART_Receive_DMA()// 获取DMA状态__HAL_DMA_GET_FLAG()// 使能DMA__HAL_DMA_ENABLE()// 失能DMA__HAL_DMA_DISABLE()总结DMA就是一个数据搬运工让CPU节约时间去处理更重要的事情。它主要搬运存储器与外设之间的数据其STM32F103C8T6 只有 DMA1 一个通道每次只能搬运一个外设的数据。注意使用DMA时一定要先查看参考手册知道哪个通道支持哪些外设再使用。了解参考手册中DMA一些寄存器以及代码中DMA库函数大概有个了解。
STM32学习笔记【23.DMA】
发布时间:2026/6/28 6:54:25
文章目录前言1. DMA介绍1.1 什么是DMA1.2 DMA的意义1.3 搬运什么数据2. DMA框图3. DMA控制器4. DMA优先级管理5. DMA传输方式6. 指针递增模式7. DMA数据对齐方式8. DMA寄存器及库函数介绍8.1 DMA寄存器8.2 DMA库函数总结前言CPU也可以搬运数据但是DMA可以搬运数据让CPU节约的时间可以处理更重要的事情。1. DMA介绍1.1 什么是DMA外设DR寄存器DMA详述DMADirect Memory Access直接存储器访问提供在外设与内存、存储器和存储器之间的高速数据传输使用。它允许不同速度的硬件装置来沟通而不需要依赖于CPU在这个时间中CPU对于内存的工作来说就无法使用。DMA简述就是一个数据搬运工1.2 DMA的意义代替CPU搬运数据为CPU减负。数据搬运的工作比较耗时间数据搬运工作时效要求高有数据来就要搬走没啥技术含量CPU节约出来的时间可以处理更重要的事。1.3 搬运什么数据存储器、外设这里的外设指的是spi、usart、iic、adc 等基于APB1、APB2或AHB时钟的外设而这里的存储器包括自身的闪存(flash)或者内存(SRAM)以及外设的存储设备都可以作为访问地源或者目的。三种搬运方式存储器→存储器例如复制某特别大的数据buf存储器→外设例如将某数据buf写入串口TDR寄存器外设→存储器例如将串口RDR寄存器写入某数据buf存储器→存储器复制某特别大的数据buf存储器→外设将某数据buf写入串口TDR寄存器外设→存储器将串口RDR寄存器写入某数据buf2. DMA框图3. DMA控制器STM32F103有2个DMA控制器DMA1有7个通道DMA2有5个通道。**一个通道每次只能搬运一个外设的数据**如果同时有多个外设的DMA请求则按照优先级进行响应。STM32F103C8T6只有DMA1使用前一定要查看参考手册DMA1有7个通道DMA2有5个通道4. DMA优先级管理优先级管理采用软件硬件软件每个通道的优先级可以在DMA_CCRx寄存器中设置有4个等级最高级高级中级低级硬件如果2个请求它们的软件优先级相同则较低编号的通道比较高编号的通道有较高的优先权。比如如果软件优先级相同通道2优先于通道45. DMA传输方式DMA_Mode_Normal(正常模式)一次DMA数据传输完后停止DMA传送也就是只传输一次DMA_Mode_Circular(循环传输模式)当传输结束时硬件自动会将传输数据量寄存器进行重装进行下一轮的数据传输。也就是多次传输模式。6. 指针递增模式外设和存储器指针在每次传输后可以自动向后递增或保持常量。当设置为增量模式时下一个要传输的地址将是前一个地址加上增量值。7. DMA数据对齐方式源左边搬到目标右边8. DMA寄存器及库函数介绍8.1 DMA寄存器重点寄存器除了TEIE和HTIE位不用看其它都要看。一个是源一个是目标地址直接填写即可。8.2 DMA库函数// 开启时钟__HAL_RCC_DMA1_CLK_ENABLE()// 初始化HAL_DMA_Init()HAL_DMA_Start()// 内存→外设连接搬运数据__HAL_LINKDMA()// 串口发送与接收__HAL_UART_Transmit_DMA()__HAL_UART_Receive_DMA()// 获取DMA状态__HAL_DMA_GET_FLAG()// 使能DMA__HAL_DMA_ENABLE()// 失能DMA__HAL_DMA_DISABLE()总结DMA就是一个数据搬运工让CPU节约时间去处理更重要的事情。它主要搬运存储器与外设之间的数据其STM32F103C8T6 只有 DMA1 一个通道每次只能搬运一个外设的数据。注意使用DMA时一定要先查看参考手册知道哪个通道支持哪些外设再使用。了解参考手册中DMA一些寄存器以及代码中DMA库函数大概有个了解。