这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
dma实验_存储器到存储器的传输 [2020/07/04 14:32] zgf |
dma实验_存储器到存储器的传输 [2022/03/22 10:19] (当前版本) sean |
||
---|---|---|---|
行 1: | 行 1: | ||
+ | |||
+ | | **银杏科技有限公司旗下技术文档发布平台** |||| | ||
+ | |技术支持电话|**0379-69926675-801**||| | ||
+ | |技术支持邮件|Gingko@vip.163.com||| | ||
+ | ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ||
+ | | V1.0 | 2020-07-04 | gingko | 初次建立 | | ||
+ | |||
===== 实验十一:DMA实验——存储器到存储器的传输 ===== | ===== 实验十一:DMA实验——存储器到存储器的传输 ===== | ||
行 9: | 行 16: | ||
- 掌握KEIL MDK 集成开发环境使用方法。 | - 掌握KEIL MDK 集成开发环境使用方法。 | ||
==== 二、 实验设备及平台 ==== | ==== 二、 实验设备及平台 ==== | ||
- | - iCore4 双核心板。 | + | - iCore4 双核心板[[https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22598974120.15.5923532fsFrHiE&id=551864196684|点击购买]]。 |
- | - JLINK(或相同功能)仿真器。 | + | - JLINK(或相同功能)仿真器[[https://item.taobao.com/item.htm?id=554869837940|点击购买]]。 |
- Micro USB线缆。 | - Micro USB线缆。 | ||
- Keil MDK 开发平台。 | - Keil MDK 开发平台。 | ||
行 136: | 行 143: | ||
static int initialize(void) | static int initialize(void) | ||
{ | { | ||
- | __HAL_RCC_DMA2_CLK_ENABLE(); //使能时钟 | + | _HAL_RCC_DMA2_CLK_ENABLE(); //使能时钟 |
return 0; | return 0; | ||
} | } | ||
行 143: | 行 150: | ||
=== 3、DMA开始传输函数 === | === 3、DMA开始传输函数 === | ||
<code c> | <code c> | ||
- | HAL_StatusTypeDef HAL_DMA_Start(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength) | + | HAL_StatusTypeDef HAL_DMA_Start(DMA_HandleTypeDef *hdma,uint32_t SrcAddress,uint32_t DstAddress,uint32_t DataLength) |
{ | { | ||
HAL_StatusTypeDef status = HAL_OK; | HAL_StatusTypeDef status = HAL_OK; | ||
assert_param(IS_DMA_BUFFER_SIZE(DataLength)); /* 检查参数 */ | assert_param(IS_DMA_BUFFER_SIZE(DataLength)); /* 检查参数 */ | ||
- | __HAL_LOCK(hdma); /* 进程锁定 */ | + | _HAL_LOCK(hdma); /* 进程锁定 */ |
- | if(HAL_DMA_STATE_READY == hdma->State) | + | if(HAL_DMA_STATE_READY == hdma->State) |
- | { | + | { |
- | hdma->State = HAL_DMA_STATE_BUSY; /* 更改DMA外设状态 */ | + | hdma->State = HAL_DMA_STATE_BUSY; /* 更改DMA外设状态 */ |
- | hdma->ErrorCode = HAL_DMA_ERROR_NONE; /* 初始化错误代码 */ | + | hdma->ErrorCode = HAL_DMA_ERROR_NONE; /* 初始化错误代码 */ |
/* 配置源,目标地址和数据长度 */ | /* 配置源,目标地址和数据长度 */ | ||
DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength); | DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength); | ||
- | __HAL_DMA_ENABLE(hdma); /* 使能外围设备 */ | + | _HAL_DMA_ENABLE(hdma); /* 使能外围设备 */ |
} | } | ||
else | else | ||
{ | { | ||
- | __HAL_UNLOCK(hdma); /* 进程解锁 */ | + | _HAL_UNLOCK(hdma); /* 进程解锁 */ |
status = HAL_BUSY; /* 返回错误状态 */ | status = HAL_BUSY; /* 返回错误状态 */ | ||
} | } | ||
行 169: | 行 176: | ||
* 在DMA传输过程中,我们要查询DMA传输通道的状态,使用的方法是: | * 在DMA传输过程中,我们要查询DMA传输通道的状态,使用的方法是: | ||
<code c> | <code c> | ||
- | __HAL_DMA_GET_FLAG(&hdma_memtomem_dma2_stream0,DMA_FLAG_TCIF0_4 | + | _HAL_DMA_GET_FLAG(&hdma_memtomem_dma2_stream0,DMA_FLAG_TCIF0_4 |
</code> | </code> | ||
* 主函数中即是通过此方法查询DMA传输通道的状态。 | * 主函数中即是通过此方法查询DMA传输通道的状态。 |