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

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串口可以发送,但是不能接收,请问可能会是什么问题呢?谢谢!
  ]. F3 U( `& A9 l) `#define TxBufferSize  16  v1 O- P' q) w1 ]" K( s' h% }
#define RxBufferSize  16
. H* P5 x. ^: S* ruint8_t TxBuffer[TxBufferSize] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};
7 c: Z  _$ g# D8 I  cuint8_t RxBuffer[RxBufferSize];0 \  n7 x& D( y: ~7 b
void DMA_Configuration(void): X  m& s$ @; E
{
9 w# x* z+ G* V$ F+ D" m3 T" n% | DMA_InitTypeDef DMA_InitStructure;3 l& O2 F$ l: p! c. v/ X- N; w* L8 v
DMA_DeInit(DMA1_Channel7);  
4 b  X& Y) j0 ^8 d DMA_InitStructure.DMA_PeripheralBaseAddr = 0x40004404;
8 M# {# z2 J+ k3 w DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)TxBuffer;4 E' R" z1 y: a6 ^/ z
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
( [/ K* |2 [' c# ?; u DMA_InitStructure.DMA_BufferSize = TxBufferSize;
7 z  `* i! T! y6 z& X9 u% O DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
: F9 A) w1 o. c DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;1 ]0 {- @$ L  q! K$ P
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
  P  c; f& X' d6 f3 G2 U7 s. F8 l8 h DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
- {& F" Z5 l7 e/ N2 K DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
1 J$ \! @1 J1 g; M6 _% u DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
- l+ T/ v3 Z# X9 r# K5 t) x DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
4 k2 @. B! J2 E DMA_Init(DMA1_Channel7, &DMA_InitStructure);
" b; F9 e' m: l5 `4 z& w1 W DMA_DeInit(DMA1_Channel6);  ! I! o+ G" Q. Q8 B+ l8 l, t1 [
DMA_InitStructure.DMA_PeripheralBaseAddr = 0x40004404;
( a# a. ]7 Y* @$ Q( X# m# w4 z DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)RxBuffer;% w0 f& E$ X. v: }0 @
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
" L7 ^9 c! I3 `/ J/ o8 k' U DMA_InitStructure.DMA_BufferSize = RxBufferSize;
+ n* W/ R) b+ l: c0 E+ e8 E! `# A+ ` DMA_Init(DMA1_Channel6, &DMA_InitStructure);
  e: r) W2 Q. j) [% ^  O' G1 n: n}! J7 f* ?. k# W
void USART_Configuration(void)0 L! B# s+ I8 T, ^; @" @, [
{' {8 j- q* x& C; N' b
USART_InitTypeDef USART_InitStructure;
- ]8 ]/ G% o  f7 [ USART_DeInit(USART2);5 V. T+ v( C" l7 L5 ?
USART_InitStructure.USART_BaudRate = 115200;5 R: G) t8 I& R8 X3 X
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
' {1 z; ~" C+ g! ^" v6 E USART_InitStructure.USART_StopBits = USART_StopBits_1;
+ e( P5 g- s! @) Q& ? USART_InitStructure.USART_Parity = USART_Parity_No ;
, u+ x# i! A; q. X: r, R USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
% O$ }# W; ~( N- M USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
1 ?# b1 h* `+ n: T9 L USART_Init(USART2,&USART_InitStructure);$ O9 N0 t8 g/ I* L, A3 l) n" K8 F
}) [( h( H, t5 a  t+ t6 U7 G
void GPIO_Board_Init(void)  t6 o7 X" e5 [! _) Q2 V, |5 |
{, t# j+ r# F( S, Y( T/ T0 s9 K
  GPIO_InitTypeDef GPIO_InitStructure;" F6 v9 o5 e) b: t
  /* DMA1 Periph clock enable */
+ P. L+ g" n0 F( ?3 N  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);/ `6 o  k7 z7 F: h4 w7 R
  /* GPIO Periph clock enable */! K7 }4 j$ U/ L
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO , ENABLE);
& e8 O9 o7 P6 q/ v% f( b0 z  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 , ENABLE);
+ G  b2 U; B' u8 ~' _- h+ r  /* Configure GPIOA  Out mode */% X5 E. M4 f( r5 y# [' `4 l
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_11 | GPIO_Pin_12;' Y0 H) V9 j2 Y7 X: l. w
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
# d% ^" Q( C8 R  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- D5 s/ o" s! r. H  GPIO_Init(GPIOA, &GPIO_InitStructure);
  [9 ~1 |6 X7 V" y& v$ B  /* Configure GPIOB  Out mode */0 q+ Y5 I! e3 P( ~
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_5 | GPIO_Pin_6;) J, V  U& s& J1 c/ Q6 b" O' m
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
: i9 H/ l, n$ r+ i  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;& \) c+ ^$ K; m2 I5 R! R
  GPIO_Init(GPIOB, &GPIO_InitStructure);/ F# A0 J9 \3 x: g3 T: ~7 ?: J6 Y9 y
  /* Configure GPIOC  Out mode *// c+ \$ F, E7 H
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
4 }5 z' T; G: A. ~/ J: _4 c* V  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;8 i6 F' x3 I3 t; _, r
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
& o8 A1 O/ e$ o" y  GPIO_Init(GPIOC, &GPIO_InitStructure);
* q  i" V- c  [: g1 z  /* Configure USART2 Rx as input floating */
. V9 m% ]2 G8 M: ~  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;$ Z# v8 X+ P/ g) p% Q6 h1 g
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;# @) ?! m# y0 j% n, H5 ~. x
  GPIO_Init(GPIOA, &GPIO_InitStructure);
) H4 {; i, Q9 h& A3 O  /* Configure USART2 Tx as alternate function push-pull */* e" `& t8 }6 O' E% ~4 t4 B" u5 T6 x
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;/ q6 U. t% U9 }0 n
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;, J* G' J% s0 ~; T0 h
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
8 E. Y2 j. @, V3 s6 l8 c; w" s1 U  GPIO_Init(GPIOA, &GPIO_InitStructure);
. E$ U2 I3 T: c$ O, q+ U2 ]}
% _7 B7 i: P# }2 P( O% ~int main(void)3 A5 j2 q/ p/ _; e; @0 U3 j
{
: l- ~- \2 A  V# a$ t+ r while(1)
7 O6 ]' [% j7 X1 I9 i1 k4 K+ j4 T0 B{. Z( E5 X6 X  b$ ~
if(DMA_GetFlagStatus(DMA1_FLAG_TC6) == SET)
2 K% x) I0 b7 [    {8 a0 p( ^3 n8 O& I/ q
         DMA_ClearFlag(DMA1_FLAG_TC6);6 \8 ^! C8 p8 e9 n6 E5 [
     DMA_Cmd(DMA1_Channel6, DISABLE);
2 B5 ]  g1 N3 a2 \) w9 `     DMA_SetCurrDataCounter(DMA1_Channel6,RxBufferSize);
; a" {) `+ W! Y8 A0 d         GPIO_SetBits(GPIOC,GPIO_Pin_8);8 w9 [) j; N0 a4 a; Y) V2 }* [/ k2 E  D* g
     delay(500);& X5 z2 k6 P9 l+ a$ ]' p; W
     GPIO_ResetBits(GPIOC,GPIO_Pin_8 );
