- u8 gprsTxBuf[100];
, }/ m: s, b" Q5 t2 G% p" U! J - u8 gprsRxBuf[1500];
8 ~4 Y6 m* w4 G+ y d) p! H - //接收DMA初始化
7 p" ~1 c6 z! U( Z+ k0 D - void tx_dma_init(void)6 @, ~+ c7 f. h, R
- {
9 Y! f# F1 k I' O - DMA_InitTypeDef DMA_InitStructure;# J: n* ?) O! \6 k
- * J+ ^1 k- K) z" \
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);/ F/ p9 a" O( k- }
- " u5 J `% ?7 J, x) [* X' a2 a/ L
- DMA_Cmd(DMA1_Channel7, DISABLE); ! B/ y5 K/ g0 U! M4 r3 r4 r! i
- DMA_DeInit(DMA1_Channel7);
0 w0 n, I+ D+ _+ }- {: _ - DMA_InitStructure.DMA_BufferSize=sizeof(gprsTxBuf); //ÏÈÉèÖÃΪ1K´óС
* L" U' u2 J3 q; u - DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralDST;" Y2 U. r2 W7 Y7 D% ^* u
- DMA_InitStructure.DMA_M2M=DMA_M2M_Disable; 0 g" j% h5 h9 _& n( j
- DMA_InitStructure.DMA_MemoryBaseAddr=(uint32_t)gprsTxBuf;
# Z7 @1 z, Z: _) c - DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;
& h+ o2 k% G$ f! n; A - DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;. b- I- F# P9 [) e+ u2 i
- DMA_InitStructure.DMA_Mode=DMA_Mode_Normal;# w# M- A. p4 ^* W& [6 i
- DMA_InitStructure.DMA_PeripheralBaseAddr=(u32)&USART2->DR;4 M6 X. k3 g% z( \3 F
- DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;1 g. j5 n- x" [, q8 u
- DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;9 U2 L( E3 W! j Q9 ^. w: X
- DMA_InitStructure.DMA_Priority=DMA_Priority_High;
! A/ D: u4 w$ ?6 }6 U - DMA_Init(DMA1_Channel7,&DMA_InitStructure); //³õʼ»¯TXµÄDMA
# o& W, _- B R2 x - }
+ e! K5 R. _6 B7 s* p - //发送DMA初始化
- A* |/ g; s5 L: V - void rx_dma_init(void)8 J' k. E1 e' x8 U, g1 v
- {2 n9 X4 Y' w1 c a% l$ V4 X
- DMA_InitTypeDef DMA_InitStructure;9 C6 `( p, g* i' ~- }
- ( V+ m( x# S" N" o0 r- r8 D: y
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);2 j6 m& ^+ i2 v2 m2 }: I% s8 Q
- DMA_InitStructure.DMA_PeripheralBaseAddr = USART_DR_ADDRESS;
+ G( j! ~2 u; p6 i9 a+ k( ^+ U, d - DMA_InitStructure.DMA_MemoryBaseAddr = (u32)gprsRxBuf;
* E# {7 t" u; A1 J/ K' f - DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
5 v3 G; N- ]9 N( A% y - DMA_InitStructure.DMA_BufferSize = sizeof(gprsRxBuf);
: R2 z$ y6 H! @4 @- a9 c - DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;# U; m5 m! G& _. ~6 k
- DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;1 o; W. Z6 \6 ^+ ]3 ?( i
- DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
3 k' B$ \# R, H3 B8 g - DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
; z6 M7 v$ W7 T. m* O- x - DMA_InitStructure.DMA_Mode = DMA_Mode_Normal ; s5 A* D3 g. g: ?5 t- f4 p- R! [3 F# x
- DMA_InitStructure.DMA_Priority = DMA_Priority_High;) Q+ K3 g8 j. Z! e( x6 s
- DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; ( |5 I. J3 D" v2 C# J3 X
- DMA_Init(DMA1_Channel6, &DMA_InitStructure);
- x+ T4 E* K: g) w& p* p# m/ D( r& U6 N - DMA_Cmd (DMA1_Channel6,ENABLE);
. N+ v9 a* q( | - }8 M. ]5 ~ [5 X( |5 t3 F$ I. x
: ~* U+ ` \ i9 q9 [
& {3 g' M$ z$ O* a6 f [- //串口初始化
5 z. F' `0 r( A' ~ - void uart_init(void)
/ |1 W# V* r) {0 N' ^ - {) y" o( a' ?/ V" Q1 M6 T0 l9 S
- GPIO_InitTypeDef GPIO_InitStructure;
/ ]7 i9 M2 S2 J9 Y4 ` - USART_InitTypeDef USART_InitStructure; ) F1 ~9 v. t% a$ F3 A, g
- NVIC_InitTypeDef NVIC_InitStructure;
0 O( ?# s, A1 x1 A* y1 K. I' t% k: H -
+ U) X! d a. A) }$ R - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);' i2 Y* S9 X+ C6 b
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);+ [* R& K/ T: j' A9 }! O" s$ z+ t
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
. o- S/ n8 G" l2 A A -
" r9 H9 y$ V( {0 n$ I - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;! S0 R" p+ [6 G! e7 ?, W
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
) f* Z0 ?/ y- y5 v& B, n - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
* [& z+ V/ b, v3 p - GPIO_Init(GPIOA, &GPIO_InitStructure);
! \: o) l8 s1 N k" p* E) q -
0 {' ]$ k. Q* N. k - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
9 T9 M; m8 r4 h# k. S9 Y$ B$ ~5 x - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;4 y, n5 f6 P" v/ W" G
- GPIO_Init(GPIOA, &GPIO_InitStructure);* M0 l* Q/ ^8 {: `/ Q- s# X
- & ]% D% Q3 o' H
- NVIC_InitStructure.NVIC_IRQChannel=USART2_IRQn;
& r7 L2 X: R9 p; K - NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;( k& j3 i* M2 f P. g8 `4 F
- NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;- V" e4 k: ]4 e1 A8 z6 W! o
- NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;" s# ]; e/ ^5 M& N$ T
- NVIC_Init(&NVIC_InitStructure);3 y1 _# b7 ]5 p+ j
-
+ [0 |; c! D; l0 |/ x - USART_InitStructure.USART_BaudRate = 115200;; U, y/ w6 d5 a: p. d9 {/ I
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
6 T9 L; N& t, ]; R1 H - USART_InitStructure.USART_StopBits = USART_StopBits_1;& S9 f( A" y1 {
- USART_InitStructure.USART_Parity = USART_Parity_No;
# \# T- b, }9 j7 s6 r5 }8 M, z8 [/ [ - USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
# V! \2 _& n+ T8 B7 A7 a, R - USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
! ^ N6 H% m9 I0 w$ B5 [! D% G - USART_Init(USART2, &USART_InitStructure); k; C! h1 @% N+ P/ k8 ^( I
-
' ?1 p* A" Y) j8 J0 X! B - USART_DMACmd(USART2,USART_DMAReq_Tx,ENABLE);
9 W6 u9 @& `2 |% ?' G - USART_DMACmd(USART2,USART_DMAReq_Rx,ENABLE);/ N* ]+ ]7 `1 U- o2 z1 P
- 7 K7 v8 I2 O; g4 @
- USART_ClearFlag(USART2,USART_FLAG_RXNE);" r1 Q& k6 R) F
- USART_ClearFlag(USART2, USART_FLAG_TC);* J1 ^: ?" z/ B$ I
- USART_ITConfig(USART2,USART_IT_IDLE,ENABLE);( j8 J }* B9 V, h; H
-
; l( }8 N& b5 K- I; S( |7 y - USART_Cmd(USART2, ENABLE);+ s* S" @. Z. u2 {* |
- }
, W- U3 g v; W, P( g. s - //DMA发送数据
6 {) ?! F3 Z; o# z - void send_commend(u8 *buf,u16 size) F5 K4 n3 P2 i; o
- {. |; q& P. R& y! N$ n
- memset(gprsTxBuf,0,100);
: c9 F- e1 A: W" Z - memcpy(gprsTxBuf,buf,size);
+ j/ Z8 o+ t- M7 S1 _; ~1 }3 m -
9 ^" l' G0 b& l. } - DMA_Cmd(DMA1_Channel7,DISABLE);: Z! C- P% Y$ C+ S/ k
- DMA_SetCurrDataCounter(DMA1_Channel7,size); j9 |) _6 N* b( E
- DMA_Cmd(DMA1_Channel7,ENABLE);+ ~( e5 p |' ]
- }+ E" `# \6 q1 z/ p- ]
8 V2 t: @( Q0 i1 j, I- void gprs_dma_reset()
, w: T) _+ g* }1 C" h. U3 @0 L - {
6 {. K$ F7 ~' ~, K/ b4 ~ - DMA_Cmd(DMA1_Channel6, DISABLE );
4 m9 q0 `# ^: b L - DMA_SetCurrDataCounter(DMA1_Channel6, sizeof(gprsRxBuf));
3 q" Q+ {( z& l3 k* V7 Y - DMA_Cmd(DMA1_Channel6, ENABLE);
6 ?1 g: @1 S- m- v! R - }
% U3 j4 F0 b! U! {+ |7 |( w8 ^ - ( W. A5 w3 H* i" x
- extern u8 gprsRecOverFlag;" ?0 n0 `8 v8 }, T6 _+ d
- extern u16 gprsRecCnt;
& {0 Z; B: E$ o+ f - void USART2_IRQHandler(void) $ u0 u- D- I5 X5 R' ]8 L" ?$ L/ t* j" v
- {
( L1 [ N& {( C' w
, C2 D7 P d8 q) o K9 O- u16 uartRecCnt=0;/ L! F, I0 q" ~6 M2 ]
- " X* J( e# Z5 A1 j7 [, y
- if(USART_GetITStatus(USART2, USART_IT_IDLE) != RESET)
* K# Y y7 V% ^1 w - {+ n7 v3 a( j6 R' q: Z& B
- USART_ReceiveData(USART2);0 \' `6 i: z7 g! B* @ t! |. [/ Y
- uartRecCnt = sizeof(gprsRxBuf) - DMA_GetCurrDataCounter(DMA1_Channel6);
& G' l8 g; N# f; k# R - //**********************//- u: R# K# x: `% p3 n9 Z X
- gprsRecOverFlag=1;
) J6 U. g$ {% P- }; j3 h; Q - gprsRecCnt=uartRecCnt;
; M J8 r7 N8 ^0 L! S - //*************************************//
# G3 k3 F& r2 z2 O - gprs_dma_reset();
8 @ V U+ C/ p/ O! i2 |0 H) W - USART_ClearITPendingBit(USART2,USART_IT_IDLE); - o1 ]; b/ q- H6 p# F
- }2 [( W) U2 p$ z1 O# f* C
- }6 N& Q2 ^% [9 X7 p0 J' k) e0 `, @
- ( k u' m) l5 @9 _4 Q- R
5 Q' m6 D9 ~1 y5 h9 v0 e! G- * I, v% j) P, y u7 |) k+ d% I! B! l$ m
复制代码
$ M7 w* A6 R6 I3 h |