IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32复习笔记(七) —— DMA传输(MTM) -> 正文阅读

[嵌入式]STM32复习笔记(七) —— DMA传输(MTM)

STM32复习笔记(七) —— DMA传输(MTM)

1.DMA传输方向

1)存储器到外设
2)外设到存储器
3)存储器到存储器

2.DMA框图 (STM32F10xxx参考手册 图21 DMA框图)
SSS7.001
注:大容量产品和互联型产品
SSS7.002
3.不同外设可能对应不同通道 (STM32F10xxx参考手册 表59 各个通道的DMA1请求一览)
SSS7.003
对于存储器到存储器传输模式,需借用外设端口,当使用外设通道代表存储器时,通道可随意选择

4.本例程软件设计思路 (实现存储器到存储器传输)

1)于内存中开辟两个数组空间 mData_Buffer and pData_Buffer
2)向 mData_Buffer 中存入数据
3)使用 DMA 将 mData_Buffer 中数据移动到 pData_Buffer 中

5.代码编写

于 main.c 中编写代码

#include "stm32f10x.h"

//数据长度
#define  DATA_LENGTH  4

//存储器区
uint8_t mData_Buffer[DATA_LENGTH] = {0x01,0x00,0x00,0x05};

//外设区
uint8_t pData_Buffer[DATA_LENGTH] = {0x00,0x00,0x00,0x00};

int main(void)
{
	/* 存储器 到 存储器 模式,其中注释为外设处在本例程中仍代表存储器 */
	
	//开启 DMA1 时钟
	RCC->AHBENR |= (uint32_t)0x01 << 0;
	
	//清除 CCR 寄存器
	DMA1_Channel1->CCR &= (uint32_t)0xffff8000;
	//数据从存储器读
	DMA1_Channel1->CCR |= (uint32_t)0x01 << 4;
	//不执行循环操作
	DMA1_Channel1->CCR |= (uint32_t)0x00 << 5;
	//外设地址增量操作
	DMA1_Channel1->CCR |= (uint32_t)0x01 << 6;
	//存储器地址增量操作
	DMA1_Channel1->CCR |= (uint32_t)0x01 << 7;
	//外设数据宽度8位
	DMA1_Channel1->CCR |= (uint32_t)0x00 << 8;
	//存储器数据宽度8位
	DMA1_Channel1->CCR |= (uint32_t)0x00 << 10;
	//通道优先级中
	DMA1_Channel1->CCR |= (uint32_t)0x01 << 12;
	//启动存储器到存储器模式
	DMA1_Channel1->CCR |= (uint32_t)0x01 << 14;
	
	//数据传输数量
	DMA1_Channel1->CNDTR = (uint32_t)DATA_LENGTH;
	
	//外设地址
	DMA1_Channel1->CPAR  = (uint32_t)pData_Buffer;
	
	//存储器地址
	DMA1_Channel1->CMAR  = (uint32_t)mData_Buffer;
	
	//开启通道
	DMA1_Channel1->CCR |= (uint32_t)0x01 << 0;
	
	//等待传输完成
	while(DMA1->ISR & ((uint32_t)0x01 << 1));
	
	while(1);
}

6.编译及仿真

点击编译,如无错误可进入仿真界面
SSS7.004
SSS7.005
分别找到 mData_Buffer and pData_Buffer,右击添加至 Watch1 窗口
SSS7.006
可以看出,程序运行前 mData_Buffer and pData_Buffer 均为我们设定的初始内容
SSS7.007
也可查看 DMA 各个寄存器值在程序运行前后的状态 (Peripherals - System Viewer - DMA)
SSS7.008
点击运行
SSS7.009
不难看出,mData_Buffer 值已经传输到 pData_Buffer 中,与预想结果一致

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-06 12:23:33  更:2021-10-06 12:23:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:37:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码