- u8 gprsTxBuf[100];
0 u: j3 l- I: q0 [" V - u8 gprsRxBuf[1500];
9 {8 ]9 [4 J: {5 M5 `) x. r - //接收DMA初始化. V; S- h$ T" y, C
- void tx_dma_init(void)
' B" B! G, V0 Z* D. O9 ?) E - {
, k, R7 n+ w9 J6 O7 O& m - DMA_InitTypeDef DMA_InitStructure;
6 @6 ~3 N$ a2 {; b3 y* s -
' ^) D1 i y* H4 K T; e" `' G - RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);8 h' [( D8 @, O! b4 V
-
+ h; b3 y. }6 o: A, N: A - DMA_Cmd(DMA1_Channel7, DISABLE); / u z4 t) a( k3 y7 S
- DMA_DeInit(DMA1_Channel7);
) n, \" L, Y, n- k# D - DMA_InitStructure.DMA_BufferSize=sizeof(gprsTxBuf); //ÏÈÉèÖÃΪ1K´óС; D! o/ T) F" p1 z" B' M% t y
- DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralDST;
7 B% B% f/ {: ~+ B- }, ^ - DMA_InitStructure.DMA_M2M=DMA_M2M_Disable; 4 X8 V9 _% @% d( \
- DMA_InitStructure.DMA_MemoryBaseAddr=(uint32_t)gprsTxBuf;
/ r( I @- k4 @; T' }& o4 L/ U - DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;
* w# {2 w9 m% L - DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;
( Z" Q+ y: l- ~6 H - DMA_InitStructure.DMA_Mode=DMA_Mode_Normal;
* C' b" S; m8 t' J {. T. Z - DMA_InitStructure.DMA_PeripheralBaseAddr=(u32)&USART2->DR;
$ B+ l; [1 [# E- s' | - DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;: J# s \* D& ^5 T5 r
- DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;; m" C0 d# S5 o& t* ]& S. E3 ^) y9 b
- DMA_InitStructure.DMA_Priority=DMA_Priority_High; Y! H3 e/ t- S! W
- DMA_Init(DMA1_Channel7,&DMA_InitStructure); //³õʼ»¯TXµÄDMA; x) i3 O( u Q6 l6 ^1 }' h
- }
$ M2 O% u6 Y% a6 p) l0 W1 m - //发送DMA初始化
" c1 `3 [! B0 a! u- y. r) C( n - void rx_dma_init(void)6 L# a1 q% e5 t8 ^( x
- {( H. {; h; ~% y. V) P- H# M! c
- DMA_InitTypeDef DMA_InitStructure;/ d) f1 ?3 B, ^7 K7 h
- 8 ?) \+ a# U' e1 y* S7 s/ b
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);8 b% `4 T1 u" O8 z, W
- DMA_InitStructure.DMA_PeripheralBaseAddr = USART_DR_ADDRESS;
# I: P4 c' N# y; o5 Q. c( t - DMA_InitStructure.DMA_MemoryBaseAddr = (u32)gprsRxBuf;
6 b7 \3 x4 g r: z/ } - DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;: s; a( L( \' s; i& W
- DMA_InitStructure.DMA_BufferSize = sizeof(gprsRxBuf);2 G7 W- c# O! \# N! Y
- DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
7 S/ X8 e4 a- E. a$ n - DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
8 Z9 P: L2 s9 [4 A# V( O - DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;+ v# T. {: h8 k
- DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
e N2 h2 O m$ l - DMA_InitStructure.DMA_Mode = DMA_Mode_Normal ;* `% ^3 R% Z# v8 R& s
- DMA_InitStructure.DMA_Priority = DMA_Priority_High;+ Z! y. e8 O5 @+ n; Y
- DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
# g7 L- O; y+ G+ P1 a - DMA_Init(DMA1_Channel6, &DMA_InitStructure);
' n% A, q0 Q( g+ k j - DMA_Cmd (DMA1_Channel6,ENABLE);
! b( c* W% f6 f5 C% N! d; c - }
. ]( |/ A& K$ ?, W - , m4 S/ l/ s- F6 K# g9 q
- g- \2 ]* w# N. p9 O: d; g- //串口初始化" o9 V ?) S$ k2 Y. K$ ]% Q. T* }& A
- void uart_init(void)5 W4 Q5 v. e. _; M! i# A
- {
9 n) H$ Q# f/ \+ o- { ^5 v - GPIO_InitTypeDef GPIO_InitStructure; * A; B2 Y) H) s$ f4 a3 v4 Q: e
- USART_InitTypeDef USART_InitStructure;
$ C6 X L6 w+ u - NVIC_InitTypeDef NVIC_InitStructure; * P5 v/ F( B/ M* p6 {9 U
-
6 G, b) ^ U4 @- r/ b% G, r, E - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
; { {: V5 P4 _8 v4 G% U - RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
0 H# L o' Y% m9 U1 v$ m, { - RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
1 r5 l& V9 d2 M% a+ y; b - ) G$ l' X/ r/ }% G5 k/ W+ c3 d6 V
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
7 Q3 T3 K5 u! @$ Q7 O, ~ - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
; d- ?5 |) f4 L! ]/ N' `2 n7 _! | - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;$ a5 u. _" T3 l) B. a* u* c
- GPIO_Init(GPIOA, &GPIO_InitStructure);
# v' U7 g8 D9 K+ z0 p* Y - , y/ j& p+ B1 _2 i1 Q! @/ b
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
9 ^6 S( K$ H' `5 V! b6 E/ L - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;" ^! |4 @2 u0 e2 s! T( z: k2 x
- GPIO_Init(GPIOA, &GPIO_InitStructure);) r' O% B$ s* h+ u/ k
-
8 X5 W* E& W( r+ `9 G: f! F - NVIC_InitStructure.NVIC_IRQChannel=USART2_IRQn;; D$ w6 Q% f: f
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;
, w1 e& a9 b+ z8 h8 z8 \ - NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;( J$ }3 ^8 l+ @. H6 [5 k
- NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
+ o, @3 F5 u4 Z - NVIC_Init(&NVIC_InitStructure);
6 b" B) @4 Q4 p+ I - * m& V8 ^) Y" u e) `0 u
- USART_InitStructure.USART_BaudRate = 115200;1 K) M. h9 ~: H: O w# }1 i
- USART_InitStructure.USART_WordLength = USART_WordLength_8b; , T, Z7 i% t! _/ ~# H
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
" ^" j b2 ^. g1 c) e. K& t - USART_InitStructure.USART_Parity = USART_Parity_No;# F& `5 B1 H1 T- ]
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;& D6 _. H w, v8 g( ?% r" n% ]
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;; S9 q: b9 m1 r4 Z |" j" h9 t
- USART_Init(USART2, &USART_InitStructure);# [4 ^7 C8 ?3 n& Q9 l
-
# {5 l0 s( c' \" X0 ^ - USART_DMACmd(USART2,USART_DMAReq_Tx,ENABLE);
# C) l9 ]( t+ ]5 D0 D6 Z5 C2 K - USART_DMACmd(USART2,USART_DMAReq_Rx,ENABLE);
8 i2 E; U3 [% n. [$ d - & R/ J( i$ T m8 u2 l2 }% E2 _
- USART_ClearFlag(USART2,USART_FLAG_RXNE);
* r4 p& j. A# R# ]2 p - USART_ClearFlag(USART2, USART_FLAG_TC);8 Z+ E% d7 E; F2 C
- USART_ITConfig(USART2,USART_IT_IDLE,ENABLE);' I3 I/ v* B x3 P5 V% e$ U
-
6 T* g+ Q8 M% Z. I - USART_Cmd(USART2, ENABLE);
$ W6 G: c, }) k0 g. m+ t9 s - }
- e2 U7 [" s5 X+ D- J% Z8 q* K - //DMA发送数据
2 Y0 W7 M8 n* k" E4 c" `) R - void send_commend(u8 *buf,u16 size)
% a6 M# b# u j& L9 Y# M - {. k+ |/ s. N6 p& G5 E# w/ }
- memset(gprsTxBuf,0,100);1 z. | J; \' Z, i8 U
- memcpy(gprsTxBuf,buf,size);
$ X: G4 }- [8 \8 f% C: [ - : a2 O/ L- I( M# t8 Q3 C% u$ M
- DMA_Cmd(DMA1_Channel7,DISABLE);
2 Y" G: h) l- i) f) f0 O9 K7 E! | - DMA_SetCurrDataCounter(DMA1_Channel7,size);
1 L# Y( s" F* p7 I9 W; B6 R - DMA_Cmd(DMA1_Channel7,ENABLE);0 Y) d% k! u+ Z+ D, P
- }8 B2 i4 c9 T R0 s
* r. x0 g3 g, T" r/ j- void gprs_dma_reset()+ l1 S0 j7 j/ F5 r' L
- {
4 r/ @& J3 L. r. P) |' \: P - DMA_Cmd(DMA1_Channel6, DISABLE ); " T9 M: n' c7 i8 ~
- DMA_SetCurrDataCounter(DMA1_Channel6, sizeof(gprsRxBuf));+ o' {* w$ |/ n: A/ t& O
- DMA_Cmd(DMA1_Channel6, ENABLE); $ ?$ G8 M5 G# K% F% k
- }# N3 H% e* o' f
- n k* N2 Z- G, L8 p& Q- extern u8 gprsRecOverFlag;$ k' }0 X( U/ o% P1 k) T) s
- extern u16 gprsRecCnt;: d3 Q' a; |9 X+ ^
- void USART2_IRQHandler(void)
9 h4 ~. L2 _7 ]$ X/ [) ]3 @ - {& G" ^2 v& y, [& n
- 3 z, y5 N" o, L$ J3 U
- u16 uartRecCnt=0;$ l. i c3 S D2 b) U; L6 `
- 4 ^ x8 I6 J$ C$ H
- if(USART_GetITStatus(USART2, USART_IT_IDLE) != RESET)9 @! G$ B) k% A3 N( o: l+ B3 l
- {
/ O& ~2 N# L a) A) N" r - USART_ReceiveData(USART2);
4 i! X0 b3 ?8 t5 ] - uartRecCnt = sizeof(gprsRxBuf) - DMA_GetCurrDataCounter(DMA1_Channel6); 1 \. ?, i9 Y. @1 m
- //**********************//! f. f7 M0 ?1 n! y' h
- gprsRecOverFlag=1;0 j/ p) T5 y# p3 D# G
- gprsRecCnt=uartRecCnt;) ]3 [9 X1 p# o0 A
- //*************************************//
/ C5 j( B, m, ?9 u/ q3 `. J" S, O - gprs_dma_reset();
9 E. p6 M; P& | - USART_ClearITPendingBit(USART2,USART_IT_IDLE);
2 V7 h! Y7 J; q* Z8 a# D. S - }
u* i0 t% W2 y - }
4 r7 n, P2 ^( o; E* T - ; E; H" N1 E) a7 `; y- a; F
6 K9 A0 ~, g; l- + }$ ?4 V) L+ S9 v( `
复制代码
5 \6 z# J( w4 r) a& a |