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

STM32笔记(四)DMA、USART的演示

[复制链接]
私奔 发布时间:2009-1-4 14:30
阅读主题, 点击返回1楼
赞 收藏 评论44 发布时间:2009-1-4 14:30
44个回答
birdcq 回答时间:2011-5-13 14:35:18

RE:STM32笔记(四)DMA、USART的演示

好东西 下来看看 l
cocoasuny 回答时间:2011-11-4 14:15:28

RE:STM32笔记(四)DMA、USART的演示

谢谢,第一次使用DMA!
yfwang555 回答时间:2011-12-11 11:25:59

回复:STM32笔记(四)DMA、USART的演示

hfgggggggggggggggggggggggggggggkjttttttttttttttttttttttttttttttttttttttttttttttty
piaopiao123 回答时间:2011-12-20 09:28:40

RE:STM32笔记(四)DMA、USART的演示

各位大虾,帮忙看看,我的DMA串口可以发送,但是不能接收,请问可能会是什么问题呢?谢谢!
4 D1 f2 n) j% }- u: M#define TxBufferSize  16
; c5 _9 K/ ]$ Y( q# i#define RxBufferSize  16/ Q: Z: }5 X3 `$ v) A
uint8_t TxBuffer[TxBufferSize] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};
! S; E5 Q4 w- a- R0 h2 A. z5 E" Q/ Nuint8_t RxBuffer[RxBufferSize];) B7 t+ Y& E$ V% W# s
void DMA_Configuration(void)) J& G  ]( t% [
{) t3 o4 X; k' I
DMA_InitTypeDef DMA_InitStructure;. e- W  d0 v. L6 t$ T0 n
DMA_DeInit(DMA1_Channel7);  
# i( f( k: I$ c! v2 e+ A3 K DMA_InitStructure.DMA_PeripheralBaseAddr = 0x40004404;
2 Q2 ^+ z% z; [& K' b DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)TxBuffer;9 u! n+ N+ Q0 g4 C9 }$ z
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;9 a: n8 [* u% @- \* h' Q
DMA_InitStructure.DMA_BufferSize = TxBufferSize;; m( e0 g  }4 [6 E
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;' b( S2 Q0 i5 E( L8 {
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;1 V* g+ G( W/ o! F
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;  W& A, W$ s7 l
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;) g5 d# X5 m9 o, H* P
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
; g7 Q. g5 M6 R9 l6 m DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
1 w0 d9 a% z1 s DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
6 m: _6 ^- a* {* S4 p' ` DMA_Init(DMA1_Channel7, &DMA_InitStructure);
9 {$ j) R; T4 D; E  G DMA_DeInit(DMA1_Channel6);  ) u) h* P& @* b2 g! q
DMA_InitStructure.DMA_PeripheralBaseAddr = 0x40004404;
* A6 @; C4 @3 v  A- i DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)RxBuffer;. C4 E* b5 o2 \0 h7 S8 T* ^) \5 N
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
2 I+ M. L2 l* }* R: Z: r DMA_InitStructure.DMA_BufferSize = RxBufferSize;
8 f! M3 `/ g, B7 D% x DMA_Init(DMA1_Channel6, &DMA_InitStructure);
6 Y# j( K6 u0 A! ]# k8 h4 U" Q6 W}
0 G5 {0 q! k* Z* L$ C0 i& Q7 rvoid USART_Configuration(void)
: ^; _1 v+ t' B1 q, X{
! n# z, Y) J  [+ G+ y5 s+ _6 j; L9 L USART_InitTypeDef USART_InitStructure;$ q7 H: e9 L7 [0 j6 B
USART_DeInit(USART2);3 u% g7 F; d( s& a* d9 g
USART_InitStructure.USART_BaudRate = 115200;: b$ P2 K. r% X7 i
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
2 o. V# n( }- M* H# t4 r0 U USART_InitStructure.USART_StopBits = USART_StopBits_1;
6 j, [/ @$ T. c9 R8 L% O. j. b USART_InitStructure.USART_Parity = USART_Parity_No ;9 @9 z8 v6 P5 E- M
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;# d, s3 |5 }1 ]
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;7 \) R! o- h( f, w1 U. a  @
USART_Init(USART2,&USART_InitStructure);
2 F; a8 f  B6 Z4 U: J}; }8 T3 S8 x: T- {! X$ v2 C" \# x! M
void GPIO_Board_Init(void)
; l* U, E* w. D/ C* P/ z, N+ V" T# }. f{6 D+ y) k2 b. m& |1 ]2 U
  GPIO_InitTypeDef GPIO_InitStructure;, H  z2 T- U* S
  /* DMA1 Periph clock enable */, ]! o! s6 M$ d8 G
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
* x0 L7 o0 q# z; r7 C) J: q  /* GPIO Periph clock enable */6 U4 F1 p' M+ n2 F* I
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO , ENABLE);6 q/ }; x" G' [/ k% M
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 , ENABLE);2 K$ _, X9 m3 R/ u
  /* Configure GPIOA  Out mode *// p0 h1 n% [$ @! W6 V+ v& x
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_11 | GPIO_Pin_12;: ~2 s1 ?! ]" \
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;- ^: r8 `0 X" _* g4 v$ M/ R/ i3 o+ d" T
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
: ^' p& G) F4 O/ a) l! Z6 m. G  GPIO_Init(GPIOA, &GPIO_InitStructure);; k. Y4 D' N8 I1 B2 H- O, k/ N
  /* Configure GPIOB  Out mode */! m9 e2 Q  @3 m) k9 L" s
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_5 | GPIO_Pin_6;2 w% [1 K$ v0 X. @
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
9 K+ k+ g$ e& @  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- t/ e) F+ ]) x' S  GPIO_Init(GPIOB, &GPIO_InitStructure);6 V% p: T6 W- ?& I) p# K, o
  /* Configure GPIOC  Out mode */
