M to M:Flash to Sram,把内部flash的数据传输到内部SRAM(DRAM主要存放的是变量, flash 主要存放代码)

M to P: SRAM to 串口,同时LED闪烁,演示DMA传送数据不需要占用CPU

bsp_dma_mtm.h

#ifndef __BSP_DMA_MTM_H
#define __BSP_DMA_MTM_H #include "stm32f10x.h" // 要发送的数据大小
#define BUFFER_SIZE 32 #define MTM_DMA_CLK RCC_AHBPeriph_DMA1
#define MTM_DMA_CHANNEL DMA1_Channel6
#define MTM_DMA_FLAG_TC DMA1_FLAG_TC6 void MtM_DMA_Config(void);
uint8_t Buffercmp(const uint32_t* pBuffer,
uint32_t* pBuffer1, uint16_t BufferLength); #endif /* __BSP_DMA_MTM_H */

bsp_dma_mtm.c

#include "bsp_dma_mtm.h"

/* 定义aSRC_Const_Buffer数组作为DMA传输数据源
* const关键字将aSRC_Const_Buffer数组变量定义为常量类型
* 表示数据存储在内部的FLASH中
*/
const uint32_t aSRC_Const_Buffer[BUFFER_SIZE]= {
0x01020304,0x05060708,0x090A0B0C,0x0D0E0F10,
0x11121314,0x15161718,0x191A1B1C,0x1D1E1F20,
0x21222324,0x25262728,0x292A2B2C,0x2D2E2F30,
0x31323334,0x35363738,0x393A3B3C,0x3D3E3F40,
0x41424344,0x45464748,0x494A4B4C,0x4D4E4F50,
0x51525354,0x55565758,0x595A5B5C,0x5D5E5F60,
0x61626364,0x65666768,0x696A6B6C,0x6D6E6F70,
0x71727374,0x75767778,0x797A7B7C,0x7D7E7F80};
/* 定义DMA传输目标存储器
* 存储在内部的SRAM中
*/
uint32_t aDST_Buffer[BUFFER_SIZE]; //typedef struct
//{
// uint32_t DMA_PeripheralBaseAddr; // 外设地址
// uint32_t DMA_MemoryBaseAddr; // 存储器地址
// uint32_t DMA_DIR; // 传输方向
// uint32_t DMA_BufferSize; // 传输数目
// uint32_t DMA_PeripheralInc; // 外设地址增量模式
// uint32_t DMA_MemoryInc; // 存储器地址增量模式
// uint32_t DMA_PeripheralDataSize; // 外设数据宽度
// uint32_t DMA_MemoryDataSize; // 存储器数据宽度
// uint32_t DMA_Mode; // 模式选择
// uint32_t DMA_Priority; // 通道优先级
// uint32_t DMA_M2M; // 存储器到存储器模式
//}DMA_InitTypeDef; void MtM_DMA_Config(void)
{
DMA_InitTypeDef DMA_InitStruct; RCC_AHBPeriphClockCmd(MTM_DMA_CLK, ENABLE); DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t)aSRC_Const_Buffer;
DMA_InitStruct.DMA_MemoryBaseAddr = (uint32_t)aDST_Buffer;
DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStruct.DMA_BufferSize = BUFFER_SIZE; DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Enable;
DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; DMA_InitStruct.DMA_Mode = DMA_Mode_Normal;
DMA_InitStruct.DMA_Priority = DMA_Priority_High;
DMA_InitStruct.DMA_M2M = DMA_M2M_Enable; DMA_Init(MTM_DMA_CHANNEL, &DMA_InitStruct); DMA_ClearFlag(MTM_DMA_FLAG_TC);
DMA_Cmd(MTM_DMA_CHANNEL, ENABLE);
} /**
* 判断指定长度的两个数据源是否完全相等,
* 如果完全相等返回1,只要其中一对数据不相等返回0
*/
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;
}

main.c

#include "stm32f10x.h"
#include "bsp_led.h"
#include "bsp_dma_mtm.h" extern const uint32_t aSRC_Const_Buffer[BUFFER_SIZE];
extern uint32_t aDST_Buffer[BUFFER_SIZE]; #define SOFT_DELAY Delay(0x0FFFFF); void Delay(__IO u32 nCount); int main(void)
{
uint8_t status=0; /* LED 端口初始化 */
LED_GPIO_Config();
LED_YELLOW;
Delay(0xFFFFFF); MtM_DMA_Config(); while( DMA_GetFlagStatus(MTM_DMA_FLAG_TC) == RESET ); status = Buffercmp(aSRC_Const_Buffer,aDST_Buffer,BUFFER_SIZE); if( status == 0 )
{
LED_RED;
}
else
{
LED_GREEN;
} while (1)
{ }
} void Delay(__IO uint32_t nCount) //简单的延时函数
{
for(; nCount != 0; nCount--);
}

