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

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串口可以发送,但是不能接收,请问可能会是什么问题呢?谢谢!
) o# U" a8 c! d#define TxBufferSize  16
) w; `, n+ u, q, ~#define RxBufferSize  16
3 {% x+ s; b+ Huint8_t TxBuffer[TxBufferSize] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};; h( E# x, ~* C8 w0 R: K
uint8_t RxBuffer[RxBufferSize];
9 x7 j4 D* x2 H" h; kvoid DMA_Configuration(void)
: j; W: m5 ~$ q( D5 M" J3 n; Z# }{
$ L, V  l- P0 T' f) I6 S8 F' i DMA_InitTypeDef DMA_InitStructure;
' x2 t" I- J# t: }; Q: B+ b$ X" @ DMA_DeInit(DMA1_Channel7);  ; c4 j3 n9 k; C$ k, j
DMA_InitStructure.DMA_PeripheralBaseAddr = 0x40004404;
. }, f5 O: S/ Q( y0 B; ] DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)TxBuffer;- `8 h& X! Q( h/ ^
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
0 n8 Q* S* S2 @$ P! e) c DMA_InitStructure.DMA_BufferSize = TxBufferSize;
6 X  C8 t4 q7 \5 q DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;$ k. V0 p: f$ U& k" a& j
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;$ ]+ P; k1 a, V2 J7 W8 H9 A
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;" V4 Y& `' _3 m4 r
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
+ L7 b% L2 a" P- B6 V DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
% b" N  r9 I( }# |8 i DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
" J: X4 A! T$ P& r4 p% v DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
& t- _7 V7 g# j# _ DMA_Init(DMA1_Channel7, &DMA_InitStructure);
% l" h5 G: h" H, s- v  y# ]" l DMA_DeInit(DMA1_Channel6);  
4 m6 f" k% o) W) i4 W7 n DMA_InitStructure.DMA_PeripheralBaseAddr = 0x40004404;
8 J; G+ |- R5 E7 ] DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)RxBuffer;
8 W5 k7 c7 z6 S/ |: Z" _, ^5 k DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
$ ^6 n# R3 @( d) F DMA_InitStructure.DMA_BufferSize = RxBufferSize;
, [, A* D, R$ c  M' P. b DMA_Init(DMA1_Channel6, &DMA_InitStructure);
4 F3 I: Q7 V7 K* J}
) d) r5 ]- x) fvoid USART_Configuration(void)! |4 ?- B! {% {
{  W: Q6 Z7 q8 [, B- H' T
USART_InitTypeDef USART_InitStructure;
# j! t9 V6 U! |0 h) g USART_DeInit(USART2);9 e8 g. S0 F5 q4 T0 g
USART_InitStructure.USART_BaudRate = 115200;
; l2 o! W3 @" J! h6 K" u! C/ @ USART_InitStructure.USART_WordLength = USART_WordLength_8b;( M! Y* b: T* f3 Q" d) v
USART_InitStructure.USART_StopBits = USART_StopBits_1;
2 _) X8 v0 G+ d7 L7 t" Y2 ` USART_InitStructure.USART_Parity = USART_Parity_No ;
! y! u( m, f+ S USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
* G! K$ H. h* |. b" ` USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;6 ]) S$ ]3 P* b. L' S; n/ @3 `
USART_Init(USART2,&USART_InitStructure);
( ^4 I# `# a1 F, n( d2 y}7 ^$ u, ~3 H' {) \& V. |& }0 x
void GPIO_Board_Init(void)
+ G; `! c8 K& D{
/ }3 N9 g( \9 b2 _  GPIO_InitTypeDef GPIO_InitStructure;7 s" _3 m) \6 N, Z+ {3 `
  /* DMA1 Periph clock enable */
; ]6 e4 h$ D* k6 ^  v$ s  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
2 f2 V9 q' o8 \! y* q  /* GPIO Periph clock enable */6 b' x: z% r' t6 ~5 w
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO , ENABLE);
. [* c( ]3 A+ i  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 , ENABLE);9 O: u! i1 d$ ^0 \+ W
  /* Configure GPIOA  Out mode */
5 b- Y& `% t" _  S+ T  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_11 | GPIO_Pin_12;
+ `/ @" K# Y  Q$ j% D, b  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
8 F7 W- F* Z* ]6 u$ H9 r6 ]  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
" ?0 `1 i; `9 v- \0 T  GPIO_Init(GPIOA, &GPIO_InitStructure);9 `. Z; X8 A& i& F* r/ n
  /* Configure GPIOB  Out mode */, I* n) |5 |- ~( G5 \, q
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_5 | GPIO_Pin_6;3 i  L( C* S$ S; H; A0 [
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
/ ~5 x# \# T8 s# v3 I  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
6 J7 ?/ A% R/ X4 h0 U. e" t4 v  GPIO_Init(GPIOB, &GPIO_InitStructure);
' b* w$ ~0 m! D5 ]  /* Configure GPIOC  Out mode */
+ v( `. v& W% }/ ~8 d6 t/ s  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
6 S' @) v1 Y+ w! K; x0 s/ h  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
4 `  T  Y9 E" c! L5 ?# z: `& n  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;* x/ @/ W3 E6 ]" y1 _: K0 d9 N
  GPIO_Init(GPIOC, &GPIO_InitStructure);+ H" D6 h/ K8 N+ x0 S5 h! F! M
  /* Configure USART2 Rx as input floating */
+ G0 H9 M& p1 J* A- ~; f  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;8 C# |! {! G6 M, S5 G1 W4 ^
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
* B& b8 p' b7 @! R' k+ m! v2 x  GPIO_Init(GPIOA, &GPIO_InitStructure);; b+ ~4 @0 [  d6 _) r+ \# T
  /* Configure USART2 Tx as alternate function push-pull */# Z6 ~8 }) q; y
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;% b9 \- {8 Y6 ]: m1 F# p
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
. p7 G8 r' {3 T0 U7 l" w7 y  T* \% U( U  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;; Z9 J. V: ]* S& X5 {
  GPIO_Init(GPIOA, &GPIO_InitStructure);
3 t3 l  `; {' D2 w}
. j3 s) o6 ]1 ^* y3 A8 I- u9 uint main(void); W$ S: ^7 P/ J; Q9 l# x4 j& {
{
( Z$ u1 F5 E9 P8 e; R; Q3 G while(1)
9 b& C  K0 p; W6 Z' x1 f{# K' p/ P3 x+ `4 }2 ~6 Q  l' C/ j
if(DMA_GetFlagStatus(DMA1_FLAG_TC6) == SET)! n" ^5 Y) }5 }5 y- h
    {
( b/ D! x; W' J9 E         DMA_ClearFlag(DMA1_FLAG_TC6);
& [' i9 ?. b; T4 @* {% {     DMA_Cmd(DMA1_Channel6, DISABLE);
; }- j2 N2 ]- ^; C! l) _* G     DMA_SetCurrDataCounter(DMA1_Channel6,RxBufferSize);
# x$ U' ~# X0 T         GPIO_SetBits(GPIOC,GPIO_Pin_8);0 r3 i8 H* x% T2 }$ l! J# G
     delay(500);6 \1 }, Z6 b: p  Y8 O
     GPIO_ResetBits(GPIOC,GPIO_Pin_8 );7 X) a* ~1 y. v  g3 E0 G' f# d- Y
     delay(500);5 y0 k- A4 J' X9 U( Z! y
   }
$ g% [$ Y3 h. g7 G0 Q- |8 l- |else6 c, A: g$ J# {2 O3 E7 V9 t% ~( m; K
{6 p3 [0 w9 x! m. Z2 Z
GPIO_SetBits(GPIOC,GPIO_Pin_9);! e1 x& d2 a7 [) W& j6 t8 J' Q
     delay(500);  Z- `/ r  s/ j6 H/ M  G& X
     GPIO_ResetBits(GPIOC,GPIO_Pin_9 );( ?" G3 ^5 V8 o4 k) j/ z
     delay(500);
; j/ ~2 ]# K6 w- [: l# h}
2 W, A! D. J$ q- W}7 L  |$ K9 Y' ^1 z+ ~! i: q1 N1 \/ ?0 @
}
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发表:
, q* Z5 t  i8 d& A+ Q( T6 w# c  这里有个小小的例子,来演示DMA模块与系统程序并行工作。0 l) u+ Y. A3 I- _7 E
  用串口以低波特率发送一个10K的数据,花费近10s时间,此时按照以往方法,CPU要不断等待数据发送、送数据;或者送数据、进中断、送数据,处理起来比较消耗时间。2 F# a9 e+ e' g0 a
  使用了DMA功能以后,用户程序中只需配置好DMA,开启传输后,再也不需要操心,10K数据完成后会有标志位或中断产生,期间可以做任何想做的事,非常方便。
. ~' `. q# S* s1 B: K! ^2 t: ?  这个是相应的代码例子,基于STM32F103VBT67 x* c" j( Y$ C% r
4 H3 S% z0 ?) y  f
7 U) g' T5 w& ^" P4 ]+ X$ x
/******************************************************************************' ?" F' S' N! m# H" B
* 本文件实现串口发送功能(通过重构putchar函数,调用printf;或者USART_SendData()
6 X  ^* v( l0 [) X3 w( t* 这里是一个用串口实现大量数据传输的例子,使用了DMA模块进行内存到USART的传输$ s) \# k6 f2 p6 o5 I
* 每当USART的发送缓冲区空时,USART模块产生一个DMA事件,+ Q& ^1 w# ]" H. i( z6 J) k
* 此时DMA模块响应该事件,自动从预先定义好的发送缓冲区中拿出下一个字节送给USART# u- P! o( z4 g' ~  k! R" B6 T
* 整个过程无需用户程序干预,用户只需启动DMA传输传输即可8 \  C* C& t1 O8 `
* 在仿真器调试时,可以在数据传输过程中暂停运行,此时DMA模块并没有停止# M" x* ^& p+ [) a
* 串口依然发送,表明DMA传输是一个独立的过程。
4 |" k& ?- I6 W4 @' t* 同时开启接收中断,在串口中断中将数据存入缓冲区,在main主循环中处理
4 S7 c& g! q+ G0 [& B5 C4 d1 L* 作者:jjldc(九九)
- X3 Y  w8 K5 A! h* 代码硬件基于万利199元的EK-STM32F开发板,CPU=STM32F103VBT6* T% H+ G: H+ K" J" B7 u$ g
*******************************************************************************/
0 F/ k6 c; x2 I) g; T9 a1 {" F8 i- Z1 J/ G4 T6 D3 ]0 E5 e+ d
/* Includes ------------------------------------------------------------------*/
5 V$ c7 e% X- q) ~9 U( k#include "stm32f10x_lib.h"% p; n6 i. k$ e1 y, [
#include "stdio.h", J& X: P7 T0 y& C1 F* E& F+ _1 ?! g
7 ~( t& r- }9 h" w1 p7 b
/* Private typedef -----------------------------------------------------------*/5 Y  Y8 K4 l! d/ O' K
/* Private define ------------------------------------------------------------*/
! ^, l" @/ {: T. L) ]4 |  S( N#define USART1_DR_Base  0x40013804
  T0 L& l3 |  r5 I, m( k% e/ U2 G) c: S! {0 C* l/ k( r0 Q- Z
/* Private macro -------------------------------------------------------------*/
0 P& q/ u& y) D/* Private variables ---------------------------------------------------------*/
. {1 ^9 g& X' r; a#define SENDBUFF_SIZE   10240
0 [, n% p8 }8 E  \+ `( Svu8 SendBuff[SENDBUFF_SIZE];
: F* o/ {" e5 j# avu8 RecvBuff[10];
9 _' G+ U# h+ M4 P7 ?vu8 recv_ptr;6 J& m) O* \# s+ [' @. m3 j( _
# B5 W) P$ {! w) z4 K, `
/* Private function prototypes -----------------------------------------------*/
) u# z. c3 ^0 Zvoid RCC_Configuration(void);  f4 g0 W8 Z: y& U: \/ C$ U+ x$ S; X
void GPIO_Configuration(void);
( b- O7 f! R4 f# ?  Lvoid NVIC_Configuration(void);1 [/ |. m! I7 }* O6 }! L" L
void DMA_Configuration(void);1 x' d5 R# C9 J$ _0 s, I) S
void USART1_Configuration(void);
( A2 t. n" J3 {- k) @% q; d6 J& I2 w" i5 I7 y3 r
int fputc(int ch, FILE *f);7 O1 i# y# V& L2 H+ O
void Delay(void);
2 m+ h2 r6 D/ Q% c+ Y$ E* e4 i, N8 X
/* Private functions ---------------------------------------------------------*/
4 H" x6 k# G; G# l+ F/*******************************************************************************
" ^4 J; A; _/ @- N2 E* Function Name  : main
8 P4 {7 q4 L& I* Description    : Main program.
# c; T. Q* s$ P$ e3 V$ W" z1 K* Input          : None- P, w7 v( ~1 z
* Output         : None
* G) d" y" g6 n! b6 S; [* Return         : None/ I8 _1 T4 \0 C) U: y. }5 j
*******************************************************************************/
! n9 ?- h9 L6 J5 ~4 z* @9 bint main(void)
* g$ V) w7 i6 ?{, a* V* F& X" }6 o
    u16 i;, x# \) P/ p7 M7 k4 o
#ifdef DEBUG
, y" n! _8 }& I7 {1 D6 Q    debug();( |: D  d+ f4 T
#endif
8 b. q# e( A- c' Q6 B) d" |0 u! d9 }    recv_ptr = 0;3 S, q; b3 V0 ]$ ^+ t3 V
   
/ \4 o, ?! F$ b    RCC_Configuration();/ l+ E3 z  e$ J" ^4 a5 r
    GPIO_Configuration();$ `- I) _& j  U2 Y: v& E3 X$ y; f% N0 S- ]
    NVIC_Configuration();
0 @1 K8 D* d, v( M    DMA_Configuration();
- }  R  ^& h# |1 F    USART1_Configuration();
' J" U! n  [* C) s  z4 _  _    " t5 ^. @$ ]! w4 K
    printf("\r\nSystem Start...\r\n");1 e% K; P7 ^- f% Q
    printf("Initialling SendBuff... \r\n");
+ e. }& H0 m; m- Z    for(i=0;i    {
6 q- X. q/ i2 n( ?0 g4 {        SendBuff = i&0xff;
/ m+ W4 X9 E3 ~; H    }: y! H) p) z2 S( ?2 {4 S8 D, E+ I0 r
    printf("Initial success!\r\nWaiting for transmission...\r\n");
! U+ I2 W8 l5 Y7 V9 {    //发送去数据已经准备好,按下按键即开始传输
% \+ }) m' n1 G0 s4 N; v    while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_3));& ?- [7 [, m, v
    5 S. V" ~9 P  s1 K5 e
    printf("Start DMA transmission!\r\n");. M' O) P9 ]% B
    4 Y! D3 q4 e; k: G6 ^* D/ v( u
    //这里是开始DMA传输前的一些准备工作,将USART1模块设置成DMA方式工作
! q' R& b/ G0 w( G$ l    USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);5 L* M" @  K. @
    //开始一次DMA传输!. x7 }' A# S- a4 l
    DMA_Cmd(DMA1_Channel4, ENABLE);
% \# q1 _% n% k    ; f! {8 J- d. ?6 G# f: j
    //等待DMA传输完成,此时我们来做另外一些事,点灯
: z, O+ i: I. ?    //实际应用中,传输数据期间,可以执行另外的任务0 W! v' Z6 I: L; Y4 e9 _3 t7 j
    while(DMA_GetFlagStatus(DMA1_FLAG_TC4) == RESET)
# p$ |8 G! E* u7 p    {
# A8 M0 l- `. o+ a: c7 H        LED_1_REV;      //LED翻转
6 [& L+ ~' v% X8 o" R        Delay();        //浪费时间
2 O1 }! g9 |/ e: Q- y& i8 S    }( U+ ~+ n; j2 w% \) t1 r; T% G
    //DMA传输结束后,自动关闭了DMA通道,而无需手动关闭/ k2 I6 l) ]9 w9 K
    //下面的语句被注释2 @. h# j! m2 [0 D# Y+ i5 }
    //DMA_Cmd(DMA1_Channel4, DISABLE);( B! V+ T& W, J0 K5 Y
    . {7 }6 e( ~  E5 ?( l* Q, J% `% [
    printf("\r\nDMA transmission successful!\r\n");
( Q2 I2 s$ B7 P/ w2 U5 }
9 S% l- I/ p% T% B3 p8 O      J; _( h" y, d1 F
    /* Infinite loop */
* ?/ T% R% g/ s: N    while (1)1 S8 }% i# i5 ]; R5 G0 w5 D/ N  w6 J
    {- Q& L+ _; W; U9 P6 g) i+ |
    }$ I; u3 l( v; s) n% ]$ N
}
* m3 z8 C  {5 c' |0 {
# M* l6 p5 {- \$ T8 W7 c- A# \/*******************************************************************************
8 A. k# R# @8 ~+ x& b- Y* Function Name  : 重定义系统putchar函数int fputc(int ch, FILE *f)- ?4 E8 E7 L$ [: i8 o: \" U
* Description    : 串口发一个字节2 s3 [2 n5 R+ Y# s
* Input          : int ch, FILE *f
% n& C9 f8 j6 a( m* Output         :
8 i6 @( q: e" r. u4 q3 m1 B* Return         : int ch
& X, ?& X2 P& i* 这个是使用printf的关键) g; S  G; U; l0 f9 {) I+ P8 W' Z+ _
*******************************************************************************/9 \; O6 y1 ^0 k, \* @
int fputc(int ch, FILE *f)1 H$ A  G% M! U2 n$ s5 k
{2 t' p( X) L- z( o, R0 o0 |
    //USART_SendData(USART1, (u8) ch);
* f( w! W  n  y+ I$ x    USART1->DR = (u8) ch;
# a7 l# @# ~' o   
* ?  H0 l0 D4 U, C- K& r7 j    /* Loop until the end of transmission */1 ]* D/ @0 v: F) F2 ^% a+ {, {
    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)4 v- I1 M2 L; E9 Z% Z
    {2 Z& }3 `* I* Y' u0 V
    }+ z6 o6 g" X" Q) E- _1 K

( ]! C4 f# D  |, H6 }    return ch;! E9 T% B8 ]3 I6 s) |
}9 J9 X1 C) \/ V7 K

1 C) b$ e3 ~! L/ |/ W/*******************************************************************************9 ?/ T& G  o" j* w* [
* Function Name  : Delay
7 ]2 @- e( B4 q: b* Description    : 延时函数
4 [- I6 Q8 k8 p# p, L0 K* Input          : None
/ V# ^% Z! X( j! l( n* Output         : None1 |& T; c& k7 T9 @* a& ^
* Return         : None
0 @( }: B' l, q: O1 u$ r*******************************************************************************/. |! B; ^& z( E3 V. j& o! c2 x
void Delay(void)/ z, z, j  I& E* T2 g9 t' i
{
3 i. u: ?  r8 t- {' M5 T    u32 i;. i' W6 c& {* ~7 Y; E# \* g" D
    for(i=0;i外设
% f) W, g$ d- H" f0 D    //每次传输位:8bit
1 g2 u$ e4 @1 M: ]( c7 @  c    //传输大小DMA_BufferSize=SENDBUFF_SIZE
7 [- w4 X3 T6 z' [1 k    //地址自增模式:外设地址不增,内存地址自增12 }: R1 m. f4 C
    //DMA模式:一次传输,非循环
" u. ~8 y+ a7 \: g    //优先级:中/ D1 k7 v. ~& C# O$ I$ J
    DMA_DeInit(DMA1_Channel4);
+ g+ j0 r* z9 ?    DMA_InitStructure.DMA_PeripheralBaseAddr = USART1_DR_Base;4 l0 E" D, z, e
    DMA_InitStructure.DMA_MemoryBaseAddr = (u32)SendBuff;0 h8 N* p: I' k) g. q) f- l
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
, X8 I/ i/ j3 s  [/ n" _3 q  e3 L    DMA_InitStructure.DMA_BufferSize = SENDBUFF_SIZE;
  q3 c9 i1 T2 N, U8 a( x* Z* |    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;+ [: c, ?6 ~) q
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;9 i  y+ f# Y$ J3 P0 S2 o3 o
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
. D7 b+ K* r; b; W9 M6 E' F    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;+ `$ K; W: G- Z: n
    DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;6 m" o; @3 n3 \( h+ z, `" g& r
    DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;
7 b' g9 Z  U3 V- R) q    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;" @( y3 m* c* D+ M& C( g6 ?
    DMA_Init(DMA1_Channel4, &DMA_InitStructure);; d7 {; ]) _/ {. q
}
 8 [6 G1 b0 x, T8 Y
谢谢分享
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 手机版