串口使用usart2
; D/ y9 A: i! Z w6 ddma使用dma1-stream6-channel4
5 ~ \; D# k+ e9 I5 S k# Y# ]使用hal库函数
' w: {6 S1 L2 ~4 h# A% L: X: Z- DMA_Init(DMA1_Stream6,DMA_CHANNEL_4);
: ?1 V) c8 ?' M& Y5 _ - HAL_UART_Transmit_DMA(&UART2_Handler,page,num);
! Q3 z; L* ]' T) ? - while(1)
5 [ M% [/ F4 h) Z* `8 l - {
/ b5 l( ? f& B- G+ k - if(__HAL_DMA_GET_FLAG(&UART2TxDMA_Handler,DMA_FLAG_TCIF2_6))//判断传输完成
" |! x& F/ a" q9 V- o& B - {" r% @% j$ S; {: }; t7 Z; L
- __HAL_DMA_CLEAR_FLAG(&UART2TxDMA_Handler,DMA_FLAG_TCIF2_6);//清除标志位! y( K# ~) H/ z6 ?; t I, f/ ~1 x
- HAL_UART_DMAStop(&UART2_Handler); //关闭dma; c0 L: D6 e1 [% V! i7 Q2 ?7 l
- break;
+ l6 K7 R' H, h* k, Z P; i, L - }. v: U% ?5 i/ k: ]- g, r$ c% u+ _
- pos=__HAL_DMA_GET_COUNTER(&UART1TxDMA_Handler);//传输进度 \ b; m: T: F. A7 ^, Y. K
- printf("pos:%d\n",pos);
9 C' ^7 v# e/ O, a - }
( z. ]% O2 H' n9 e) W - + C, W5 n' ^$ V; y
/ N2 t. V9 @( {" F
: |! A |+ f# w% @. Q8 |9 g- void DMA_Init(DMA_Stream_TypeDef *DMA_Streamx,u32 chx); F7 F$ F4 m: `5 u5 a3 w" `# y
- {
! T3 H: x. V# z, Y4 I& N' K8 ]1 n -
$ x& z5 w+ z0 `$ `' Q( ~: F5 K5 s8 f5 y - __HAL_RCC_DMA1_CLK_ENABLE(); % x% G, N: a! X& ?: n8 x- ]% m
- __HAL_LINKDMA(&UART2_Handler,hdmatx,UART2TxDMA_Handler); ( X* m9 z- |4 Z% J/ e Q- ~. Y0 ?* N
: ^2 ]0 _" j+ b# M7 d- UART2TxDMA_Handler.Instance=DMA_Streamx; ; s2 E, h3 c$ w8 o3 [ G9 H1 `4 _6 t
- UART2TxDMA_Handler.Init.Channel=chx;
# M8 n) T6 J3 [+ M2 u - UART2TxDMA_Handler.Init.Direction=DMA_MEMORY_TO_PERIPH; 3 \/ K& l4 e% h) W; a' G' U
- UART2TxDMA_Handler.Init.PeriphInc=DMA_PINC_DISABLE;
4 N9 L: o s$ U9 k - UART2TxDMA_Handler.Init.MemInc=DMA_MINC_ENABLE; . k. W3 A; ]% G/ a. m5 {
- UART2TxDMA_Handler.Init.PeriphDataAlignment=DMA_PDATAALIGN_BYTE;
$ q6 D3 n4 f: Y. B1 f( l - UART2TxDMA_Handler.Init.MemDataAlignment=DMA_MDATAALIGN_BYTE;
8 r. g) D# H9 R& u E3 @ - UART2TxDMA_Handler.Init.Mode=DMA_NORMAL;
7 E# j0 B4 r/ r% o - UART2TxDMA_Handler.Init.Priority=DMA_PRIORITY_MEDIUM; 3 g& W0 D) ]6 k: L. O
- UART2TxDMA_Handler.Init.FIFOMode=DMA_FIFOMODE_DISABLE;
' u* @; ]7 d8 H& f) o( R1 s; E - UART2TxDMA_Handler.Init.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL; 1 X+ v7 z5 z% @7 ^! k0 O
- UART2TxDMA_Handler.Init.MemBurst=DMA_MBURST_SINGLE;
f$ _" e4 ` K0 W& d/ g6 l9 L - UART2TxDMA_Handler.Init.PeriphBurst=DMA_PBURST_SINGLE; 6 L1 X+ L" L7 l# S M& m
' f' E R. Y1 q- r8 n+ Y- [- HAL_DMA_DeInit(&UART2TxDMA_Handler); 4 p& s& e$ s" J
- HAL_DMA_Init(&UART2TxDMA_Handler);# S a5 p( F$ ~/ u+ A) D3 k3 T
- }) H* B3 z$ e9 z
6 h: ]5 e% a' k2 x# v! T, ]4 a
复制代码
* K2 }8 \4 n, ?& p# k
7 f: r* |5 Y9 Y% S% ?) W( F |