- I7 ~4 C* W; k7 j     delay(500);7 Z2 g: n" h& W
   }
; ~; f. b/ h; B8 ]$ gelse
7 z3 ?8 b* x/ v( U4 b0 t, Y2 z {# V% e3 l+ F' k; C1 q
GPIO_SetBits(GPIOC,GPIO_Pin_9);, r5 w/ A# v3 j/ s
     delay(500);/ [7 I- S. b1 H, L* B0 t  M7 a, t) V
     GPIO_ResetBits(GPIOC,GPIO_Pin_9 );7 Y/ g& c& _" V$ N9 i
     delay(500);- P& E& f; w5 f' \$ m) ^
}
/ o- c& k( l. M& j}- G7 m, V' ^% p4 F6 B
}
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发表:  d+ E( ~; q' D( g
  这里有个小小的例子,来演示DMA模块与系统程序并行工作。
3 M1 d- j( _0 P1 @  用串口以低波特率发送一个10K的数据,花费近10s时间,此时按照以往方法,CPU要不断等待数据发送、送数据;或者送数据、进中断、送数据,处理起来比较消耗时间。3 ?3 ^  [" s% @/ B  b
  使用了DMA功能以后,用户程序中只需配置好DMA,开启传输后,再也不需要操心,10K数据完成后会有标志位或中断产生,期间可以做任何想做的事,非常方便。
. c# k9 e& \) R- q  这个是相应的代码例子,基于STM32F103VBT6
) [  u3 v! K. c( Z! `5 p0 y/ j- n/ _0 P1 S

/ \9 l% j5 R5 B% @/******************************************************************************
1 B, G1 _8 U" @( `& B: _- P* 本文件实现串口发送功能(通过重构putchar函数,调用printf;或者USART_SendData()
1 Y$ j; u7 p4 s& a6 ^+ O* 这里是一个用串口实现大量数据传输的例子,使用了DMA模块进行内存到USART的传输$ r" k. b* h/ q
* 每当USART的发送缓冲区空时,USART模块产生一个DMA事件,
! }' j6 `" q- ^' P# [* 此时DMA模块响应该事件,自动从预先定义好的发送缓冲区中拿出下一个字节送给USART$ G. v) a( C: g$ n9 G$ e
* 整个过程无需用户程序干预,用户只需启动DMA传输传输即可7 o: _( `2 T4 r5 R; T. x( i
* 在仿真器调试时,可以在数据传输过程中暂停运行,此时DMA模块并没有停止! L  u0 g9 A* ?* Y
* 串口依然发送,表明DMA传输是一个独立的过程。6 N0 M+ |$ E9 Y2 Y7 X
* 同时开启接收中断,在串口中断中将数据存入缓冲区,在main主循环中处理
) N4 @- m' i1 Z8 I/ q1 O9 w0 c* 作者:jjldc(九九)* |" p5 A, o8 Z0 t8 p+ r7 g
* 代码硬件基于万利199元的EK-STM32F开发板,CPU=STM32F103VBT60 o  F/ C- `2 G- e8 i  l
*******************************************************************************/( |) a6 i8 o' W1 Q" W; G* s9 X6 z

% C1 S  u3 d+ G  h9 o/* Includes ------------------------------------------------------------------*/1 S) ^  e/ O/ a' }1 b
#include "stm32f10x_lib.h"+ b  s' m" g1 [7 H" L
#include "stdio.h"! ~9 ^/ G( L( f8 G& t( S
4 m. g" H: J! W0 Q
/* Private typedef -----------------------------------------------------------*/9 B+ J, l0 L& M7 d+ o/ m. w
/* Private define ------------------------------------------------------------*/
! b9 a# R  S. g! M7 X  E4 ?" _. A#define USART1_DR_Base  0x40013804, x2 c: c- i& L( k# B

- f  N  ^, c/ B! O6 t/* Private macro -------------------------------------------------------------*/
' C$ l7 G% d  P' _8 c$ i/* Private variables ---------------------------------------------------------*/( S" ?. h3 _  I0 `5 J) N' D- K( T+ @
#define SENDBUFF_SIZE   10240( a' n+ E' X2 t7 ~0 v; \
vu8 SendBuff[SENDBUFF_SIZE];
4 |4 j. Y+ s/ N) d3 f6 H) Svu8 RecvBuff[10];2 C8 }6 v9 V0 I6 G) m& Q  y3 x
vu8 recv_ptr;- x) u3 X& S* A

