串口使用usart2$ B7 e. K3 G" a+ b5 T
dma使用dma1-stream6-channel4: M% D, e' e5 `+ ^. n/ n
使用hal库函数# a' r8 A4 Q" ?+ E$ M7 J# U" Y
- DMA_Init(DMA1_Stream6,DMA_CHANNEL_4);. Y& L+ c# N" l( I; d0 G
- HAL_UART_Transmit_DMA(&UART2_Handler,page,num);
H7 ~! v2 |- t2 L# \% J3 P( P" V) R' |9 Y - while(1)& E8 S9 i- ?, x F" l& C
- {: K g( [! A8 q3 m& o
- if(__HAL_DMA_GET_FLAG(&UART2TxDMA_Handler,DMA_FLAG_TCIF2_6))//判断传输完成
6 q3 H! L% i, i$ v2 n, Q - {6 v0 Q" p( k& h8 L9 A
- __HAL_DMA_CLEAR_FLAG(&UART2TxDMA_Handler,DMA_FLAG_TCIF2_6);//清除标志位
: r9 b% j1 ~+ C - HAL_UART_DMAStop(&UART2_Handler); //关闭dma# p+ b& h# p1 k+ D& I
- break;$ b: x+ Z8 }7 }0 |+ L% l0 u' C
- }( k" z8 s3 }7 P) ~$ ~+ c
- pos=__HAL_DMA_GET_COUNTER(&UART1TxDMA_Handler);//传输进度
. @# H0 ]- }' h8 F _7 i! H - printf("pos:%d\n",pos);) r4 X0 M% E" V9 V3 F7 e4 u/ ~6 C
- }! v" i/ S# n6 E. o' P
- }) e' `# s2 j0 W- 3 { l+ K7 `& E, I
- 1 J' }, u; \! I( ^4 i5 e' [
- void DMA_Init(DMA_Stream_TypeDef *DMA_Streamx,u32 chx)+ D- G: e K7 w% `) R' J$ X* S
- { 4 |4 i+ |7 Y/ h' x
-
. C8 a2 T2 z- N, R4 o - __HAL_RCC_DMA1_CLK_ENABLE(); 3 L6 U- D* j1 W( X
- __HAL_LINKDMA(&UART2_Handler,hdmatx,UART2TxDMA_Handler); 3 ~4 V" u& d# C. ]
B6 {# t' J/ b7 U4 w/ v4 [- UART2TxDMA_Handler.Instance=DMA_Streamx;
. K: Q* r& m/ @) a P4 V3 Z - UART2TxDMA_Handler.Init.Channel=chx; $ b7 |5 H* g1 w) z* e( t
- UART2TxDMA_Handler.Init.Direction=DMA_MEMORY_TO_PERIPH; & W# H7 r# Q6 ]7 H) X) f* B
- UART2TxDMA_Handler.Init.PeriphInc=DMA_PINC_DISABLE;
1 I: a" J |/ j - UART2TxDMA_Handler.Init.MemInc=DMA_MINC_ENABLE;
% H0 y/ { w1 } - UART2TxDMA_Handler.Init.PeriphDataAlignment=DMA_PDATAALIGN_BYTE; ' }7 c8 ^0 r0 }6 R
- UART2TxDMA_Handler.Init.MemDataAlignment=DMA_MDATAALIGN_BYTE;
; E7 |" A' p/ a5 z - UART2TxDMA_Handler.Init.Mode=DMA_NORMAL;
2 Z% g1 G$ K- M3 b& W B- t& S& ^8 | - UART2TxDMA_Handler.Init.Priority=DMA_PRIORITY_MEDIUM; 3 L& Z- O. M0 L! g4 F3 f
- UART2TxDMA_Handler.Init.FIFOMode=DMA_FIFOMODE_DISABLE; ! K: ^" R: R. t& x* L
- UART2TxDMA_Handler.Init.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL;
/ V# \3 K5 w! p5 Y) N+ q, w% Z& q: o - UART2TxDMA_Handler.Init.MemBurst=DMA_MBURST_SINGLE;
* N) p3 u5 R) w5 \' @; Z - UART2TxDMA_Handler.Init.PeriphBurst=DMA_PBURST_SINGLE; $ R, `. t) o: t2 y/ F& N* U
7 I5 R% O3 G! `3 H- HAL_DMA_DeInit(&UART2TxDMA_Handler); 9 E' v$ u* P3 ]9 R3 n
- HAL_DMA_Init(&UART2TxDMA_Handler);0 Q8 t0 H4 x# c: M) M
- }+ h, |- M6 `! z* e2 s U
! p7 [% h3 r: m
复制代码 6 R. Q8 [! { S# [% p2 \5 u' S* J* q
2 k ?( @( W1 i4 v1 i |