- u8 gprsTxBuf[100];; e! Q/ [* y- ^* H1 C2 O0 \" N
- u8 gprsRxBuf[1500];# O( Q1 I! p# G# w) _
- //接收DMA初始化2 { ~$ L( n! c* F) y* l" D; A/ ?
- void tx_dma_init(void)1 }% k5 j" y2 Q) x# d3 l F
- { ^$ V- }+ }3 ?) E
- DMA_InitTypeDef DMA_InitStructure;
`0 t$ K* w) ^+ G1 l -
4 @$ z& r' w- u) Q% a - RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
; m- J2 V6 H5 W, `2 g - / U6 o- A3 E# h3 _5 d. F. P
- DMA_Cmd(DMA1_Channel7, DISABLE); # g& N% D$ S; N
- DMA_DeInit(DMA1_Channel7);
+ b# S4 {. w$ P. i; j Z' w - DMA_InitStructure.DMA_BufferSize=sizeof(gprsTxBuf); //ÏÈÉèÖÃΪ1K´óС9 z" b$ ^: _0 m
- DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralDST;9 F; E" R$ w9 m% R$ p9 V; y
- DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;
5 M% |9 p- H. N - DMA_InitStructure.DMA_MemoryBaseAddr=(uint32_t)gprsTxBuf;0 Y& _: c- c1 V4 S
- DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;/ _- A6 ^& i V+ c! x
- DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;
3 n% d8 N4 Q: H - DMA_InitStructure.DMA_Mode=DMA_Mode_Normal;8 |' d# A/ V( B$ N9 r; P; G( v* m
- DMA_InitStructure.DMA_PeripheralBaseAddr=(u32)&USART2->DR;
0 ]7 s8 Z9 L& y1 D8 A9 \ I' y - DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;
7 @( g8 h; z4 k! [( n9 @4 _ - DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;
2 r/ o: ^3 @' h7 q" T& V - DMA_InitStructure.DMA_Priority=DMA_Priority_High;7 ^9 U: T3 X8 e1 B* u# m1 X
- DMA_Init(DMA1_Channel7,&DMA_InitStructure); //³õʼ»¯TXµÄDMA" q9 y0 G( y5 [) S) L# H
- }
! b+ \, e1 q/ |# c) S6 n6 Q - //发送DMA初始化# O& d! D& l5 p9 T' l& N k
- void rx_dma_init(void)
# W' u% G5 p4 d& s3 d" @9 P% p( Y - {* `7 T/ f% s" u9 @+ F7 {4 a9 _0 i
- DMA_InitTypeDef DMA_InitStructure;/ X+ D1 k" j* m4 K5 ]" X7 O
- 0 l1 ~7 E0 T% v& n3 c1 G0 u
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
1 j; ], T3 y- ?: [ - DMA_InitStructure.DMA_PeripheralBaseAddr = USART_DR_ADDRESS;
7 c% D9 s4 V2 N) N6 A7 j - DMA_InitStructure.DMA_MemoryBaseAddr = (u32)gprsRxBuf;# J7 S& h$ ?2 d9 }
- DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
7 k+ i1 G* i. z0 j1 X) s) ?% L) P U - DMA_InitStructure.DMA_BufferSize = sizeof(gprsRxBuf);6 ?3 Q" c, F8 f
- DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;, o$ t9 W- h: u
- DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;" R4 ]" N+ K$ M2 ]" \
- DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;# e5 ]8 d* o5 l0 T4 h
- DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
# s" ]. g6 H8 q& E3 g# R @, P( |3 V - DMA_InitStructure.DMA_Mode = DMA_Mode_Normal ;
9 Y* g- \) m+ `7 ?* v4 v/ S - DMA_InitStructure.DMA_Priority = DMA_Priority_High;
5 V" \ L* e2 C9 z' j - DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; # N8 v2 k4 x; o
- DMA_Init(DMA1_Channel6, &DMA_InitStructure);+ M) Y8 K9 n5 M/ Q9 u9 t
- DMA_Cmd (DMA1_Channel6,ENABLE);
, [0 Y$ j1 L; F! |5 r% c# [ - }
( G) I3 c U. n0 `0 R
: {! }2 l t' g/ c
q6 y1 Y; t# P) C, k- //串口初始化: h6 A" i& c" p
- void uart_init(void)
+ p1 ?; G; s% N+ u ]: p2 N4 g - {5 R- o/ i9 y' p3 l2 N: f* [
- GPIO_InitTypeDef GPIO_InitStructure;
7 u6 @3 E, f; S/ u - USART_InitTypeDef USART_InitStructure; 1 R5 `6 o- G+ |: Z
- NVIC_InitTypeDef NVIC_InitStructure;
5 E k: g) X0 V) C* g2 [% \ -
2 b2 Z# Z# _( F, ~9 Q' u9 e1 L - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);- f; D( e9 H5 _+ \
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
0 i' l. c) A, k' @) @& V - RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
8 u. y% `- z- i( r8 o; L -
* \4 U# l* @& w! P% d2 J* r2 L9 i - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;9 e D8 Q4 v: s, t2 b
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- l* q, A! \/ A6 k( n2 B7 ? - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;7 P# k& J) t2 I! {
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- D$ J7 g/ y8 o& K: ~9 y0 U! A! \* q - 5 v, ^- P) A X- Z) T
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
3 H4 t- w1 J7 x - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
8 [/ C) d3 w' N% V7 U; w$ V" X" v - GPIO_Init(GPIOA, &GPIO_InitStructure);' [' ~7 A6 { H5 t' g( M3 B
- ( r" [0 }$ x; g& v# I
- NVIC_InitStructure.NVIC_IRQChannel=USART2_IRQn;9 w& Z7 N* r, N0 E
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;+ z# a a1 L( z p4 V- `4 v
- NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; p2 ?: H* U# s; H
- NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;+ f2 s$ p- O2 p( N1 h1 `* |) C
- NVIC_Init(&NVIC_InitStructure);* R+ F. @1 C1 m; w
- " N& [# M0 J+ a0 l
- USART_InitStructure.USART_BaudRate = 115200;
9 C/ s J2 G: T8 D0 K$ Y - USART_InitStructure.USART_WordLength = USART_WordLength_8b;
?0 h# W* Y. o7 {! o - USART_InitStructure.USART_StopBits = USART_StopBits_1;) k9 O/ [5 u- ~5 }
- USART_InitStructure.USART_Parity = USART_Parity_No;
" _: f+ l$ a4 P0 f0 \ - USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;3 x; ]# R! j* C8 j S- g( h
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; A' f2 {, a: `! x
- USART_Init(USART2, &USART_InitStructure);! I* w3 ^: p: e6 \3 S
- # }2 w/ C6 j) K4 y
- USART_DMACmd(USART2,USART_DMAReq_Tx,ENABLE);
: x% y6 V* d/ U& |. \0 b" Q: |" t - USART_DMACmd(USART2,USART_DMAReq_Rx,ENABLE);' i# j' ?! i, K: I: y. @. t) u
-
4 ` ?) e3 l( x: L+ E) S+ T - USART_ClearFlag(USART2,USART_FLAG_RXNE);& m1 W0 @; W& V) X8 A* `. {( m
- USART_ClearFlag(USART2, USART_FLAG_TC);9 @% X/ r3 W/ }( e8 P8 z
- USART_ITConfig(USART2,USART_IT_IDLE,ENABLE);
i+ a9 p7 F: v6 z -
9 t8 |% P! c1 C+ g - USART_Cmd(USART2, ENABLE);
" E1 W' u$ a" \' d4 C - }+ ~8 V- d$ z$ i% D+ _
- //DMA发送数据
- u- J' d; E G! F$ @ - void send_commend(u8 *buf,u16 size)
: `& h/ ]1 y. D! [, ^0 _4 |' v7 y - {. s" E: u2 |5 F
- memset(gprsTxBuf,0,100);
) O- W2 l0 @' z* G/ V# W% h6 c - memcpy(gprsTxBuf,buf,size);0 y8 `0 q. J* |! I3 R% D8 u
-
' J& L/ A A! W" J - DMA_Cmd(DMA1_Channel7,DISABLE);: {9 C7 g) C" w3 T- S$ @+ ?2 ]& M: w
- DMA_SetCurrDataCounter(DMA1_Channel7,size);8 K% M4 H5 ]1 u+ J# A
- DMA_Cmd(DMA1_Channel7,ENABLE);# D+ ^* {. v9 G* @8 t+ Z# a
- }- Y$ q8 A( }1 _* [
# m; n2 m. L# R- void gprs_dma_reset()
0 ]" v' X& A' \3 }* o8 Z - {
0 c& d9 J, o5 {8 G8 m1 q - DMA_Cmd(DMA1_Channel6, DISABLE ); 0 R+ W; m- T5 t' x( _! r" M7 o* c
- DMA_SetCurrDataCounter(DMA1_Channel6, sizeof(gprsRxBuf));# w: b7 o/ F% e N2 D2 g# Q9 }
- DMA_Cmd(DMA1_Channel6, ENABLE); * Q7 ~' ?: }* J2 }
- }
( w! U; Q# [5 y
" n/ _5 t% m/ ~2 ]5 K3 A9 G& [- extern u8 gprsRecOverFlag;
$ r2 E0 }. J& Z: O5 E - extern u16 gprsRecCnt;
7 f) i, m$ f# Z5 r+ G* K+ W, k - void USART2_IRQHandler(void)
, a/ n8 p( j1 G3 I4 A/ q* H& { - {8 k, q! F. B' Y# E5 k: _5 E
- 6 u2 n* l6 }; s; H9 U$ P! {
- u16 uartRecCnt=0;9 c0 _2 G, s1 V) a
- - L6 w8 R- L0 ^9 L
- if(USART_GetITStatus(USART2, USART_IT_IDLE) != RESET)/ o) g: B y T0 d$ |
- {
3 x' o1 i# Y9 H2 e& b - USART_ReceiveData(USART2);
: I# d7 P" c+ L - uartRecCnt = sizeof(gprsRxBuf) - DMA_GetCurrDataCounter(DMA1_Channel6); & }" \0 R" U. H3 U
- //**********************//
5 q: e" L4 s4 k# Y$ q$ m - gprsRecOverFlag=1;
' ~0 @- X+ n: a" F; N9 z - gprsRecCnt=uartRecCnt;8 a! W S! e3 E) A( I! N, b
- //*************************************//
4 o, f$ \! r9 n* A! q; s$ S - gprs_dma_reset(); ( X4 n9 j( i" v" Z
- USART_ClearITPendingBit(USART2,USART_IT_IDLE); 9 N0 ?) e. L+ J3 B) K; D* ^0 H5 M
- }% \/ A- }7 Q, Z
- }0 k. v3 Y0 G# Z' v3 z3 V
8 X+ O4 |+ R8 k+ }- k% ~$ E
" o8 G5 Q( L+ M
7 j1 v) L. `$ `) F, A/ ]% r% [3 s
复制代码 ) k; F. D& o4 y" X+ a! t' Y
|