. |7 R, P" K) E9 O$ N! V+ v8 m& x) P  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
4 t6 B3 a$ v8 u6 p0 M9 U* y4 |  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
0 l0 W* i% E* m- ^, w+ x6 n  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;" o! r1 }6 n! T4 u! b$ h! X5 {
  GPIO_Init(GPIOC, &GPIO_InitStructure);0 B" f/ O# c+ H7 c6 e& m) l
  /* Configure USART2 Rx as input floating */
% l9 X/ n- N# O& V4 X5 w8 h  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
; T- W% t1 I+ \; ?  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;. |5 W, t- r% K/ w
  GPIO_Init(GPIOA, &GPIO_InitStructure);" Q8 H4 _7 W% U! X5 o9 K
  /* Configure USART2 Tx as alternate function push-pull */
- i% ]! R0 _( T4 F) Z5 e. E  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;/ v& r( u! p' [0 ]3 }6 L
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
1 {; ~: J! ?" A  H) X5 L3 p9 J: @# _- e. K  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
' t$ j# h5 }4 J/ T/ F7 B  GPIO_Init(GPIOA, &GPIO_InitStructure);
5 V# K) y+ q' i. l5 S+ ?}
2 K3 _, }7 @$ C3 p& R; F" ]3 ^' Lint main(void)
. b! H$ Y! w( D/ d* C{
# ~0 X  k* Y0 g, }3 h. A: ^& t while(1); ?: H$ G- B$ q, a
{: `/ [* r5 h1 Y# ~" I
if(DMA_GetFlagStatus(DMA1_FLAG_TC6) == SET)) _8 v. i: h* J2 B  R1 i
    {
/ [0 C) j  \/ F" h" h! h/ _         DMA_ClearFlag(DMA1_FLAG_TC6);
- m0 ]5 u6 F+ a' f! ]( p( A. [/ P     DMA_Cmd(DMA1_Channel6, DISABLE);
" G' C9 t" g6 G( }1 b3 ^     DMA_SetCurrDataCounter(DMA1_Channel6,RxBufferSize);
/ U1 b% E% K+ c" s4 F1 ^- n. V2 X         GPIO_SetBits(GPIOC,GPIO_Pin_8);8 W' `$ G1 ?" U( u
     delay(500);, Y! j* I+ U/ j  J7 I
     GPIO_ResetBits(GPIOC,GPIO_Pin_8 );* X" ~" L3 j# _6 w
     delay(500);
9 t  e+ w6 E. s$ V   }* Z: T4 @* x$ Y8 ?
else
( W5 K; N& y9 {: }$ F" h2 k! ~0 Y {
0 r& z' l5 R5 Q: g9 w9 |GPIO_SetBits(GPIOC,GPIO_Pin_9);
6 \/ z7 O  o* M/ {/ S     delay(500);
, P; ?; M3 p9 ]7 F- x6 A6 y" B/ R" Z! g     GPIO_ResetBits(GPIOC,GPIO_Pin_9 );
2 `9 u! N7 j! f" X2 p, Z     delay(500);# A0 K% L4 y3 X) Z5 @' A( {
}3 k# w/ C' m% w: C6 c- I
}
2 \( C" V0 E; T2 l0 w}
anyway76 回答时间:2011-12-23 11:09:42

回复:STM32笔记(四)DMA、USART的演示

正在接触STM32,多谢分享
njlhp123 回答时间:2011-12-23 18:35:09

回复:STM32笔记(四)DMA、USART的演示

回复第 3 楼 于2009-01-05 04:18:28发表:
原帖由私奔于2009-01-04 14:30发表:1 ~6 \( R- l+ o6 ~2 p
  这里有个小小的例子,来演示DMA模块与系统程序并行工作。
6 R$ k7 P1 L$ A! |  用串口以低波特率发送一个10K的数据,花费近10s时间,此时按照以往方法,CPU要不断等待数据发送、送数据;或者送数据、进中断、送数据,处理起来比较消耗时间。
9 M, x1 `9 r# {6 p) `* K  使用了DMA功能以后,用户程序中只需配置好DMA,开启传输后,再也不需要操心,10K数据完成后会有标志位或中断产生,期间可以做任何想做的事,非常方便。
* v; _% b- V- n* _$ E  这个是相应的代码例子,基于STM32F103VBT6" s4 C* w8 ~% c/ r3 O7 P+ L! _9 w
& V+ v1 x% C. {5 N% w. d4 _  B
3 m3 n# T8 T: Y, l$ l3 j  H: A! ^
/******************************************************************************
+ X5 ?3 k. r: r* }" L7 S& M* 本文件实现串口发送功能(通过重构putchar函数,调用printf;或者USART_SendData()
/ F5 z( n  h( f& W, J" k" y3 l* 这里是一个用串口实现大量数据传输的例子,使用了DMA模块进行内存到USART的传输
. c$ ^& B! J; M, V8 g* 每当USART的发送缓冲区空时,USART模块产生一个DMA事件,6 n9 S, z& k4 c- f9 c- r
* 此时DMA模块响应该事件,自动从预先定义好的发送缓冲区中拿出下一个字节送给USART* L, M$ t; i1 [& ]  A3 {$ H
* 整个过程无需用户程序干预,用户只需启动DMA传输传输即可
1 i+ {6 y' ?& w9 \* {* 在仿真器调试时,可以在数据传输过程中暂停运行,此时DMA模块并没有停止* ]0 N  U0 g2 O" l" I8 P! `" X1 s) }
* 串口依然发送,表明DMA传输是一个独立的过程。) F9 j, _. Y* V- M3 d
* 同时开启接收中断,在串口中断中将数据存入缓冲区,在main主循环中处理
# \$ X( J6 t- k& w0 ^* 作者:jjldc(九九)
2 `% l( r& W2 e( t/ ^8 k( C; q. C* 代码硬件基于万利199元的EK-STM32F开发板,CPU=STM32F103VBT65 b' p) y. ^& o" f% l# _+ v' f
*******************************************************************************/; z3 d/ G0 T8 C

6 q" M/ e' w; N0 N# O( a/* Includes ------------------------------------------------------------------*/
* f/ D1 N4 M5 S) m# a4 q#include "stm32f10x_lib.h"3 g* Y. S: x, Q$ S0 d2 \" G
#include "stdio.h"
' {! u) f: z7 \; {: C6 B' G& U1 j) w- e. f- k/ k
/* Private typedef -----------------------------------------------------------*/7 k, X- k; a  h
/* Private define ------------------------------------------------------------*// d' ?6 K1 R- |& x( H0 y. e. D. A
#define USART1_DR_Base  0x40013804
' Z/ u6 n5 R. U# k  }0 \9 J4 j( n& l, z1 x9 Y/ |1 d3 R
/* Private macro -------------------------------------------------------------*/
4 u; T9 N+ X* v- a% A0 H5 W8 l3 Q* ^/* Private variables ---------------------------------------------------------*/
' A) i7 u+ L8 Z( e$ W2 L& `+ Y3 A5 l#define SENDBUFF_SIZE   10240
' [" _+ C7 A" _( jvu8 SendBuff[SENDBUFF_SIZE];0 Q6 x" a& ?* q+ P2 d8 L
vu8 RecvBuff[10];' u; G% \. s" U1 N# N1 q* T8 Z! S
vu8 recv_ptr;
+ a5 H1 I, d& I- r  u( W  `$ @- G, U- m$ w9 r1 o6 d( A/ x
/* Private function prototypes -----------------------------------------------*/! `" X0 M& v% f& G' W
void RCC_Configuration(void);
& d- q- `( {' Y6 Gvoid GPIO_Configuration(void);
7 i  G6 f4 P  i* W! Ivoid NVIC_Configuration(void);/ u& U7 ^. H) G, c0 T
void DMA_Configuration(void);: N6 {% b. Y# S9 Z4 T; G
void USART1_Configuration(void);! D# I9 b" T- W* [  Z

/ }/ Y" x  P; r' l( gint fputc(int ch, FILE *f);
6 H9 U( V7 ]; R& Dvoid Delay(void);$ L/ M* |% d" `2 Q$ F
7 g) T6 ^3 t# @& E2 J6 M5 h* b
/* Private functions ---------------------------------------------------------*/2 i. L/ L3 i* H: b
/*******************************************************************************
! T8 I: w( w# V$ `1 L4 |5 t" j* Function Name  : main
( W0 ^# j& H& S: N; ~4 h* Description    : Main program.4 M8 Q" O& o$ h; s% i5 Z1 G
* Input          : None
) i2 j8 U/ \. H& r0 v6 L4 k* Output         : None
, ~1 h% _) \  y8 I5 {1 u* Return         : None- N1 M5 H( v5 _. g& a  X
*******************************************************************************/
9 @8 l, x7 E5 Oint main(void)
0 d9 ~# f8 Z6 J9 M. v( h' ?{0 i" Y5 l6 D7 r* X  D
    u16 i;( S* p* t8 g) `1 x$ U# e
#ifdef DEBUG
& Z# o* z$ ~6 U, H    debug();) o& E: E$ @/ l" ]( T
#endif
# e* m8 ]& k+ K7 J+ x9 s5 [    recv_ptr = 0;- M' @6 ~% `7 f. [! i& Q! d7 c. q3 q5 `
    " ]: d, t" }9 V1 f& a+ W7 A
    RCC_Configuration();
& ]0 p/ |; B$ ~7 o! Y; F    GPIO_Configuration();% a7 ]9 @# w4 r* {! M7 V
    NVIC_Configuration();
5 Q( K; |8 v6 E. \    DMA_Configuration();
2 q$ N! Y* R! }/ C: `* G    USART1_Configuration();. \% U& u3 ]8 G' Y3 k( x
   
: k0 y( t! ?  e% [0 P( S    printf("\r\nSystem Start...\r\n");
4 K# j2 K0 {. k0 A9 k* [' }    printf("Initialling SendBuff... \r\n");) ^# o7 A* i3 h8 ]
    for(i=0;i    {3 k0 T3 p" T" R% a" f+ p6 D
        SendBuff = i&0xff;- N' T6 M( a9 u1 W- ~
    }
% b1 I! V& t7 F5 y) L4 t0 l2 v% ?    printf("Initial success!\r\nWaiting for transmission...\r\n");5 ~" m; C8 U, R5 r1 K! l
    //发送去数据已经准备好,按下按键即开始传输
+ J9 o1 [- K% i    while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_3));
% ]$ R# h. d6 V/ f( ]   
+ p: p! V0 e/ p. ~* V+ ^! K7 |# y7 @    printf("Start DMA transmission!\r\n");
- |2 O2 E6 P/ n) c! x: P- h$ o& S; d4 o) A    " k2 t6 _/ E2 s5 j* X/ i
    //这里是开始DMA传输前的一些准备工作,将USART1模块设置成DMA方式工作
0 N8 x' [8 R7 u1 G4 X    USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);
% c) c+ g' B3 V2 e* d7 [: R    //开始一次DMA传输!9 \  A* L" c5 c
    DMA_Cmd(DMA1_Channel4, ENABLE);! M* r0 E" }( p  v. N
   
: P. Q' N# x" H1 h    //等待DMA传输完成,此时我们来做另外一些事,点灯- m6 x/ H+ Q! C4 N: _7 J  X
    //实际应用中,传输数据期间,可以执行另外的任务
( i6 @$ n' _6 B8 m    while(DMA_GetFlagStatus(DMA1_FLAG_TC4) == RESET)
, d$ ^0 E* J4 s- R5 p- I    {# y. p( h8 {4 m
        LED_1_REV;      //LED翻转
7 D5 G. K/ V+ ]        Delay();        //浪费时间  u8 t0 J3 b& n9 V/ b, x
    }
% h( d+ F' V' X& ]! O# W# g    //DMA传输结束后,自动关闭了DMA通道,而无需手动关闭
% ^) ~" @- L. K; `* ~9 R, Z1 I5 r    //下面的语句被注释
9 o6 ]2 i1 E4 s! W5 s5 a* R' K' w; V    //DMA_Cmd(DMA1_Channel4, DISABLE);( {1 r5 t) c+ S. C  u! h6 @3 h# K
    " w  X8 ~% F" V% N
    printf("\r\nDMA transmission successful!\r\n");& `" q+ \* \. j1 B/ K* n
0 _, n3 D4 _+ I( R
    ) @; p# d! `3 p
    /* Infinite loop */0 S$ @. T7 @; \, F% a; E6 u
    while (1)* M% I( a  t- z
    {( A' M( @+ [; T) m& L) r
    }  P9 S6 c8 t+ U, R9 E/ ^( w: O3 }& |: b
}
9 I8 n1 K' v& g4 h. X' M
  O1 C+ ]# ?# B" B  `5 b/*******************************************************************************
