推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

获得赏金
10.00元
采用DMA的数据转运——单次转运数据和多次转运数据 mulan keil 详细教程

更新时间:2024-07-31 19:43:05 大小:13M 上传用户:mulanhk查看TA发布的资源 标签:dma数据转运keil 下载积分:2分 评价赚积分 (如何评价?) 打赏 收藏 评论(0) 举报

资料介绍

项目内容:(详细教程)

包含DMA模式下对于数据进行单次搬运和多次搬运的两种方式,对数据进行有效存储。

1. 关于DMA模式在STM32CUBEMX软件中的详细配置

2. 在keil编译平台上对DMA模式(两种搬运模式)的详细代码编写

3. 运行后的最终效果图

ben

原理解释:


DMA介绍:

DMA(DirectMemoryAccess)直接存储器存取,它有权限访问内存SRAM、程序存储器、寄存器。它可以提供外设和存储器以及存储器和储存器之间的高速数据传输,无需CPU干预节省了CPU资源。

STM32有12个可配置的DMA通道,DMA1(7个通道)、DMA2(5个通道),每个通道都支持软件触发和特定的硬件触发。F103C8T6中只有DMA1所以这款芯片只有7个DMA通道。

二、 DMA简图

1.外设寄存器,Flash,SRAM是可以通过DMA互相访问的(除了一些只读只写寄存器不能读/写),可以通过指定DMA方向参数指定,数据从哪里读取存储到哪里

2.DMA转运数据必须设定数据源(数据来自哪里),和数据目标(数据存放到哪里),这两个部分,他们都包含有

  1. 起始地址:读取或存放的其实地址

  2. 数据宽度:制定将要读取/存放的数据长度,可选。


image.png

项目配置:

一、STM32CUMX的设置

1、打开DMA设置


 1.选择DMA1的通道1

 2.地址选择自增

 3.传输数据宽度为Byte


image.png


oled屏幕的设置和参数配置

image.png


选用PB8和PB9作为数据传输的端口

PB8为scl,是时钟线

PB9为sda,是数据线

两者都设置为开漏输出模式

GPIO端口为浮空模式

对PB8,PB9进行改名



代码编写:

image.png

首先要对OLED屏幕进行初始化,使用OLED_Init();在上电后对于OLED屏进行初始化。


一、单次搬运模式

显示转运前的的数据,用数组存储数据

image.png


再启用DMA存储,转运开启

image.png

等待转运完成以后,再显示转运后的数据

image.png

image.png

成功对数据进行单次搬运


二、多次搬运

在单次搬运的项目基础上,额外增加这样的函数

image.png


对DataA的数据进行加一

image.png

用DMA多次转运模式对DataA的数据进行存储转运到B

image.png


显示转运后的数据


三、最终效果演示图

image.png



部分文件列表

文件名大小
DMA_once/
DMA_once/.cproject
DMA_once/.mxproject9KB
DMA_once/.project1KB
DMA_once/Core/
DMA_once/Core/Inc/
DMA_once/Core/Inc/dma.h1KB
DMA_once/Core/Inc/gpio.h1KB
DMA_once/Core/Inc/main.h2KB
DMA_once/Core/Inc/OLED.h1KB
DMA_once/Core/Inc/OLED_FONT.h
...
  • 21ic小能手打赏了10.00

全部评论(0)

暂无评论

上传资源 上传优质资源有赏金

  • 打赏
  • 30日榜单

推荐下载