串口使用usart2
5 l; s( l. l0 adma使用dma1-stream6-channel4
/ y+ ^+ g: P9 {' X* {使用hal库函数( g# E0 m2 a# e. N4 w0 f
- DMA_Init(DMA1_Stream6,DMA_CHANNEL_4);/ K9 j' `# v/ ]+ T
- HAL_UART_Transmit_DMA(&UART2_Handler,page,num);
5 h' Y. W2 V6 x* v - while(1)( u8 D0 D9 r$ J. b. X7 D W
- {/ e ` t4 H4 t4 C
- if(__HAL_DMA_GET_FLAG(&UART2TxDMA_Handler,DMA_FLAG_TCIF2_6))//判断传输完成6 ]! K0 d/ k) P; ~
- {' @( Y) P. S8 ]; k
- __HAL_DMA_CLEAR_FLAG(&UART2TxDMA_Handler,DMA_FLAG_TCIF2_6);//清除标志位
# J I/ s+ v. e: o8 h - HAL_UART_DMAStop(&UART2_Handler); //关闭dma
' a5 a% p0 X; H0 \( X3 U - break;
0 ?2 S6 W; o" x H# b' s5 U7 { - }8 n* @: T6 B4 e0 |( U) q# \2 r# O, H
- pos=__HAL_DMA_GET_COUNTER(&UART1TxDMA_Handler);//传输进度( @. C# w; O/ G) t7 s
- printf("pos:%d\n",pos);
+ I7 I6 I# ~" e" n7 ~+ G, X' L0 y8 ^2 ? - }0 ]; N. p7 A9 G* e" Q
- , \* D9 b% T2 F: _ H8 w
- 0 R: T1 F7 f% ?! a e. z1 v
- ; h( H& I( {1 h- w
- void DMA_Init(DMA_Stream_TypeDef *DMA_Streamx,u32 chx)
0 V' b, n% [. M - { 9 C' b8 R+ _, m/ X2 p; E
- : H0 E% D) _* S0 w
- __HAL_RCC_DMA1_CLK_ENABLE();
1 Z* V9 q/ N! C7 O% E4 f' C" j - __HAL_LINKDMA(&UART2_Handler,hdmatx,UART2TxDMA_Handler); : f4 ]2 Z0 e- R" y5 U ?1 x5 Q
- 3 Z& B/ L. \' {1 z# B
- UART2TxDMA_Handler.Instance=DMA_Streamx; , g1 T4 ?; y' b4 G+ Z
- UART2TxDMA_Handler.Init.Channel=chx;
' ?/ x& y C( s3 _# B4 P6 I, y7 \$ Q - UART2TxDMA_Handler.Init.Direction=DMA_MEMORY_TO_PERIPH;
$ X8 F. r. k9 a& A% Y+ H! J - UART2TxDMA_Handler.Init.PeriphInc=DMA_PINC_DISABLE; % }$ W7 h* J1 d% G# g3 ]9 P5 ^( t) y
- UART2TxDMA_Handler.Init.MemInc=DMA_MINC_ENABLE; # Q. _* Q$ H# n% y3 m
- UART2TxDMA_Handler.Init.PeriphDataAlignment=DMA_PDATAALIGN_BYTE; ! o' q7 R9 q; ~3 ]
- UART2TxDMA_Handler.Init.MemDataAlignment=DMA_MDATAALIGN_BYTE;
$ G# b9 z8 M4 _! E6 x F - UART2TxDMA_Handler.Init.Mode=DMA_NORMAL;
; p8 V, F4 C g8 q- s - UART2TxDMA_Handler.Init.Priority=DMA_PRIORITY_MEDIUM;
9 t5 t' K7 z4 U/ }- ~$ E - UART2TxDMA_Handler.Init.FIFOMode=DMA_FIFOMODE_DISABLE;
- Y5 F' G3 _( C, r$ L3 v5 B - UART2TxDMA_Handler.Init.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL; " {, G- v( A0 p t3 t7 a/ X! t: p
- UART2TxDMA_Handler.Init.MemBurst=DMA_MBURST_SINGLE;
' d% Y+ Y! W1 L! u+ Q - UART2TxDMA_Handler.Init.PeriphBurst=DMA_PBURST_SINGLE;
8 h6 ~5 M2 {/ H* F' S, g0 N5 Y/ E+ X
3 r$ O8 {& g- I( i* ?- HAL_DMA_DeInit(&UART2TxDMA_Handler);
# l% F W6 G8 J% w - HAL_DMA_Init(&UART2TxDMA_Handler);( @4 k: {/ z" n0 G! |
- }
8 M( z: z9 I+ L# f
$ s3 o# i1 V, i
复制代码
8 `9 ^7 m/ W& c$ F) A0 U4 w- q4 K- f8 e/ ~( _; \& G- [ w
|