! A2 H9 C7 t; ^/* Private function prototypes -----------------------------------------------*/! S* Z4 Y" j, C# m/ f8 l
void RCC_Configuration(void);
' @- z7 ?9 R2 Q) d; X7 ]1 s. v# svoid GPIO_Configuration(void);
% k! Y3 N+ [* L0 ~) Svoid NVIC_Configuration(void);
: O! X! t2 L" F8 {) ^" L- F' cvoid DMA_Configuration(void);6 Q( N/ E5 i% W
void USART1_Configuration(void);* B& r: M: W7 ^& `: ^$ `) {

# C2 f5 J" j* c! |% G( vint fputc(int ch, FILE *f);
2 r* y: B2 Y) X  D5 E  q0 Zvoid Delay(void);) }( g) f) M% m1 M
6 W* L, d$ B( l" ~/ R
/* Private functions ---------------------------------------------------------*/
+ x5 D% ]2 m# l. H0 S' x1 q/*******************************************************************************
( I. ~& i' k: }3 m& }+ i# h* Function Name  : main
; Q* ?, Z; y0 I! j* Description    : Main program./ k2 V% ]+ u$ h* ~: D1 G' g) w. v  X. R0 R
* Input          : None# B( v9 O0 \2 u
* Output         : None
% ~9 W) Y. s" d; }2 H7 v* Return         : None
8 Y% e2 i. u4 g$ c*******************************************************************************/
. {0 [9 Q3 x7 C1 Sint main(void)
# |2 k8 V* N0 o& V" _! p{
3 P- w7 O  P0 u    u16 i;. k4 Z" t- N4 \3 t
#ifdef DEBUG: F5 x4 n+ l2 i1 U
    debug();
3 ^; O( q7 u( y3 g! [#endif
" l# |+ O* W0 X- j% B8 Y    recv_ptr = 0;2 L6 t" r% A( z' ^# n8 s
   
$ T1 m# D! L1 v$ U% i4 N4 z    RCC_Configuration();0 C9 o4 r. K/ e3 c; c5 {
    GPIO_Configuration();( ?2 _' o( d" F& H, e
    NVIC_Configuration();) j( n$ L$ A! x1 c( M$ Z& m
    DMA_Configuration();
5 F; P# t1 X* \. L3 A6 a    USART1_Configuration();1 W- {  x/ }2 {! Q3 Y
    ; ~, \/ x3 p& ]
    printf("\r\nSystem Start...\r\n");
! E4 k1 ^4 y* X, j) E) r    printf("Initialling SendBuff... \r\n");
; n" a- O+ ~1 q  Q' c0 Y    for(i=0;i    {
% }* I  a6 Y/ o! h  }% E        SendBuff = i&0xff;: M# X  t4 j" D' T5 G. b; \
    }6 B% I, J$ E, c( G9 b( N
    printf("Initial success!\r\nWaiting for transmission...\r\n");
" i4 {0 A% G! K    //发送去数据已经准备好,按下按键即开始传输
# J, n# c3 ~' U    while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_3));9 m9 q3 z  ^: e  F
    % k& V9 L* u4 u* P5 y0 L9 o
    printf("Start DMA transmission!\r\n");
3 C1 N! h0 N- f' A: j   
* w2 X% W4 C" g7 S# T    //这里是开始DMA传输前的一些准备工作,将USART1模块设置成DMA方式工作5 l6 }3 O% N$ g0 J' F
    USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);
% h) y$ |6 V: B5 X    //开始一次DMA传输!
% r, ~! ^/ Z/ I; T8 L/ c    DMA_Cmd(DMA1_Channel4, ENABLE);
  k* A; B1 L; Z   
# J. x) N! z( q4 K* ?, ^) t( _    //等待DMA传输完成,此时我们来做另外一些事,点灯1 B+ U- _" `2 l# |
    //实际应用中,传输数据期间,可以执行另外的任务! J7 D) f$ K2 W
    while(DMA_GetFlagStatus(DMA1_FLAG_TC4) == RESET)
/ z+ g: X$ s3 E    {
, R' M2 f3 y* |        LED_1_REV;      //LED翻转/ [& L0 I) p. c
        Delay();        //浪费时间
# L4 \: |3 R) Y- f8 X    }
# `  s* v. m/ s$ }9 I- \    //DMA传输结束后,自动关闭了DMA通道,而无需手动关闭. g+ T7 N, q9 Z- S/ m: m
    //下面的语句被注释0 o8 J; v2 }8 x) u0 p' f
    //DMA_Cmd(DMA1_Channel4, DISABLE);
2 W8 q: n* u) }    2 U. [  I! M( h- f" u, N$ C0 {0 T
    printf("\r\nDMA transmission successful!\r\n");
( p$ J$ U9 I6 e2 o* _) G2 N& j2 p* [( n/ E0 ?  g: h
   
; G0 X8 t- t' `    /* Infinite loop */+ r+ J/ `8 g$ x. V
    while (1)
- Q  j' z0 \, M6 w1 a' M    {
% L8 G7 z/ x. V' Z/ e9 i; |    }5 `: R4 E% ?' U( a
}. t  C! r% f0 l" Z

9 E) Z: `( L+ K0 t) e8 `/*******************************************************************************2 O. d- ^2 M8 E( p6 v/ {) a
* Function Name  : 重定义系统putchar函数int fputc(int ch, FILE *f)3 ]6 x! b- k* \' f  p. j
* Description    : 串口发一个字节* G* s  O% Z0 f5 W5 ^2 H& q
* Input          : int ch, FILE *f2 Z" E! T8 M' y8 |; D2 j4 p
* Output         :
, R' Y. U: L7 ~( d/ x* A5 H( h* Return         : int ch
2 H! d; H% F, r+ P4 W* 这个是使用printf的关键
3 A2 A$ V8 b0 Z*******************************************************************************/
/ @/ U4 J. c7 y6 G6 vint fputc(int ch, FILE *f)
% a) p) T6 ?  g4 f4 Y* N{3 k6 c! J  T" Z8 A8 o3 V; L+ r
    //USART_SendData(USART1, (u8) ch);
) h9 R$ u7 U3 e3 t    USART1->DR = (u8) ch;
1 T  D9 |0 m6 }8 T/ f) {2 F    ; r8 M. i) H4 ^% A/ I
    /* Loop until the end of transmission */( V: b7 M# J# w$ u! v: M6 d
    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
% ]  C# I4 M. }6 X    {; H0 W9 v7 n* l" ?: J
    }
