DMA实验1-内存到内存的搬运

实验要求

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

CubeMX配置

 

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

用到的库函数

1. HAL_DMA_Start 

HAL_StatusTypeDef HAL_DMA_Start(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t
DstAddress, uint32_t DataLength)
参数一: DMA_HandleTypeDef *hdma DMA 通道句柄
参数二: uint32_t SrcAddress ,源内存地址
参数三: uint32_t DstAddress ,目标内存地址
参数四: uint32_t DataLength ,传输数据长度。注意: 需要乘以 sizeof(uint32_t)
返回值: HAL_StatusTypeDef HAL 状态( OK busy ERROR TIMEOUT
2. __HAL_DMA_GET_FLAG
#define __HAL_DMA_GET_FLAG(__HANDLE__, __FLAG__) (DMA1->ISR & (__FLAG__))
参数一: HANDLE DMA 通道句柄
参数二: FLAG ,数据传输标志。 DMA_FLAG_TCx 表示数据传输完成标志
返回值: FLAG 的值( SET/RESET
代码实现
        1. 开启数据传输
        2. 等待数据传输完成
        3. 打印数组内容
#define BUF_SIZE 16
// 源数组
uint32_t srcBuf[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函数里:
// 开启数据传输
HAL_DMA_Start(&hdma_memtomem_dma1_channel1,(uint32_t)srcBuf, (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]);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值