串口使用usart2
: I2 k. w# i& E3 A5 \dma使用dma1-stream6-channel4
9 `1 U" a: T9 o y$ G' C' ]使用hal库函数$ w) r7 }$ n# Y# z* o
- DMA_Init(DMA1_Stream6,DMA_CHANNEL_4);
8 L, ?9 C5 e+ P: B! M- x) L4 L* G - HAL_UART_Transmit_DMA(&UART2_Handler,page,num);7 M' b; B! q, Q* w7 Z$ z) H# |. g! ^2 G
- while(1), i- q& P& j% d) Y' q
- {3 s5 |: ~8 C. C; r$ T0 q3 O/ {) d- o
- if(__HAL_DMA_GET_FLAG(&UART2TxDMA_Handler,DMA_FLAG_TCIF2_6))//判断传输完成
8 e; _5 Q8 B8 W: j( e( m - {0 l) s& K- P% F
- __HAL_DMA_CLEAR_FLAG(&UART2TxDMA_Handler,DMA_FLAG_TCIF2_6);//清除标志位
" ?/ `% C# D$ |, a' u4 M - HAL_UART_DMAStop(&UART2_Handler); //关闭dma
0 o4 X- A1 K2 ]3 G9 p# i1 C! X8 ` - break;( u, c" X: B$ G. h6 R
- }
) H% a2 l) u" T - pos=__HAL_DMA_GET_COUNTER(&UART1TxDMA_Handler);//传输进度
7 g& |; R" y8 c - printf("pos:%d\n",pos);
9 O- H- W5 [' L' k. B- Q0 k3 ] - }8 k3 p+ ^+ P1 a |' j1 o
- + z2 ?3 n9 p# T; W
- & j: ^& @4 o/ k
- m( w& n2 W' `3 P2 x: v* _- void DMA_Init(DMA_Stream_TypeDef *DMA_Streamx,u32 chx)( D+ S' L3 l) q
- { # }! S, Q' Y0 m! k; r
- \' Z7 }# P( D& N. O
- __HAL_RCC_DMA1_CLK_ENABLE(); 3 x' r: O" c; S+ M2 h6 O) |
- __HAL_LINKDMA(&UART2_Handler,hdmatx,UART2TxDMA_Handler); - F8 t1 n. \' x$ x8 d4 L
* |0 d K! ^4 A+ P- UART2TxDMA_Handler.Instance=DMA_Streamx; 6 \) _ I) e7 O" i
- UART2TxDMA_Handler.Init.Channel=chx; " H4 t( C2 d0 s6 F2 l" H7 }
- UART2TxDMA_Handler.Init.Direction=DMA_MEMORY_TO_PERIPH;
9 S7 Q, ]1 q/ g2 k4 C" B - UART2TxDMA_Handler.Init.PeriphInc=DMA_PINC_DISABLE;
. ^5 [- x2 Y \1 f z - UART2TxDMA_Handler.Init.MemInc=DMA_MINC_ENABLE; $ d, P0 c. R7 ?6 e* Y6 f
- UART2TxDMA_Handler.Init.PeriphDataAlignment=DMA_PDATAALIGN_BYTE; ( g/ v4 A4 T' G
- UART2TxDMA_Handler.Init.MemDataAlignment=DMA_MDATAALIGN_BYTE;
6 W! B+ v( b) L - UART2TxDMA_Handler.Init.Mode=DMA_NORMAL; 4 J/ Z8 S9 q z
- UART2TxDMA_Handler.Init.Priority=DMA_PRIORITY_MEDIUM; # e1 ^( V/ f7 Q. d: M2 M; s5 x
- UART2TxDMA_Handler.Init.FIFOMode=DMA_FIFOMODE_DISABLE; " }( Y3 K9 C5 u. ^% M4 s3 c
- UART2TxDMA_Handler.Init.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL;
" g L; ]6 e" C - UART2TxDMA_Handler.Init.MemBurst=DMA_MBURST_SINGLE; 7 [4 x; u& K' P( V5 x, f! d0 u1 \
- UART2TxDMA_Handler.Init.PeriphBurst=DMA_PBURST_SINGLE; # o( ]* X8 {" a7 \- I) Y% h9 s" h
- % Q1 h: J: ?) B. W( W- d1 G! Z# Z2 M
- HAL_DMA_DeInit(&UART2TxDMA_Handler);
" T2 F4 A" x2 w4 C' t - HAL_DMA_Init(&UART2TxDMA_Handler);( Y! k+ t7 a4 N: i
- }
; \% E2 {$ B# s D2 i$ M* _ - 6 q+ `+ C) l1 Y$ K( z
复制代码
" M% X$ h2 T* D3 z! [* O# n2 b4 D0 u5 V y
|