野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10837|回复: 1

DMA存储器到存储器一直不成功求助

[复制链接]
发表于 2018-2-28 19:59:14 | 显示全部楼层 |阅读模式

  1. #include "stm32f10x.h"
  2. #include "stm32f10x_rcc.h"
  3. #include "stm32f10x_dma.h"
  4. #include "LED.h"

  5. const int Soc=2;
  6. int Pac;

  7. void DMAConfig(void)
  8. {  
  9.         DMA_InitTypeDef DMAset;
  10.        
  11.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
  12.   DMAset.DMA_PeripheralBaseAddr=(uint32_t)Pac;
  13.         DMAset.DMA_MemoryBaseAddr=(uint32_t)Soc;
  14.         DMAset.DMA_DIR=DMA_DIR_PeripheralSRC;
  15.        
  16.         DMAset.DMA_BufferSize=1;
  17.         DMAset.DMA_MemoryInc=DMA_MemoryInc_Disable;
  18.         DMAset.DMA_PeripheralInc=DMA_PeripheralInc_Disable;
  19.         DMAset.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Word;
  20.         DMAset.DMA_MemoryDataSize=DMA_MemoryDataSize_Word;
  21.         DMAset.DMA_Mode=DMA_Mode_Normal;
  22.         DMAset.DMA_Priority=DMA_Priority_High;
  23.         DMAset.DMA_M2M=DMA_M2M_Enable;
  24.         DMA_Init(DMA1_Channel6,&DMAset);
  25.         DMA_ClearFlag(DMA1_FLAG_TC6);
  26.         DMA_Cmd(DMA1_Channel6,ENABLE);
  27. }
  28.        
  29.         void delay_us(u32 nTimer)  
  30. {  
  31.     u32 i=0;  
  32.     for(i=0;i<nTimer;i++){  
  33.         __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();  
  34.         __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();  
  35.         __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();  
  36.         __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();  
  37.         __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();  
  38.     }  
  39. }  

  40. void delay_ms(u32 nTimer)  
  41. {  
  42.     u32 i=1000*nTimer;  
  43.     delay_us(i);  
  44. }  
  45. int main(void)
  46. {
  47.         LED_GPIO_Config();
  48.         LED_RED;
  49.         int order=0;

  50.         DMAConfig();
  51.        
  52.         while(DMA_GetFlagStatus(DMA1_FLAG_TC6)==0)
  53.         {
  54.                
  55.         }
  56.        
  57.         delay_ms(1000);
  58.         while(1)
  59.         {
  60.                 if(Pac==Soc)
  61.                 {
  62.                         order=1;
  63.                 }
  64.                 if(order==1)
  65.                 {
  66.                         LED_GREEN;
  67.                 }
  68.         }                                                                       
  69. }
复制代码

程序是希望把Soc的数据通过DMA传给Pac
现在程序好像是在while(DMA_GetFlagStatus(DMA1_FLAG_TC6)==0)这个循环里面卡住,只亮红灯,不知道应该怎么解决
回复

使用道具 举报

发表于 2018-3-1 08:44:58 | 显示全部楼层
直接按例程的来
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-18 03:41 , Processed in 0.031640 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表