串口使用usart20 |. g; P O$ S" x& h0 r. P" Q1 x; |
dma使用dma1-stream6-channel44 V0 _! |' e$ i1 i* R* D. _/ s
使用hal库函数
- E, A4 b0 V: R. ]2 A- DMA_Init(DMA1_Stream6,DMA_CHANNEL_4);) E i& X- f+ i; e% h( }! w4 a
- HAL_UART_Transmit_DMA(&UART2_Handler,page,num);
/ n. Q2 C& C8 i+ G8 C4 L) \ - while(1)
5 r7 J) G6 S4 k$ N8 R- x. x - {
9 ^8 M9 ~! H" l/ f, V - if(__HAL_DMA_GET_FLAG(&UART2TxDMA_Handler,DMA_FLAG_TCIF2_6))//判断传输完成& Y! b* s0 \* `1 S
- {
0 q, D w! N2 R% c; R - __HAL_DMA_CLEAR_FLAG(&UART2TxDMA_Handler,DMA_FLAG_TCIF2_6);//清除标志位7 \4 W3 k" O5 A/ ~$ I
- HAL_UART_DMAStop(&UART2_Handler); //关闭dma O& `! C3 Q. l: Y
- break;
- o8 g, z; o9 C3 t - }9 U( }& H/ f3 `4 Q9 \2 W" o+ u% A$ P
- pos=__HAL_DMA_GET_COUNTER(&UART1TxDMA_Handler);//传输进度
+ x* \* [4 N' t* t/ C! f/ R - printf("pos:%d\n",pos);8 ^6 K0 U' f" V
- }8 ^* l% \# U; F
* F! v# l2 P8 z/ t& s9 P
3 k8 O1 e2 ?& |1 F4 J0 w0 N
5 t) s5 y6 c q1 A. p% G- void DMA_Init(DMA_Stream_TypeDef *DMA_Streamx,u32 chx)
6 g+ p0 U y4 q" S% O - { . m7 S S3 j% c6 B* ?6 K5 p( f
- / ?* o& z- n% f& `( ~
- __HAL_RCC_DMA1_CLK_ENABLE();
6 M, P4 A! Y6 p, @# f" r - __HAL_LINKDMA(&UART2_Handler,hdmatx,UART2TxDMA_Handler);
# L. _8 o* u$ @6 z: p% [
9 z: B% J4 w6 k3 ?5 t- ^$ {- UART2TxDMA_Handler.Instance=DMA_Streamx; 5 N. S3 ^( I2 s2 o9 t
- UART2TxDMA_Handler.Init.Channel=chx; , D6 h; F% o8 \3 F
- UART2TxDMA_Handler.Init.Direction=DMA_MEMORY_TO_PERIPH; 5 ^! e- ?: A7 T* W% r! _( h
- UART2TxDMA_Handler.Init.PeriphInc=DMA_PINC_DISABLE;
P6 G/ D; M; d# H$ s& } - UART2TxDMA_Handler.Init.MemInc=DMA_MINC_ENABLE;
+ `# f" c9 E; D - UART2TxDMA_Handler.Init.PeriphDataAlignment=DMA_PDATAALIGN_BYTE;
C" P) D$ {* ^- b- C - UART2TxDMA_Handler.Init.MemDataAlignment=DMA_MDATAALIGN_BYTE;
- ~3 G0 I& B) A7 ]+ v - UART2TxDMA_Handler.Init.Mode=DMA_NORMAL;
$ v5 D9 a* @9 T5 [' o: O - UART2TxDMA_Handler.Init.Priority=DMA_PRIORITY_MEDIUM; + J2 q5 S( J M# H% {* E% f9 w
- UART2TxDMA_Handler.Init.FIFOMode=DMA_FIFOMODE_DISABLE; 4 R2 _- M! x& c. k
- UART2TxDMA_Handler.Init.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL;
$ o; J1 x' j9 u; ^2 ^1 i9 a! Q - UART2TxDMA_Handler.Init.MemBurst=DMA_MBURST_SINGLE;
8 p$ u o8 Z& u8 F% M; m7 U - UART2TxDMA_Handler.Init.PeriphBurst=DMA_PBURST_SINGLE;
! _! P! o( M1 r' { - . C% d- B- ?$ s4 p
- HAL_DMA_DeInit(&UART2TxDMA_Handler); ) P4 I A2 E ]" ~! @7 {& z/ ^" K
- HAL_DMA_Init(&UART2TxDMA_Handler);
9 T" x4 }8 a% q: e: f6 k& H7 \: T - }
, _5 B, [5 y( Q5 K6 ?" Q2 k0 F; A
7 T1 M- f. p+ H/ a/ m, ~0 h
复制代码 0 x2 a1 _9 W" h0 A
- P/ l( A/ s' u# B% z4 E |