2 a, h% s* m; M( g* D. O* Function Name  : 重定义系统putchar函数int fputc(int ch, FILE *f)
% \, _( u+ H8 W0 |* d6 e* Description    : 串口发一个字节
2 ?9 c" U7 H0 R. X$ X* Input          : int ch, FILE *f1 j" _7 A/ @. ~: j
* Output         :
7 K/ S5 A' w0 b0 L  ]6 P* E* Return         : int ch
- Y" `5 }. I+ l- l* 这个是使用printf的关键
. Y  G5 }, z% n! y8 R/ V*******************************************************************************/7 C/ m# B1 M3 J: y: k5 ?
int fputc(int ch, FILE *f)
9 q  H- t' n, i4 W# X4 J* O" |{% f  u. w% l0 l0 I4 ]  q: ]
    //USART_SendData(USART1, (u8) ch);
. |" w, T) L& p7 g7 D. p2 ~    USART1->DR = (u8) ch;
- x9 c  n) |( ~9 o2 |   
0 @; ~& p, z+ ^- d    /* Loop until the end of transmission */
1 i- [" P, H) r- }0 F    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)& ?+ Y6 f. ^7 R+ u. D4 i
    {4 `8 E- ^8 \$ d1 i0 x# R
    }
" }' l4 c) A" d! \" O
4 D  R6 S7 h8 x% r% h    return ch;0 N- `( ]6 D  v3 @
}
, h/ i9 I4 r: T6 d) G8 F' }
8 ?  a) c7 x* x3 U" E! J% `- R5 F7 S+ u/*******************************************************************************  ?3 \5 M' _  g1 |  x
* Function Name  : Delay7 U, Q; n3 ?" J2 K* k- e0 o
* Description    : 延时函数
) Q: [3 I2 d% B* ~( x* Input          : None( g1 I6 T" |: T( u7 y
* Output         : None8 j! Q0 O: {5 s' j+ Q
* Return         : None
) W  }$ ^: I8 e1 v# e5 p*******************************************************************************/
3 l' [" n( s% Q- j% ?void Delay(void)* V. N$ m. v2 L# G* D/ g
{1 J  m+ f- q7 k& l! K6 h
    u32 i;
4 r  B0 ~0 A7 {  U6 M    for(i=0;i外设  P  C/ {9 T. r0 J. L4 _9 v
    //每次传输位:8bit
( {  E, J' I! E+ i* l5 ?    //传输大小DMA_BufferSize=SENDBUFF_SIZE' g0 {* s; \7 B) h1 U' S
    //地址自增模式:外设地址不增,内存地址自增1
3 z8 E. P- J2 q7 @    //DMA模式:一次传输,非循环9 W2 r0 Z: E/ _9 z
    //优先级:中
' V# a1 T/ d8 o4 p& h! J    DMA_DeInit(DMA1_Channel4);
+ E2 C9 S1 |$ i' \    DMA_InitStructure.DMA_PeripheralBaseAddr = USART1_DR_Base;5 k* W. ^+ r% K7 J5 t
    DMA_InitStructure.DMA_MemoryBaseAddr = (u32)SendBuff;
- O& E. _9 L7 s' G. f5 W. K    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
+ B7 H: I2 d; N( r" C4 [    DMA_InitStructure.DMA_BufferSize = SENDBUFF_SIZE;$ P# \$ p  Y6 t& n' n
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;! d" r  B* V, l+ v) ]& O
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;" b$ X2 u6 H. C% e' Q
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
, T; q( @% E) j+ Y8 u& L    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;; u0 {- h4 m' t8 H  w
    DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;/ d5 c5 ]1 @! D
    DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;" Q4 q4 r, W+ w/ N
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
! b, d* V6 f7 Y3 U7 v5 S! u! l    DMA_Init(DMA1_Channel4, &DMA_InitStructure);
8 t' [% ~8 t' ^# P3 {}
 ( l3 W  f; T9 {4 Q6 I; |, H
谢谢分享
zhixiangyuhui 回答时间:2012-3-6 22:34:06

RE:STM32笔记(四)DMA、USART的演示

棒~
lxllf520-225827 回答时间:2012-3-16 20:56:10

回复:STM32笔记(四)DMA、USART的演示

在哪里下载??
你好-364167 回答时间:2012-8-16 19:55:58

回复:STM32笔记(四)DMA、USART的演示

不错呀 就是要学 这个程序呀
longzhaocy 回答时间:2012-12-19 16:45:33

回复:STM32笔记(四)DMA、USART的演示

不错,正需要,谢谢共享。。
jensenhero 回答时间:2012-12-24 15:50:32

回复:STM32笔记(四)DMA、USART的演示

不知道为什么,编译没有通过,貌似还得修改
jensenhero 回答时间:2012-12-24 15:50:35

回复:STM32笔记(四)DMA、USART的演示

不知道为什么,编译没有通过,貌似还得修改
suhetao-306309 回答时间:2013-4-9 21:10:54

回复:STM32笔记(四)DMA、USART的演示

学习了。感谢楼主的无私奉献
liaodata 回答时间:2013-9-9 19:36:31

回复:STM32笔记(四)DMA、USART的演示

 我需要参考之 写在f4上~~
Rodriguez 回答时间:2013-9-16 16:26:24

回复:STM32笔记(四)DMA、USART的演示

好同志啊,有没有F0的对应例程啊
123

所属标签

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