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

STM32F103 DMA 从RAM 到RAM程序

[复制链接]
mengyu139 发布时间:2014-11-9 20:48
  1. /******************** (C) COPYRIGHT 2012 WildFire Team **************************
    ; D& D2 b5 I! F2 }, ~% p6 {
  2. ; ^" |' M- E1 @  d4 j+ k% L
  3. **********************************************************************************/. j& E& G; f) s% u' x1 o- Z! `5 ^. H* z
  4. #include "stm32f10x.h"
    - u& z. X( E$ I0 D8 _/ |& \
  5. #include "stm32f10x_conf.h "
    + S4 d3 C5 X7 L' z
  6. #define BufferSize  32
      C( R& W( g: l7 b4 S
  7. __IO uint32_t CurrDataCounterBegin = 0;
    ) Y" Z  e0 Z" q! C9 ]
  8. __IO uint32_t CurrDataCounterEnd = 0x01; /* This variable should not be initialized to 0 */
    8 w7 J- ~4 j+ Z, C! S! U$ b

  9. 1 _1 \9 i5 [' [" J- v$ u3 x! O

  10. ' t3 [4 o7 |( k& P2 m2 v
  11. void Delay(__IO u32 nCount);- d# z" {0 Q4 N4 k, G, P& z
  12. void RCC_DMA1_Config(void);
    ' [% p+ ]( y1 F' A( \) J
  13. void NVIC_Configuration(void);: l9 a# D3 B. U: S; C
  14. ' X; |: i+ L, _1 M( N. [
  15. const uint32_t SRC_Const_Buffer[BufferSize]=
    2 Y, K3 d, M' v0 Z% o
  16. {% H: v* F4 t, r  B! t: v* e* n7 C
  17. 0x01020304,0x05060708,0x090A0B0C,0x0D0E0F10,
    2 d4 g6 P, v7 K" D5 {* F% g
  18. 0x11121314,0x15161718,0x191A1B1C,0x1D1E1F20,
    8 O9 T6 b2 ^- G$ ]) W* B$ |: ^
  19. 0x21222324,0x25262728,0x292A2B2C,0x2D2E2F30,
    ) \0 r% C4 ]% w! j9 I  y
  20. 0x31323334,0x35363738,0x393A3B3C,0x3D3E3F40,
    . S. k+ ]' r) _5 @
  21. 0x41424344,0x45464748,0x494A4B4C,0x4D4E4F50,, t. }! w( A5 E/ L! U- C6 i
  22. 0x51525354,0x55565758,0x595A5B5C,0x5D5E5F60,$ B0 X- x4 Q+ `- G7 z% K
  23. 0x61626364,0x65666768,0x696A6B6C,0x6D6E6F70,
    1 Q+ n/ a8 j, e4 V; a7 U
  24. 0x71727374,0x75767778,0x797A7B7C,0x7D7E7F80
    - V0 T4 b- {& j* q: c
  25. };/ P4 S" z# Q' C
  26. uint32_t DST_Buffer[BufferSize];
    8 Z' D+ {" Z0 U2 k# z, Y! y5 Z$ e
  27. 0 V* s  H1 J( S* g( x
  28. uint16_t COUNT = 0;
      p. X& C. w. ?! _4 \7 Y, |

  29. 5 Y: n6 r' r' n0 _
  30. int main(void)
    1 m. W8 h# @: `8 _8 F: R4 [
  31. {       
    ) k0 p2 u( C& E
  32.         NVIC_InitTypeDef NVIC_InitStructure;
    : S( R! H. Z" d, M/ M* p0 K
  33.   DMA_InitTypeDef  DMA_InitStructure;) O: _0 P/ i: ?9 Z9 y  {! i

  34.   `: c1 w' f% B/ d8 `
  35.        
    ) M' q# e6 v( G$ N! Z, ^8 d
  36.         //RCC_DMA1_Config();9 M% z$ A3 F# D3 n# u& L# O
  37.   //NVIC_Configuration();
    : J+ E  _/ h2 g- Y
  38.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);+ x6 v2 {; P/ C# Z
  39.         ) P4 ]3 q! Z- Y
  40.        
    2 v; k1 y  @( h% r8 V( N
  41.         /* Enable DMA1 channel6 IRQ Channel */
    2 n. I' ?& Q5 L: r; n
  42.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel6_IRQn;
    . u) K5 a& Q% {
  43.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;" X- b9 F* y6 o) w% D' R9 b
  44.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    + i1 k5 W; d' e9 G" d8 t
  45.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;2 R( }3 U- g( P3 d' r; J
  46.         NVIC_Init(&NVIC_InitStructure);
      a- G1 y! `, j
  47.         7 q; Q) P+ L2 o% [3 F
  48.    /* DMA1 channel6 configuration */! ]: \2 l8 d- R4 P0 l
  49.         $ c2 E6 o8 E% U) ^6 J2 }6 ]% ^
  50.         DMA_DeInit(DMA1_Channel6);                                                                                                                                                                                         //DMA channel# l8 p) G) [: j
  51.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SRC_Const_Buffer;        //source bass address
    9 {% v! E: y' l1 s9 O6 o
  52.         DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)DST_Buffer;                                                //density bass address
    - S- y2 @& t6 \# @  i$ W
  53.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;                                                                                        //direction: source to density
    2 H! o" ~4 B2 W, O) w; _
  54.         DMA_InitStructure.DMA_BufferSize = BufferSize;                                                                                                        //size one time6 |1 N- C. Z% `" ~$ G( k6 }& @+ D
  55.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable;                                        //source add plus auto
    2 O: v% A0 N8 j. @. M5 N
  56.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                                                                        //density add plus auto" g6 Y- ]! C+ [% m7 v/ O; V( c
  57.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;        //unit of source data6 n5 h5 v& T" }: K# f: v; I& x
  58.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;                                        //unit of density data
    / \) |4 u6 A" E
  59.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;                                                                                                                //one cycle mode
    " d$ Q  `  S% N# u& c- r. W1 M: j! }
  60.         DMA_InitStructure.DMA_Priority = DMA_Priority_High;                                                                                        //piority : high! R3 {4 f7 x/ Y7 ~! K5 V
  61.         DMA_InitStructure.DMA_M2M = DMA_M2M_Enable;                                                                                                                        //memory to memory mode6 n- ?+ r6 Y2 c$ b. f) S# a
  62.         DMA_Init(DMA1_Channel6, &DMA_InitStructure);//
    . X+ ]3 x  E. F" z, N9 Q
  63.         8 e& l4 L% w! R, ~, N
  64.         /* Enable DMA1 Channel6 Transfer Complete interrupt */1 w4 [% o/ f& L0 n  q
  65.   DMA_ITConfig(DMA1_Channel6, DMA_IT_TC, ENABLE);                                                                                                        //enable interrupt of dma+ b$ ]2 F  J% w1 c: {: h
  66.         9 z% T$ B6 G( q$ f
  67.         /* Get Current Data Counter value before transfer begins */
    & B9 i% C5 X- b! Z( |% V
  68.   CurrDataCounterBegin = DMA_GetCurrDataCounter(DMA1_Channel6);+ C5 z9 `4 m6 X% S. p
  69. 2 ~- |2 H0 m/ L2 e( M! @& O
  70. /* Enable DMA1 Channel6 transfer */  u' ]% ?3 Q! A$ `
  71.   DMA_Cmd(DMA1_Channel6, ENABLE);      //in memory to memory mode , enable is to start transfer
    8 b4 U& u8 F1 a% I! h

  72.   j' }: v: q$ K+ C. |) @
  73. while (CurrDataCounterEnd != 0)
    2 A3 A% M5 h! M8 {" Q. ]
  74. {
    5 ?, L/ M5 q% w! O9 s5 H1 h
  75.          0 j! U( H+ O  D/ ?/ q: u
  76. }0 k+ D! G* _4 q  j) P5 {/ ?1 b
  77. " j$ B: R1 v1 g/ S/ A) }
  78. % P1 {* r# a0 J0 f
  79.         while (1)
    : _" x' [: `. n0 n
  80.         {       
    + `8 H5 M" G  F: d. e* u7 j; q5 r/ H
  81.        
      R7 X3 w1 ~) Z1 L1 U$ u9 U0 c5 V
  82.         }
    2 }# u; r$ O- A0 G. r3 T1 l
  83. }
    ( u- I; u' T# X1 I% F# {
  84. & v, x/ o5 I0 P, y1 W
  85. void Delay(__IO u32 nCount)         //简单的延时函数# `3 D8 j% F" V8 H
  86. {
    3 H3 M2 z2 {7 [
  87.         for(; nCount != 0; nCount--);. D3 {5 w; J5 G# u7 _5 t4 s3 ]4 R' u
  88. }
    3 n* `7 T7 Y6 q/ Z/ P- {

  89. " @6 C$ B, t3 y- ?" M- R2 [
  90. void RCC_DMA1_Config(void)
    0 ]: M4 w. e2 S2 X# E
  91. {% g0 `7 y' d: E* A$ W3 ^) r* q
  92.    /* Enable peripheral clocks ------------------------------------------------*/
    4 X% u8 z$ q4 k- }: b
  93.    /* Enable DMA1 clock */3 s; y: W( V& y2 u. u2 K& j  x& b
  94.    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);4 ^4 i4 p6 [6 a# q6 ?$ o
  95. }
    1 a+ {2 Q+ W+ U9 O

  96. 8 c( h9 \$ e$ L
  97. void NVIC_Configuration(void)
    - @* b, k! ^7 Y- E4 C2 A  j8 a: D# O1 g
  98. {
    ! k) e4 s" N8 Y  D8 p$ S( k: i
  99.    NVIC_InitTypeDef NVIC_InitStructure;
    & U4 j1 i5 h2 l: |, H- |$ M. U
  100.    
    ! F, p# ^1 k+ p5 P
  101.    /* Enable DMA1 channel6 IRQ Channel */) C8 f/ J. [% J1 d* M# p) Y! M' f- R
  102.    NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel6_IRQn;
    0 Q7 Z# }" w% N- [# C
  103.    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    4 S& b, n# B+ e9 k! c# o# }
  104.    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;0 _# M# w6 W; W9 @$ D
  105.    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    + M: z. {2 v6 F2 W
  106.    NVIC_Init(&NVIC_InitStructure);
    + U+ S5 D, |7 x1 S/ b8 X; G
  107. }
    4 s" |2 `# F% w" }
  108. % M4 z2 w; W- d4 I8 U" e( |; I
  109. 4 u8 a3 [) U  A+ }# ^5 e

  110. ; o, f% b7 s. t' t2 K1 P
  111. , o$ Y' |3 i( E" D% T& G' B9 t
  112. - o  P* _7 B6 U/ V

  113. ! T" I2 |$ H% e4 i" `4 I) t' q
  114. /******************* (C) COPYRIGHT 2012 WildFire Team *****END OF FILE************/; R' K8 o5 K: i# E# v- p
  115. $ Z) I( v- H" s$ v- |
  116. 1 }1 B& u( q  i- U
  117. void DMA1_Channel6_IRQHandler(void)* ~+ E  [% {, @2 ~; U& D, i" R% D1 W: j
  118. {
    - f2 |) m  Z7 ^/ T% Z' o9 p" E# c
  119.    /* Test on DMA1 Channel6 Transfer Complete interrupt */
    4 {& y% p# b6 l
  120.    if(DMA_GetITStatus(DMA1_IT_TC6))5 B  T7 }8 V4 B4 B
  121.    {
    . x. s4 e% `. J5 b) y3 F
  122.      /* Get Current Data Counter value after complete transfer */
    5 e7 k) L% T) f8 T
  123.      CurrDataCounterEnd = DMA_GetCurrDataCounter(DMA1_Channel6);. [) k' g. N: O
  124.      /* Clear DMA1 Channel6 Half Transfer, Transfer Complete and Global interrupt pending bits */1 L+ j9 \& `7 o8 P
  125.      DMA_ClearITPendingBit(DMA1_IT_GL6);
    " T* B- E0 A5 _8 k1 L+ v
  126.    }
    : ?" O) z" ?7 T2 o# P2 M" S
  127. }
复制代码
捕获.JPG 捕获.JPG " j8 T4 C, |# q+ T9 M0 Z
赞 收藏 1 评论2 发布时间:2014-11-9 20:48

举报

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

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版