: y* d+ {9 g2 m( u* @4 A) w3 t1 p
% Z0 w; C1 `/ q6 v2 O* q    return ch;4 x. n: x( O1 c$ K: E* E' M
}% y; J/ W5 f7 Y4 U2 E
8 j" k4 k) L1 ]8 }' ]
/*******************************************************************************
: [8 _- {, ]% d+ S2 r0 ^* Function Name  : Delay. N8 v( d0 ^1 J' A9 I
* Description    : 延时函数
7 i$ ?6 n) m$ o6 U& W, P* _, o* Input          : None
4 R+ b6 F7 C9 _& u1 j7 H& |" N+ l* Output         : None
2 f3 N$ T6 f# ^9 V* Return         : None8 d; P+ f! N- w: T) }" L+ I
*******************************************************************************/( L5 s( y$ x7 G8 i
void Delay(void)
8 v7 Z* }8 @% c5 u- U7 @% b" }: [{' A# ?0 x9 r; ~
    u32 i;
8 T' o: v( G: \9 E4 R( _  d% {' R# ^    for(i=0;i外设
2 @% g# o- y( J: d1 \    //每次传输位:8bit
8 z( [" b* ]+ o9 y$ z; Z& F    //传输大小DMA_BufferSize=SENDBUFF_SIZE
" S; f) G+ C) D3 d! R: Q    //地址自增模式:外设地址不增,内存地址自增13 F! b5 i0 d# i4 K. \, I. n
    //DMA模式:一次传输,非循环
* W5 v; z" ^8 y7 Y7 B    //优先级:中
4 A. v# ]5 w' L1 T" `; z    DMA_DeInit(DMA1_Channel4);$ R6 |/ v5 \1 @( }% J9 O# E( v
    DMA_InitStructure.DMA_PeripheralBaseAddr = USART1_DR_Base;
5 X) ?! A8 h$ p  ~$ |; _    DMA_InitStructure.DMA_MemoryBaseAddr = (u32)SendBuff;
  c6 I6 J0 d6 o+ l8 V! @7 O    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
  U1 U1 w6 W9 f6 r' v3 @# @0 h7 E    DMA_InitStructure.DMA_BufferSize = SENDBUFF_SIZE;
+ b3 D% Y# X' J$ p5 p% H4 ~    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;- P& Z3 K' Z9 f, Y% H% ]* Q2 Z
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;; P5 x7 H9 N; F, f
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
9 _& A, E- Z/ ^/ `    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
6 h, _4 d. s; F, m- W    DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;7 ]' s: ~3 g3 [, T5 N
    DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;7 E2 n6 ?+ |/ V8 C4 _8 z
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;% s( e, Q. t- {; s% w2 W
    DMA_Init(DMA1_Channel4, &DMA_InitStructure);
0 r" ]. X9 U/ C}
 % e2 N  l( X" m. p* a7 W
谢谢分享
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 手机版