STM32学习——DMA实验一、内存到内存搬运

目录

实验要求

CubeMX配置

DMA 配置:​编辑

 用到的库函数

1.HAL_DMA_Start

2.__HAL_DMA_GET_FLAG

代码实现


实验要求

使用 DMA 的方式将数组 A 的内容复制到数组 B 中,搬运完之后将数组 B 的内容打印到屏幕。

CubeMX配置

DMA 配置:

 重定向 printf 的话记得将下面这个勾打开:

 用到的库函数

1.HAL_DMA_Start

HAL_StatusTypeDef HAL_DMA_Start ( DMA_HandleTypeDef * hdma , uint32_t SrcAddress , uint32_t DstAddress , uint32_t DataLength )
  • 参数一:DMA_HandleTypeDef *hdmaDMA通道句柄
  • 参数二:uint32_t SrcAddress,源内存地址
  • 参数三:uint32_t DstAddress,目标内存地址
  • 参数四:uint32_t DataLength,传输数据长度。注意:需要乘以sizeof(uint32_t)
  • 返回值:HAL_StatusTypeDefHAL状态(OKbusyERRORTIMEOUT

2.__HAL_DMA_GET_FLAG

# define __HAL_DMA_GET_FLAG ( __HANDLE__ , __FLAG__ ) ( DMA1 -> ISR & ( __FLAG__ ))
  • 参数一:HANDLEDMA通道句柄
  • 参数二:FLAG,数据传输标志。DMA_FLAG_TCx表示数据传输完成标志
  • 返回值:FLAG的值(SET/RESET

代码实现

  • 开启数据传输
  • 等待数据传输完成
  • 打印数组内容
#define BUF_SIZE 16

//源数组
uint32_t strBUF[BUF_SIZE] = 
{
	0x00000000,0x11111111,0x22222222,0x33333333,
	0x44444444,0x55555555,0x66666666,0x77777777,
	0x88888888,0x99999999,0xAAAAAAAA,0xBBBBBBBB,
	0xCCCCCCCC,0xDDDDDDDD,0xEEEEEEEE,0xFFFFFFFF
};
//目标数组
uint32_t desBUF[BUF_SIZE];

int fputc(int ch,FILE *f)
{
	unsigned char temp[1] = {ch};
	HAL_UART_Transmit(&huart1,temp,1,0xffff);
	return ch;
}

main函数里:

int i = 0;

//开启数据传输
	HAL_DMA_Start(&hdma_memtomem_dma1_channel1,(uint32_t)strBUF,
    (uint32_t)desBUF,sizeof(uint32_t) * BUF_SIZE);
	//等待数据传输完成
	while(__HAL_DMA_GET_FLAG(hdma_memtomem_dma1_channel1,DMA_FLAG_TC1) == RESET);
	//打印数组的内容
	for(i = 0;i < BUF_SIZE ;i++)
	{
		printf("BUF[%d] = %X\r\n",i,desBUF[i]);
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值