用户工具

站点工具


dma实验_存储器到存储器的传输

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
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 开发平台。
行 101: 行 108:
   }   }
   /* 开始DMA传输 */   /* 开始DMA传输 */
-   ​HAL_DMA_Start(&​hdma_memtomem_dma2_stream0,​(unsigned long int)src_buffer,​(unsigned long int)dst_buffer,​(unsigned long int)BUFFER_SIZE);​+   ​HAL_DMA_Start(&​hdma_memtomem_dma2_stream0,​(unsigned long int)src_buffer,​(unsigned long int)dst_buffer,​(unsigned 
 +    ​long int)BUFFER_SIZE);​
     while(__HAL_DMA_GET_FLAG(&​hdma_memtomem_dma2_stream0,​DMA_FLAG_TCIF0_4) == SET);     while(__HAL_DMA_GET_FLAG(&​hdma_memtomem_dma2_stream0,​DMA_FLAG_TCIF0_4) == SET);
     for(i = 0;i < BUFFER_SIZE;​i++){     for(i = 0;i < BUFFER_SIZE;​i++){
行 135: 行 143:
 static int initialize(void) static int initialize(void)
 { {
-    ​__HAL_RCC_DMA2_CLK_ENABLE();  //​使能时钟+    ​_HAL_RCC_DMA2_CLK_ENABLE();  //​使能时钟
     return 0;     return 0;
 } }
行 142: 行 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; ​      /* 返回错误状态 */
   }    } 
行 168: 行 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传输通道的状态。
dma实验_存储器到存储器的传输.1593844330.txt.gz · 最后更改: 2020/07/04 14:32 由 zgf