串口使用usart2- T8 D8 Z) Z$ J p
dma使用dma1-stream6-channel4 l1 h8 Q& }1 @9 p
使用hal库函数! s' v8 v: t6 A
- DMA_Init(DMA1_Stream6,DMA_CHANNEL_4);
, e( Q( Y5 O, Y. d - HAL_UART_Transmit_DMA(&UART2_Handler,page,num);
: h1 M% q! Y1 Z5 t - while(1) Y$ V' q3 |; q' k
- {2 T' [& v# g5 x
- if(__HAL_DMA_GET_FLAG(&UART2TxDMA_Handler,DMA_FLAG_TCIF2_6))//判断传输完成# Y! o& _# b) Y+ S
- {
, J* v8 [/ t0 L - __HAL_DMA_CLEAR_FLAG(&UART2TxDMA_Handler,DMA_FLAG_TCIF2_6);//清除标志位
2 j1 P' l! {2 \4 T& w - HAL_UART_DMAStop(&UART2_Handler); //关闭dma& ^" R. c$ y2 V2 e' E
- break;1 e9 F% `5 [4 [7 v/ |" {
- }" U J/ T/ Q* S, Z/ | a
- pos=__HAL_DMA_GET_COUNTER(&UART1TxDMA_Handler);//传输进度
* k6 j6 s. x: ~2 i - printf("pos:%d\n",pos);( U) d: [1 B3 J) y! Q
- }
& C, r0 s y! s( I! Y @: N - 9 P% c: V' T: B: A# p3 |
$ n' y3 _8 g$ b
7 T) T$ @, K$ j |* V- void DMA_Init(DMA_Stream_TypeDef *DMA_Streamx,u32 chx)8 X h0 _" D) v* V
- {
/ R1 U7 z) }1 V -
1 R" g" C; U5 U( W4 r5 Q& Z - __HAL_RCC_DMA1_CLK_ENABLE();
7 x* ~9 {+ F6 _6 X a - __HAL_LINKDMA(&UART2_Handler,hdmatx,UART2TxDMA_Handler); + H2 z# \; W* I. r3 S7 l
. i: Z5 z5 x( [- G- UART2TxDMA_Handler.Instance=DMA_Streamx;
) t7 }1 y( g6 S' g - UART2TxDMA_Handler.Init.Channel=chx; ( O, \# j2 p1 q$ k P4 E
- UART2TxDMA_Handler.Init.Direction=DMA_MEMORY_TO_PERIPH;
+ b2 P8 h& `' G7 n/ V - UART2TxDMA_Handler.Init.PeriphInc=DMA_PINC_DISABLE;
8 `; @2 y5 t t0 m" j - UART2TxDMA_Handler.Init.MemInc=DMA_MINC_ENABLE;
: t5 K! h7 o5 B( G' T. R - UART2TxDMA_Handler.Init.PeriphDataAlignment=DMA_PDATAALIGN_BYTE; $ M- c4 Z0 X2 ?' J( \ `9 v8 T
- UART2TxDMA_Handler.Init.MemDataAlignment=DMA_MDATAALIGN_BYTE;
$ _: I- x' m4 u7 w' K2 d& l - UART2TxDMA_Handler.Init.Mode=DMA_NORMAL;
2 h6 W# f# ^5 A6 Y% T9 x k8 w( p+ i - UART2TxDMA_Handler.Init.Priority=DMA_PRIORITY_MEDIUM; 3 R/ p. b" [. [, M' n# R
- UART2TxDMA_Handler.Init.FIFOMode=DMA_FIFOMODE_DISABLE;
5 R! ~% O% _* i$ o& d3 P - UART2TxDMA_Handler.Init.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL; ) ?: X( j5 r' ^! m& V" k0 n
- UART2TxDMA_Handler.Init.MemBurst=DMA_MBURST_SINGLE; g7 N2 p# w% P1 d1 a4 ? Y7 T
- UART2TxDMA_Handler.Init.PeriphBurst=DMA_PBURST_SINGLE; , n2 v9 D9 P. P" x; F
- L& m( k& ?2 h, Z! A6 I: i- HAL_DMA_DeInit(&UART2TxDMA_Handler);
& ^9 V: q( v: n. n- p( r5 V6 Q - HAL_DMA_Init(&UART2TxDMA_Handler);
. R. J* L( c3 M: }7 V% } - }
; v) @0 ~8 T0 H5 b" {
( t, m1 K% a# }
复制代码
1 L/ y4 M3 }$ A$ l" Q1 z7 K8 g& R3 X% q' a' W% U B
|