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

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串口可以发送,但是不能接收,请问可能会是什么问题呢?谢谢!7 b% L1 S3 [/ C& p1 G& f
#define TxBufferSize  16
' T& d% C3 G- ]% |; U$ C#define RxBufferSize  16
7 H: k0 G4 B* x; |uint8_t TxBuffer[TxBufferSize] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};7 k' e' k  n6 r5 x
uint8_t RxBuffer[RxBufferSize];9 w  d/ i( B9 j# m3 ?
void DMA_Configuration(void)
2 M8 v* m0 H; p1 H- G+ t* \0 p$ I* q{
1 @0 \. V2 f! C# w DMA_InitTypeDef DMA_InitStructure;; p4 @3 e  Z% n) O* {5 |
DMA_DeInit(DMA1_Channel7);  
% W* `5 L  M& Z/ e DMA_InitStructure.DMA_PeripheralBaseAddr = 0x40004404;
' F: p$ t+ x) q- E DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)TxBuffer;* R; S$ T) ^1 M/ X, p% u, T
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;8 I4 s3 E: K; c* `) p3 O
DMA_InitStructure.DMA_BufferSize = TxBufferSize;
4 N. C( [) J, H DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;+ w7 m3 P* x/ C4 J, ^; {7 I1 K
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;7 u5 s( L8 Y* x8 L& N! S" ~* _# @2 J
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
1 u7 D9 D; @# T, n DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
9 E7 r1 v. D+ l8 ]6 R( g DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
& h- H0 B' Q# s* x4 V DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
' w* r/ y5 Y' |. x. A0 j DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;: V& q! v! E/ n5 M
DMA_Init(DMA1_Channel7, &DMA_InitStructure);
% C1 M2 E, _1 o# w+ K  l* g DMA_DeInit(DMA1_Channel6);  
- V) Q: ]3 ~8 k( S8 r- F+ y DMA_InitStructure.DMA_PeripheralBaseAddr = 0x40004404;
, @" Z3 N' `# v4 ^* s DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)RxBuffer;
: |) O7 r. ?+ ~7 v! S; F2 w DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
" ?+ }: X* K# U) l! Z& y DMA_InitStructure.DMA_BufferSize = RxBufferSize;
6 j9 k9 ^/ z; H0 P1 ~ DMA_Init(DMA1_Channel6, &DMA_InitStructure);
. Z. d/ Y3 T! }! O8 g- z8 w}
$ d& y3 ]/ ^$ H  lvoid USART_Configuration(void)4 ?$ d% U- _8 i2 ^, [7 \& c. Y
{( n* m  V' X3 j$ k& L4 ], ^
USART_InitTypeDef USART_InitStructure;$ r, ?+ O0 G: _' _( H7 D& r* K
USART_DeInit(USART2);
/ p3 f8 K8 h7 q1 J USART_InitStructure.USART_BaudRate = 115200;7 W& ~6 R5 b$ }4 ]
USART_InitStructure.USART_WordLength = USART_WordLength_8b;! h1 a  D" t, V9 e0 l9 y& k
USART_InitStructure.USART_StopBits = USART_StopBits_1;
. D/ N1 C, A6 s& G6 p/ N" p USART_InitStructure.USART_Parity = USART_Parity_No ;
4 L6 |$ }% h9 w% Y USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;' C) ^6 q8 G' o9 m! [8 X
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
0 y0 j) w. Q, C- _- t# ~' C USART_Init(USART2,&USART_InitStructure);
2 _! K4 v' K9 ~8 v* ^  R# j}/ H$ {( P4 y4 j* ^; b
void GPIO_Board_Init(void)
* w1 j) D5 p' h# n$ ~  ]! p( k& c{* {' S! O  o4 D& m; d- k* E
  GPIO_InitTypeDef GPIO_InitStructure;
