1. 配置PA4,PA5为外部中断/ [( |- a1 u9 t; x# |
- void EXTI_Config(void)! S) Q I# r0 J. I' i/ `
- {
6 }5 ~/ C7 J; U D$ ? - EXTI_InitTypeDef EXTI_InitStructure;7 J9 ?. b4 B; T
- GPIO_InitTypeDef GPIO_InitStructure;; `' P" H3 J# ^/ K: n
- NVIC_InitTypeDef NVIC_InitStructure;
l8 \& q) E7 P, r) Y+ T8 I; S
c& R( W- O) P! `- /* Enable GPIOA clock *// ~( c% s5 ?3 P% N4 F8 H9 N: p W
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA|RCC_AHBPeriph_GPIOF, ENABLE);
% j3 R, j' I7 D, M ^
E: \! K1 q* {: @. S C- /* Configure PA4&PA5 pin as input floating */
) R2 W$ T4 C# d, ^/ I) B - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5; I$ x. a) w- j4 r2 V' E
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;& Q9 T& |% D6 e
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;4 s& q' n& m; p+ h( _! `9 i
- GPIO_Init(GPIOA, &GPIO_InitStructure);
, J+ P6 U( ^7 _' ` - & l/ ` \* u" `1 W$ \% N
- /* Enable SYSCFG clock */
& \% P- b# _' B" p* x - RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
/ r7 s) ^! A h4 q8 p
& }$ c6 R# ?0 e k2 x3 z; V- /* Connect EXTI4 Line to PA4 pin */' i; {: x5 Q- q6 X
- SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource4|EXTI_PinSource5);. s0 d# S: ^" d5 o9 U# j
) e, C( C- V9 ~; m% ^7 V# E2 v- /* Configure EXTI4&EXTI5 line */
, h X# P7 H4 Y5 I' Y - EXTI_InitStructure.EXTI_Line = EXTI_Line4|EXTI_Line5;# k, d/ K. ]. U; B
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;5 a/ l, y+ R" d6 A
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
$ p4 k8 f8 E3 i* a+ U - EXTI_InitStructure.EXTI_LineCmd = ENABLE;$ H+ w8 J. x8 v M- J1 _
- EXTI_Init(&EXTI_InitStructure);* o! J! L+ D( p3 P# V) {
- ( ?- o/ J( M1 F. t* s# C+ i
- /* Enable and set EXTI4&EXTI5 Interrupt */3 L" _, |7 w( H5 w$ G
- NVIC_InitStructure.NVIC_IRQChannel = EXTI4_15_IRQn;
' A+ f( B4 X( H' s$ K. ~* \ - NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00;
" H% u1 l# W2 U3 _& X - NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
3 J. u7 a% m2 {& | - NVIC_Init(&NVIC_InitStructure);
8 k8 E6 h* ~3 ~1 A* J* Z - }
复制代码 + f1 \; }- q6 \2 a" i/ R
2, 外部触发中断函数
4 `/ l* z$ J6 E/ W- }- void EXTI4_15_IRQHandler(void): t' k/ [! M! [, Y. H( k
- {) Y) X9 I7 M6 H
- if(EXTI_GetITStatus(EXTI_Line4) != RESET)
; b: k& k4 a* Y" Y% w6 r) o# y6 j7 h - {
& F) G7 g1 F; \5 V" a) e" X: l - /* Clear the EXTI line 0 pending bit */4 n+ |; p/ e+ Q2 `$ `
- EXTI_ClearITPendingBit(EXTI_Line4);( N! ~. q, @# S- h- j# a
- if(PauseFlag == 0)' d* K d1 i( W& z9 m
- {: V% y9 r# p1 v( Q4 N, ]
- ExtiCnt++;* V4 P: m2 O7 h8 T0 }( [. r
* u. _8 g, p) G( h' Q( r- }
; M4 R, \$ Z( M/ A - }, @7 u' k" s, N X) X, |4 L' j5 c
- if(EXTI_GetITStatus(EXTI_Line5) != RESET)8 N# O9 z7 Q2 r8 T' K, t" y9 _
- {- ?- l' Q; J# [8 I+ L# P
- /* Clear the EXTI line 0 pending bit */
$ d" a; h6 B+ o2 j - EXTI_ClearITPendingBit(EXTI_Line5);3 B2 K) K' F$ }# ~9 p
- if(PauseFlag == 0)
, ?$ n9 d3 ]2 O - {
* ], W% Y0 A. ^# ^1 a+ H- a - ExtiCnt++;. S0 M6 l# t. h* B0 |9 {6 Y: |1 w2 o
- & D8 g8 E- v8 d* S
- }
4 a* H2 @- { A, G( T% `( _6 r. J5 M: X - }9 Y! |9 j9 n+ R8 S8 A
- }
复制代码 ; E. `+ ?# r# F
* ?& X4 l4 \, e/ v9 R$ @; H
; A, D# C; X- L# `& e |