DMA存储器到存储器传输代码讲解的更多相关文章

  1. 【GMT43智能液晶模块】例程十:DMA实验——存储器到存储器的传输

    实验原理: DMA(直接存储器访问)传输不需要占用CPU,可以在存储器至存储器实现高速的数据 传输.本实验采用DMA2控制器的数据流0,选用通道0进行数据传输.通过液晶控制传输 和结果显示. 示例截图 ...

  2. 【iCore4 双核心板_ARM】例程十一:DMA实验——存储器到存储器的传输

    实验原理: DAM(直接存储器访问)传输不需要占用CPU,可以在存储器至存储器实现高速的数据 传输.本实验采用DAM2控制器的数据流0,选用通道0进行数据传输.通过LED的颜色来 判断传输是否成功. ...

  3. 【iCore1S 双核心板_ARM】例程十二:DMA实验——存储器到存储器的传输

    实验原理: DAM(直接存储器访问)传输不需要占用CPU,可以在存储器至存储器实现高速的数据 传输.本实验采用DAM2控制器的数据流0,选用通道0进行数据传输.通过LED的颜色来 判断传输是否成功. ...

  4. 第二章--Win32程序运行原理 (部分概念及代码讲解)

    学习<Windows程序设计>记录 概念贴士: 1. 每个进程都有赋予它自己的私有地址空间.当进程内的线程运行时,该线程仅仅能够访问属于它的进程的内存,而属于其他进程的内存被屏蔽了起来,不 ...

  5. RSA加密传输代码示例

    RSA加密传输代码示例 涉及敏感数据的传输,双方最好约定使用加密解密.那RSA非对称加密就大有作为了.服务端可以保留自己的私钥,发给客户端对应的公钥.这样就可以互相加解密了.php中rsa加解密实现: ...

  6. 『HTML5实现人工智能』小游戏《井字棋》发布,据说IQ上200才能赢【算法&代码讲解+资源打包下载】

    一,什么是TicTacToe(井字棋) 本游戏为在下用lufylegend开发的第二款小游戏.此游戏是大家想必大家小时候都玩过,因为玩它很简单,只需要一张草稿纸和一只笔就能开始游戏,所以广受儿童欢迎. ...

  7. Java生鲜电商平台-生鲜电商高并发下的接口幂等性实现与代码讲解

    Java生鲜电商平台-生鲜电商高并发下的接口幂等性实现与代码讲解 说明:Java生鲜电商平台-生鲜电商高并发下的接口幂等性实现与代码讲解,实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返 ...

  8. faster RCNN(keras版本)代码讲解(3)-训练流程详情

    转载:https://blog.csdn.net/u011311291/article/details/81121519 https://blog.csdn.net/qq_34564612/artic ...

  9. 毕业设计java实验室预约管理系统SSH机房预约系统javaweb机房实验室排课系统mysql机房管理系统 实验室管理系统 课程设计 代码讲解 调试运行

    毕业设计java实验室预约管理系统SSH机房预约系统javaweb机房实验室排课系统mysql机房管理系统 实验室管理系统 课程设计 代码讲解 调试运行 注意:该项目只展示部分功能,如需了解,评论区咨 ...

随机推荐

  1. C语言应用--数据类型定制一定义和引用

    目前,定制正在变的越来越普遍,定制服务.定制衣服.甚至使用的键盘都是定制了.在C语言中虽然也包括了整型.字符型和浮点型等基本类型,也有基本的组合数据类型数组.但是这些类型都是针对某一种特定类型时应用没 ...

  2. kde下面设置plasma_notes字体

    只要编辑home目录下vim .local/share/plasma_notes/06af6151-fd00-4cf4-890b-96d783da03,例如: 1 <!DOCTYPE HTML ...

  3. IOS添加真机调试设备

    注意点: 有时需要同意协议什么的,很多时候刷新出来都是白屏,解决办法: 对于不能确认新协议的问题,我发现了一个解决方法:登陆后,直接在浏览器的地址框访问:https://developer.apple ...

  4. Web安全测试检查点

    Web安全测试检查点 上传功能 1.绕过文件上传检查功能 2.上传文件大小和次数限制 注册功能 1.注册请求是否安全传输 2.注册时密码复杂度是否后台检验 3.激活链接测试 4.重复注册 5.批量注册 ...

  5. ubuntu14.04 rabbitmq重启丢失用户信息

    一.rabbitmq数据是根据当前hostname作为node节点作为数据名保存 二.添加rabbimq用户sudo rabbitmqctl add_user tlwlmy tlwlmysudo ra ...

  6. Jmeter BeanShell 引用变量报错Error or number too big for integer

    如果你通过CSV Data Set Config或者_StringFromFile函数来参数化你的请求,需要特别注意当参数为纯数字时,jmeter会默认将其识别成int型数据,说明jmeter并不是默 ...

  7. Hibernate 自动更新表出错 建表或添加列,提示标识符无效

    如Oracle 数据库下报错: create table db_meta_web.user (id varchar2(255 char) not null, account varchar2(255 ...

  8. Realsense D430 save

    rs-save-to-disk.cpp // License: Apache 2.0. See LICENSE file in root directory. // Copyright(c) 2015 ...

  9. osg qt 三维模型加载

    osg::ref_ptr<osg::Node> OSG_Qt_::operateMatrix() { osg::ref_ptr<osg::Group> group = new ...

  10. Qt编写自定义控件44-天气仪表盘

    一.前言 天气仪表盘控件是所有控件中唯一一个使用了svg矢量图的控件,各种天气图标采用的矢量图,颜色变换采用动态载入svg的内容更改生成的,其实也可以采用图形字体来做,本次控件为了熟悉下svg在Qt中 ...