你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F103 DMA 从RAM 到RAM程序

[复制链接]
mengyu139 发布时间:2014-11-9 20:48
  1. /******************** (C) COPYRIGHT 2012 WildFire Team **************************

  2. **********************************************************************************/
  3. #include "stm32f10x.h"
  4. #include "stm32f10x_conf.h "
  5. #define BufferSize  32
  6. __IO uint32_t CurrDataCounterBegin = 0;
  7. __IO uint32_t CurrDataCounterEnd = 0x01; /* This variable should not be initialized to 0 */


  8. void Delay(__IO u32 nCount);
  9. void RCC_DMA1_Config(void);
  10. void NVIC_Configuration(void);

  11. const uint32_t SRC_Const_Buffer[BufferSize]=
  12. {
  13. 0x01020304,0x05060708,0x090A0B0C,0x0D0E0F10,
  14. 0x11121314,0x15161718,0x191A1B1C,0x1D1E1F20,
  15. 0x21222324,0x25262728,0x292A2B2C,0x2D2E2F30,
  16. 0x31323334,0x35363738,0x393A3B3C,0x3D3E3F40,
  17. 0x41424344,0x45464748,0x494A4B4C,0x4D4E4F50,
  18. 0x51525354,0x55565758,0x595A5B5C,0x5D5E5F60,
  19. 0x61626364,0x65666768,0x696A6B6C,0x6D6E6F70,
  20. 0x71727374,0x75767778,0x797A7B7C,0x7D7E7F80
  21. };
  22. uint32_t DST_Buffer[BufferSize];

  23. uint16_t COUNT = 0;

  24. int main(void)
  25. {       
  26.         NVIC_InitTypeDef NVIC_InitStructure;
  27.   DMA_InitTypeDef  DMA_InitStructure;

  28.        
  29.         //RCC_DMA1_Config();
  30.   //NVIC_Configuration();
  31.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
  32.        
  33.        
  34.         /* Enable DMA1 channel6 IRQ Channel */
  35.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel6_IRQn;
  36.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  37.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  38.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  39.         NVIC_Init(&NVIC_InitStructure);
  40.        
  41.    /* DMA1 channel6 configuration */
  42.        
  43.         DMA_DeInit(DMA1_Channel6);                                                                                                                                                                                         //DMA channel
  44.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SRC_Const_Buffer;        //source bass address
  45.         DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)DST_Buffer;                                                //density bass address
  46.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;                                                                                        //direction: source to density
  47.         DMA_InitStructure.DMA_BufferSize = BufferSize;                                                                                                        //size one time
  48.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable;                                        //source add plus auto
  49.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                                                                        //density add plus auto
  50.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;        //unit of source data
  51.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;                                        //unit of density data
  52.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;                                                                                                                //one cycle mode
  53.         DMA_InitStructure.DMA_Priority = DMA_Priority_High;                                                                                        //piority : high
  54.         DMA_InitStructure.DMA_M2M = DMA_M2M_Enable;                                                                                                                        //memory to memory mode
  55.         DMA_Init(DMA1_Channel6, &DMA_InitStructure);//
  56.        
  57.         /* Enable DMA1 Channel6 Transfer Complete interrupt */
  58.   DMA_ITConfig(DMA1_Channel6, DMA_IT_TC, ENABLE);                                                                                                        //enable interrupt of dma
  59.        
  60.         /* Get Current Data Counter value before transfer begins */
  61.   CurrDataCounterBegin = DMA_GetCurrDataCounter(DMA1_Channel6);

  62. /* Enable DMA1 Channel6 transfer */
  63.   DMA_Cmd(DMA1_Channel6, ENABLE);      //in memory to memory mode , enable is to start transfer

  64. while (CurrDataCounterEnd != 0)
  65. {
  66.          
  67. }


  68.         while (1)
  69.         {       
  70.        
  71.         }
  72. }

  73. void Delay(__IO u32 nCount)         //简单的延时函数
  74. {
  75.         for(; nCount != 0; nCount--);
  76. }

  77. void RCC_DMA1_Config(void)
  78. {
  79.    /* Enable peripheral clocks ------------------------------------------------*/
  80.    /* Enable DMA1 clock */
  81.    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
  82. }

  83. void NVIC_Configuration(void)
  84. {
  85.    NVIC_InitTypeDef NVIC_InitStructure;
  86.    
  87.    /* Enable DMA1 channel6 IRQ Channel */
  88.    NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel6_IRQn;
  89.    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  90.    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  91.    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  92.    NVIC_Init(&NVIC_InitStructure);
  93. }






  94. /******************* (C) COPYRIGHT 2012 WildFire Team *****END OF FILE************/


  95. void DMA1_Channel6_IRQHandler(void)
  96. {
  97.    /* Test on DMA1 Channel6 Transfer Complete interrupt */
  98.    if(DMA_GetITStatus(DMA1_IT_TC6))
  99.    {
  100.      /* Get Current Data Counter value after complete transfer */
  101.      CurrDataCounterEnd = DMA_GetCurrDataCounter(DMA1_Channel6);
  102.      /* Clear DMA1 Channel6 Half Transfer, Transfer Complete and Global interrupt pending bits */
  103.      DMA_ClearITPendingBit(DMA1_IT_GL6);
  104.    }
  105. }
复制代码
捕获.JPG 捕获.JPG
收藏 1 评论2 发布时间:2014-11-9 20:48

举报

2个回答
mengyu139 回答时间:2014-11-9 20:49:10
留着以后用
沐紫 回答时间:2014-11-11 17:25:27
谢谢楼主啦

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版