【stm32f103】DMA应用memory to memory(寄存器版)
来源:互联网 发布:税收征管数据质量方案 编辑:程序博客网 时间:2024/06/10 20:30
注释:此文档是利用DMA实现memory to memory的搬运
可能有的人会说直接用memcpy会更方便,确实是这样,但是此文章仅仅是DMA应用的例子,所以不采用memcpy的方法,并且此历程中不配置DMA中断
后续在系统讲解USART章节中再讲解DMA中断
一.DMA1所在总线
所以要先ENABLE DMA所在总线时钟
RCC->AHBENR = RCC_AHBENR_DMA2EN;
二.DMA寄存器
寄存器可以参考 参考手册,在这里不做详细讨论
三.编程步骤:
1.使能DMA时钟‘
2.配置DMA外设地址(如果是memroy to meory也需要把memory的地址设置成外设地址,但是需要额外配置DMA CCR寄存器的bit14 MEM2MEM 标志)
3.配置DMA内存地址
4.配置传输方向,配置内存地址是否增加,配置外设地址是否增加,配置优先级等等
5.配置传输的数量
6.使能DMA
7.等待传输完成,清楚完成标志位
四.程序讲解源代码
#include <stm32f10x.h>uint8_t source_buffer[20] = "I am source";uint8_t dest_buffer[20];int main(){RCC->AHBENR = RCC_AHBENR_DMA2EN;/* 存储器地址 */DMA2_Channel4->CMAR = (uint32_t)source_buffer;/* 外设地址 */DMA2_Channel4->CPAR = (uint32_t)dest_buffer;/* 配置优先级 传输方向 内存2内存 外设地址增加 内存地址增加 */DMA2_Channel4->CCR = DMA_CCR4_PL | DMA_CCR4_DIR | DMA_CCR4_MEM2MEM | DMA_CCR4_PINC | DMA_CCR4_MINC;/* 传输的数据量 */DMA2_Channel4->CNDTR = sizeof(source_buffer);/* 使能DMA */DMA2_Channel4->CCR |= DMA_CCR2_EN;while ((DMA2->ISR & DMA_ISR_TCIF4) == 0);DMA2->IFCR = DMA_IFCR_CTCIF4;DMA2_Channel4->CCR &= ~DMA_CCR4_EN;}
程序运行效果
阅读全文
1 0
- 【stm32f103】DMA应用memory to memory(寄存器版)
- zedboard平台下DMA实现memory to memory传输
- 【stm32f103】GPIO原理以及LED的应用(寄存器版)
- [memory] Android DMA
- Direct memory access(DMA)
- [Tutorial] DMA Dynamic Memory Allocation
- 【stm32f103】SysTick实现延时(寄存器版)
- 【stm32f103】USART RX实现(寄存器版)
- 【stm32f103】stm32 外部中断(寄存器版)
- 【stm32f103】stm32 外部中断(寄存器版)
- DMA(Direct Memory Access)直接存储器存取
- DMA(Direct Memory Access直接存储器访问)总结
- DMA(direct memory access)直接内存访问
- Memory
- Memory
- memory
- memory
- Memory
- ios重签名教程
- 《西瓜书》笔记04:决策树
- python爬虫-Requests库
- Map集合HashMap,TreeMap
- Spring源码之AOP
- 【stm32f103】DMA应用memory to memory(寄存器版)
- Codeforces Round #429 (Div. 2) ABC
- JAVA随机数之多种方法从给定范围内随机N个不重复数
- JAVA 学习笔记
- 《Python机器学习》笔记--感知机分类鸢尾花数据集
- Mybatis 最近知识总结(1)
- JVM—垃圾回收机制
- 计算任意多边形的面积
- 图像处理复习(三):特征点的搜索匹配和筛选