6 i$ P, ^. T" _' [  /* DMA1 Periph clock enable */
: D5 V+ W9 E7 A& L9 `, N1 B+ G9 r  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
0 @  O0 f6 j  O3 Z  /* GPIO Periph clock enable */
6 m( P8 T9 @9 r6 r2 J  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO , ENABLE);
; C1 W1 K; T6 r: @) w" X% J) l  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 , ENABLE);* G* ?7 g, l( M1 J. r( F0 ?) @
  /* Configure GPIOA  Out mode */" R, O  u2 N2 f; z6 S/ e8 h( ~8 N
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_11 | GPIO_Pin_12;- P3 |" I# d$ L0 s. v
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- v( {  h! R; W$ j0 K# t0 x1 |  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
( O# _0 _; }) H1 N: h0 O/ _  GPIO_Init(GPIOA, &GPIO_InitStructure);
, O3 `: m' V" Z0 b  /* Configure GPIOB  Out mode */
7 P5 @  r8 g! K/ _" z7 D  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_5 | GPIO_Pin_6;
% L: A/ ?  O6 V5 x  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
8 T4 O" H& \6 y/ S$ `7 r) n  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
$ s8 @! f) Z8 {1 s. y. L$ ~% Y  GPIO_Init(GPIOB, &GPIO_InitStructure);0 Z% ?* I7 P' z, W+ R1 z! M! ^
  /* Configure GPIOC  Out mode */4 m% H/ I4 j( [
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;3 ^' }- Y3 h# m) u' T
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
, g' @8 E& Z4 ^5 F  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;; U" L) p' I  `9 Z
  GPIO_Init(GPIOC, &GPIO_InitStructure);
3 W+ V# A: t* X8 M' F  /* Configure USART2 Rx as input floating */
+ {0 V, G- _* G9 w; h  H1 Z: Z  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
1 l9 Y7 f  g& ]8 h! o1 U8 R  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
9 Z4 h% O" P* I& Q4 O4 S  GPIO_Init(GPIOA, &GPIO_InitStructure);
, w5 r7 r" m' |  /* Configure USART2 Tx as alternate function push-pull */
9 E, r5 {) T0 M+ k/ D  u' R  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
% {. b5 Z6 w% r: _0 _$ ~5 f5 {, f5 U  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
, S* F4 C& p& e0 q/ M  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
2 k0 _6 M* a* |  j4 r; P( J5 ?  GPIO_Init(GPIOA, &GPIO_InitStructure);
" X5 K; z( j0 ~+ \0 ~7 g}
7 I6 G; h4 s2 l* Fint main(void)% E% l1 n5 S, m, E7 v
{
. ^2 n! ^1 ~+ P+ g/ e) Y: g while(1); J* l! \3 I  ?9 q9 @9 p6 S- |
{- O1 C; F4 {; P3 N2 [+ u- N
if(DMA_GetFlagStatus(DMA1_FLAG_TC6) == SET)$ k7 Y5 m  K5 N* Q5 W- l) k: D
    {& k8 A# S6 Q, U! Q- X# L
         DMA_ClearFlag(DMA1_FLAG_TC6);
3 {% t: E3 w8 f; p) Z1 }( \     DMA_Cmd(DMA1_Channel6, DISABLE);
7 N9 i; l6 _  ]% Z1 H6 |     DMA_SetCurrDataCounter(DMA1_Channel6,RxBufferSize);
# {: _- A  v/ Q9 ]. v         GPIO_SetBits(GPIOC,GPIO_Pin_8);
7 V- b. O* J9 ?  z' [     delay(500);
/ g' s) B9 F# C) p+ U     GPIO_ResetBits(GPIOC,GPIO_Pin_8 );
2 |% [' x% d" v. J7 N* n) }7 j     delay(500);
" Y+ {- M! e) \* p8 Q! Q   }
% Y: N7 I# @4 \# M+ R/ _else+ q" u) v8 E" }1 ~8 ?, H! p' `
{% m" ]4 v2 b& O+ {
GPIO_SetBits(GPIOC,GPIO_Pin_9);; M) W& [$ O6 R3 W! L) m2 m
     delay(500);5 {; x3 ^. y' C
     GPIO_ResetBits(GPIOC,GPIO_Pin_9 );
- U. U8 }. W% w; N- f3 H- k     delay(500);, g, c( o& o. i- I( N
}
5 w( o  O) T" Z& w}8 A0 N" Y2 z- O$ K7 G* F
}
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发表:
0 ~" B, C/ }5 G: j2 j  这里有个小小的例子,来演示DMA模块与系统程序并行工作。' ^8 Z: ?/ I5 {8 n& ~/ N1 k
  用串口以低波特率发送一个10K的数据,花费近10s时间,此时按照以往方法,CPU要不断等待数据发送、送数据;或者送数据、进中断、送数据,处理起来比较消耗时间。
0 l( c- ]& O) T* m& q9 O' y# z  使用了DMA功能以后,用户程序中只需配置好DMA,开启传输后,再也不需要操心,10K数据完成后会有标志位或中断产生,期间可以做任何想做的事,非常方便。
1 p# y' n& K' e  X8 Q) B* C  这个是相应的代码例子,基于STM32F103VBT6+ M/ ~7 r$ U, C$ ^8 Z* j) V5 F

1 D+ r" u$ J0 l5 \! f1 v$ l6 i3 @9 @6 m' d
/******************************************************************************
, Y* P4 `; }: x* g# m7 ~" Z* 本文件实现串口发送功能(通过重构putchar函数,调用printf;或者USART_SendData()
5 l$ P$ j( x. Z, O0 M" L* 这里是一个用串口实现大量数据传输的例子,使用了DMA模块进行内存到USART的传输% S6 Q1 x( {6 `. v- C8 V. v
* 每当USART的发送缓冲区空时,USART模块产生一个DMA事件,
7 k$ w- A9 Z8 O$ i! \# V* 此时DMA模块响应该事件,自动从预先定义好的发送缓冲区中拿出下一个字节送给USART/ \! B" f( N6 m4 G* s" R/ @+ d$ v
* 整个过程无需用户程序干预,用户只需启动DMA传输传输即可
+ ]) U5 @& U  X+ y" l) \* 在仿真器调试时,可以在数据传输过程中暂停运行,此时DMA模块并没有停止" t+ w8 S. j) `! }7 H- _% y; Y% \
* 串口依然发送,表明DMA传输是一个独立的过程。
; g( E8 }' o5 c+ u5 I! X6 Z! N* 同时开启接收中断,在串口中断中将数据存入缓冲区,在main主循环中处理
. q3 ?2 y  F8 g/ i7 {& `  F* 作者:jjldc(九九)0 A/ u  d$ `. j: |5 N- W% G
* 代码硬件基于万利199元的EK-STM32F开发板,CPU=STM32F103VBT67 N/ O" w' l/ B/ b. P
*******************************************************************************/
, w. F9 w+ F7 u2 G9 I: q  K: C& S. Z+ ?
/* Includes ------------------------------------------------------------------*/
5 c" y/ R+ K% i4 ~9 t( U% p' U" x#include "stm32f10x_lib.h"; R0 a+ Y7 D: z7 e- @$ s3 R
#include "stdio.h"
! O2 h; U) a, D0 Y! G+ f6 T8 B
3 r1 Q6 D- f9 f; s& P8 e! q4 f$ H/* Private typedef -----------------------------------------------------------*/2 @5 P/ s: N- m9 o# |
/* Private define ------------------------------------------------------------*/
4 O. V- J! L1 f2 [. o( O#define USART1_DR_Base  0x40013804
/ A* ?6 v6 o! h
" G- e5 W; E' Q0 b/* Private macro -------------------------------------------------------------*/
* N2 K1 x* y5 _% x: [! B! s' U6 F& b/* Private variables ---------------------------------------------------------*/
( L- E% b% `6 I/ e#define SENDBUFF_SIZE   10240
6 r+ U* }% M! e$ R, |vu8 SendBuff[SENDBUFF_SIZE];6 i# e3 f& ~+ t; `& |! r
vu8 RecvBuff[10];8 n( m) D  G. N6 m4 v$ a$ L
vu8 recv_ptr;
* k; J7 Y3 Z8 C. ]
- N* J5 p" A% E/* Private function prototypes -----------------------------------------------*/
; l/ o- d4 ?: `3 v8 dvoid RCC_Configuration(void);
6 B6 ?" s8 G0 H, B$ Y; Mvoid GPIO_Configuration(void);- f4 L$ l* K5 ^
void NVIC_Configuration(void);1 l7 U3 T5 n4 a3 `5 H
void DMA_Configuration(void);$ |, b% Y2 b. {+ \- a3 u
void USART1_Configuration(void);
0 |2 z- x" g# e2 i2 }# h6 N& f
int fputc(int ch, FILE *f);
2 }( c5 T% c* A7 W* ^5 lvoid Delay(void);
* q+ A9 e, i+ U4 [5 J9 z" S7 w1 O: T
/* Private functions ---------------------------------------------------------*/
* _0 g  T& e5 t; W( a/*******************************************************************************- k: j, _, Q1 L: V
* Function Name  : main
  }# x" A4 }( O' A( _# Y( P* Description    : Main program.+ o2 s3 e4 U( V
* Input          : None9 e0 d. K8 d# @! h5 h
* Output         : None3 F" v( G1 |1 C/ p2 p0 [" ?
* Return         : None. [. E( A" R4 Z7 `( \* ^
*******************************************************************************/
4 h. L3 c3 ^# U* C8 H2 i  d9 Qint main(void)
3 h. [% v$ q  ^  u0 x{
& p" c2 r$ P3 c    u16 i;! i  a  p& I. x9 v# k; F2 L
#ifdef DEBUG
4 ?) s3 P6 D+ d' B+ |) S    debug();2 O4 M/ N# \" ^
#endif
; V4 X6 `* ^/ l( E0 o5 y  J    recv_ptr = 0;
$ o) h4 m) a- ^   
  {/ K+ Z) A/ n: @$ P, p    RCC_Configuration();
6 I2 ]% ~0 H* T: O" N- }8 r* d6 L    GPIO_Configuration();
7 x; V) ?5 ~/ E    NVIC_Configuration();
0 O9 f" e$ R( x9 N9 C0 W5 l    DMA_Configuration();- Z8 q3 ~9 }' U1 \4 {' i
    USART1_Configuration();" b+ M7 y1 X$ J' m6 T0 [8 s1 Y
   
+ j, i7 z5 |3 F3 \" F% d* C    printf("\r\nSystem Start...\r\n");$ a. t7 ~. q! [! U' o: }
    printf("Initialling SendBuff... \r\n");
- G3 v3 ~9 t9 Z9 _% N/ o) e8 T    for(i=0;i    {% }* b  q. t0 A3 v3 S
        SendBuff = i&0xff;
& B. t( y; j6 ^! V8 S5 \7 D/ @, w    }; U. ^1 J9 s2 F$ C5 ?$ B2 \' F
    printf("Initial success!\r\nWaiting for transmission...\r\n");' ^% G  T- Y( b, {
    //发送去数据已经准备好,按下按键即开始传输
3 i+ U3 w# Z' D* q. F  s, b" V# y    while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_3));  i3 ?. ?3 b/ s  l/ u5 ?, }- e
    / F4 D% I( d, ]6 ^+ k
    printf("Start DMA transmission!\r\n");
3 p. t" R" }  k( t! G* K' R8 ?    2 f; V% a. P* q1 N1 o4 H9 ?
    //这里是开始DMA传输前的一些准备工作,将USART1模块设置成DMA方式工作; Q/ Y, \/ t* q$ y
    USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);
/ z. k- o8 M) o  ]6 q( W* H1 Z    //开始一次DMA传输!$ N3 q3 S( h+ Z1 ]0 B" [4 f
    DMA_Cmd(DMA1_Channel4, ENABLE);+ v  O! g9 b) ^
    - H" _2 z/ z6 R- A; E
    //等待DMA传输完成,此时我们来做另外一些事,点灯8 ?% n6 B. |5 ?/ t
    //实际应用中,传输数据期间,可以执行另外的任务
  X. A% C% w5 g$ U    while(DMA_GetFlagStatus(DMA1_FLAG_TC4) == RESET)! G( U& e. Q3 X0 Y
    {" R8 v* P6 H, C. E
        LED_1_REV;      //LED翻转
8 g1 E. ^$ S; D; E        Delay();        //浪费时间
! B: J- F2 |& r5 O8 I    }
# f1 U: x* L8 L7 N# i& @: t; [    //DMA传输结束后,自动关闭了DMA通道,而无需手动关闭
7 l: X( R1 m) W+ Y# H0 d9 _; q2 ^    //下面的语句被注释
3 l" p+ d6 ]5 e& s' ~5 S    //DMA_Cmd(DMA1_Channel4, DISABLE);
* P' v3 |# |4 }3 v   
+ y1 [* B5 k- u- c9 u% w, V5 j    printf("\r\nDMA transmission successful!\r\n");
  a1 i4 h' q) B$ q1 Y
; ^- u" x; v3 u" F7 _6 S   
  C9 Z  q- [' x' o7 t    /* Infinite loop */  k6 D4 J/ l" a$ Q
    while (1)0 x  l8 P- s7 a- `& X9 y
    {" X  a/ ]/ D! r7 K
    }
& |3 \4 B3 `8 q}! t( V4 J9 R0 @, U% g2 V9 @

3 |6 d1 B7 V; f! w# y/*******************************************************************************
( K! f  s2 M) m* Function Name  : 重定义系统putchar函数int fputc(int ch, FILE *f)% m- E- b0 J/ s, [5 g6 W; p* O
* Description    : 串口发一个字节
0 i( v/ ~$ D2 k8 s5 _" ]/ e* Input          : int ch, FILE *f. O1 P) \, _& J7 i) e
* Output         : 3 {) m' P: B8 _  ?- Q$ N
* Return         : int ch
4 @9 P- }) `& k* 这个是使用printf的关键
& V7 Y  w% y" W; h( Q! ~* ]*******************************************************************************// q4 g9 ]  l% x# Y1 ?! S" q7 b
int fputc(int ch, FILE *f)
: ?* R; F8 Z2 h{
8 w# @2 s) C$ X3 V* \    //USART_SendData(USART1, (u8) ch);
" G8 }' B" P8 R, e    USART1->DR = (u8) ch;- [# I$ ^3 N3 J9 m* N. q& c/ I
   
4 B6 u/ B6 R7 ~$ B    /* Loop until the end of transmission */
- s5 Z' S- O. c5 u& \; f! `    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
7 N, V3 p' y0 e( v3 T1 \. z) N  ]    {' @; V, L( g7 T3 a7 E5 s0 j+ L
    }! @. Y$ m# M. p5 n7 c. X/ u
+ V0 o, K2 u2 c9 J
    return ch;
+ s& d9 p; ?. {, |& ^) T$ l}# e1 M8 v$ u2 T
/ k( K! U# a& X, \! v# [4 ^
/*******************************************************************************
+ l5 H$ c7 E# a. i  E2 x* Function Name  : Delay4 T5 U/ U7 G: A$ c2 ?8 J
* Description    : 延时函数
+ U: e# ?, g! s- M* Input          : None
2 K% G8 b7 R! Q# L* Output         : None
9 t) D/ Q% w/ e9 s4 o; c& ~5 _0 U* Return         : None
$ L5 O+ t+ N3 E0 C*******************************************************************************/6 p6 w! d( `4 ?: t9 f! U
void Delay(void)+ q# g, l& o' U
{
. ]) v$ F* J: S" D    u32 i;
5 e( I2 x2 Q" ?% r    for(i=0;i外设
4 {% b! D5 [7 ?! Y. {- R    //每次传输位:8bit
, n8 Q. h- f/ n( n- e4 u    //传输大小DMA_BufferSize=SENDBUFF_SIZE
0 [, Z# u/ o' w( B' j  e3 r& ]: C    //地址自增模式:外设地址不增,内存地址自增17 f. P- H5 X6 e7 T
    //DMA模式:一次传输,非循环
8 c9 R+ `7 j; k8 W* s    //优先级:中
# Y' ~6 L7 t9 q, H0 Q% u% T    DMA_DeInit(DMA1_Channel4);
- h5 E4 m5 ?: |  W( a  Z* V    DMA_InitStructure.DMA_PeripheralBaseAddr = USART1_DR_Base;
) _/ L# s) j; j, [+ N% p" y    DMA_InitStructure.DMA_MemoryBaseAddr = (u32)SendBuff;, B; J1 i1 a! Z) f
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;% `) m& P, z+ b0 `3 s
    DMA_InitStructure.DMA_BufferSize = SENDBUFF_SIZE;7 K" A& ]/ D3 o
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
$ r8 ~( \' \8 _5 |4 F    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
3 X7 C7 X5 `, z    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
4 s: Q1 }# O1 }" g- q: L( q. k    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;7 u3 W5 X: `* g4 a6 x
    DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
) x1 c( p  O7 {8 ?& \  l    DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;
. ?7 l4 G! Q+ P' P$ K, a% a    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;) i( r( R, |" O1 O
    DMA_Init(DMA1_Channel4, &DMA_InitStructure);
2 V/ ?! H! W* Y, s1 `5 b}
 ( R& n; _) x% i/ M2 f7 b
谢谢分享
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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版