当前位置: 首页 > news >正文

使用CUBE_MX实现STM32 DMA 功能(存储器到存储器)

目录

一、使用DMA实现从存储器1发送数据到存储器2中

1.CUBE_MX配置

2.KEIL5配置


一、使用DMA实现从存储器1发送数据到存储器2中

1.CUBE_MX配置

1.在DMA选项中添加MEMORY TO MEMORY

        选择数据宽度,并确保地址递增功能打开。

2.系统时钟72MHz

3.生成代码

2.KEIL5配置

1.打开文件dma.c

#include "dma.h"/* USER CODE BEGIN 0 *//* USER CODE END 0 *//*----------------------------------------------------------------------------*/
/* Configure DMA                                                              */
/*----------------------------------------------------------------------------*//* USER CODE BEGIN 1 *//* USER CODE END 1 */
DMA_HandleTypeDef hdma_memtomem_dma1_channel1;/*** Enable DMA controller clock* Configure DMA for memory to memory transfers*   hdma_memtomem_dma1_channel1*/
void MX_DMA_Init(void)
{/* DMA controller clock enable */__HAL_RCC_DMA1_CLK_ENABLE();/* Configure DMA request hdma_memtomem_dma1_channel1 on DMA1_Channel1 */hdma_memtomem_dma1_channel1.Instance = DMA1_Channel1;hdma_memtomem_dma1_channel1.Init.Direction = DMA_MEMORY_TO_MEMORY;hdma_memtomem_dma1_channel1.Init.PeriphInc = DMA_PINC_ENABLE;hdma_memtomem_dma1_channel1.Init.MemInc = DMA_MINC_ENABLE;hdma_memtomem_dma1_channel1.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;hdma_memtomem_dma1_channel1.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;hdma_memtomem_dma1_channel1.Init.Mode = DMA_NORMAL;hdma_memtomem_dma1_channel1.Init.Priority = DMA_PRIORITY_LOW;if (HAL_DMA_Init(&hdma_memtomem_dma1_channel1) != HAL_OK){Error_Handler();}}

2.在MX_DMA_Init()函数中加入完成初始化(不要忘记了)

HAL_DMA_Init(&hdma_memtomem_dma1_channel1);

3.打开main.c文件(已经默认调用好了头文件)

4.先定义存储器1

 #define SENDBUFF_SIZE 10   const uint32_t aSRC_Const_Buffer[SENDBUFF_SIZE]= {                                                                                           0x61626364,0x65666768,0x696A6B6C,0x6D6E6F70,0x71727374,0x75767778,0x797A7B7C,0x7D7E7F80};

5.再定义储存器2

uint32_t aDST_Buffer[SENDBUFF_SIZE];

6.在main结构体中调用函数

  HAL_StatusTypeDef DMA_status ;//DMA_status     反应了传输的状态DMA_status = HAL_DMA_Start(&hdma_memtomem_dma1_channel1,(uint32_t)aSRC_Const_Buffer, (uint32_t)aDST_Buffer,SENDBUFF_SIZE);//HAL_DMA_Start  开始传送//四个参数 1.DMA通道 2.存储器1 3.存储器2 4.传输的数据大小//返回参数 传输的状态if(DMA_status == HAL_OK){//当发送成功以后,执行相应的函数}

3.传输数据检测

1.确保DMA数据传输不被打断

	/* 等待DMA传输完成 */while(__HAL_DMA_GET_FLAG(&hdma_memtomem_dma1_channel1,DMA_FLAG_TC1)==RESET){}//两个参数: 1.DMA通道   2.DMA传输标志(后面的数字代表不同的通道)//一个返回值: 1.DMA传输标志的对应状态

2.对比两个储存器中数据是否相同

uint8_t Buffercmp(const uint32_t* pBuffer,uint32_t* pBuffer1, uint16_t BufferLength)
{/* 数据长度递减 */while(BufferLength--){/* 判断两个数据源是否对应相等 */if(*pBuffer != *pBuffer1){/* 对应数据源不相等马上退出函数,并返回0 */return 0;}/* 递增两个数据源的地址指针 */pBuffer++;pBuffer1++;}/* 完成判断并且对应数据相对 */return 1;  
}    //一个返回值 : 0代表数据不相等,1代表数据相等
//桑格变量:  1.储存器1  2.储存器2  3.数据长度

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 打开VSCod安装“PHP Intelephense”或“PHP Server”PHP扩展
  • 通过SQL语句判断奇偶数的几种方法
  • QXml 使用方法
  • 物联网之ESP32与微信小程序实现指示灯、转向灯
  • FloodFill算法(DFS+BFS)【上】
  • NLP基础及其代码-tokenizer
  • 如何保证消息不重复消费
  • 【Power Compiler手册】13.UPF多电压设计实现(3)
  • Vant 按需引入导致 Typescript,eslint 报错问题
  • 【专题】2024跨境出海供应链洞察-更先进供应链报告合集PDF分享(附原数据表)
  • 什么是 Grafana?
  • 【组件】前端js HEIC/HEIF 转换为JPEG、PNG或GIF格式 苹果格式
  • 前端开发macbook——NVM环境配置以及git配置流程
  • 【Python机器学习】循环神经网络(RNN)——超参数
  • Python操作MySQL
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • Django 博客开发教程 16 - 统计文章阅读量
  • docker容器内的网络抓包
  • JAVA并发编程--1.基础概念
  • Java的Interrupt与线程中断
  • nginx 配置多 域名 + 多 https
  • PAT A1050
  • PhantomJS 安装
  • PHP的Ev教程三(Periodic watcher)
  • React Native移动开发实战-3-实现页面间的数据传递
  • ucore操作系统实验笔记 - 重新理解中断
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 基于web的全景—— Pannellum小试
  • 解析带emoji和链接的聊天系统消息
  • 前端之Sass/Scss实战笔记
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 双管齐下,VMware的容器新战略
  • 跳前端坑前,先看看这个!!
  • 小程序测试方案初探
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • ​LeetCode解法汇总518. 零钱兑换 II
  • # C++之functional库用法整理
  • #07【面试问题整理】嵌入式软件工程师
  • #微信小程序:微信小程序常见的配置传旨
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • ( 10 )MySQL中的外键
  • (3) cmake编译多个cpp文件
  • (C语言)二分查找 超详细
  • (SpringBoot)第七章:SpringBoot日志文件
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (六)c52学习之旅-独立按键
  • (四)Linux Shell编程——输入输出重定向
  • (转)Sublime Text3配置Lua运行环境
  • .NET 4.0中的泛型协变和反变
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET Framework、.NET Core 、 .NET 5、.NET 6和.NET 7 和.NET8 简介及区别
  • .NET_WebForm_layui控件使用及与webform联合使用