DMA实验1-内存到内存的搬运
2023-12-20 00:16:13
实验要求
使用
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]);
文章来源:https://blog.csdn.net/qq_61391875/article/details/135091997
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!