|
1 W0 u! f% l, u' P6 [0 o8 n现在测试时没有加底板。直接使用杜邦线将CR/CL接5v,然后接地,制造下降沿进入中断,正常进入中断函数;问题是拔掉地线,插向5v脚时又中断一次。貌似拔插过程中出现不确的电平。。我的IO配置如下8 m/ O$ ?, p7 i/ `" S
void SENSOR_GPIO_Config()+ N" ]2 `3 [5 Y" l6 X( f2 j; B
{) y$ D- N* M( X* n
GPIO_InitTypeDef GPIO_InitStructure;
- A6 G- Q2 _0 ?1 Q* h RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);/ L1 L! I2 }" t. n
//U101, L-H
8 P1 E' B% ~1 E; u+ n7 G) I5 b+ L" ~1 c3 `
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 ; //前方障碍物
4 N8 X* v' x# Y, h. g GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//下拉引脚,检测障碍物
8 N: A/ D! ]# {' |# V9 ? GPIO_Init(GPIOC, &GPIO_InitStructure) ;
# N2 D- }; f7 y //CLH
D# |/ M5 P7 x$ w3 g% ~5 }
1 u! Y( ^4 @! f$ ] GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 ; //左方碰触开关8 U" [7 B5 e& t
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉引脚,检测障碍物
3 _, j" T/ F0 V5 V/ O% ~% l# s GPIO_Init(GPIOC, &GPIO_InitStructure) ;
$ U+ o8 z8 Z+ I% H9 v
0 z* r0 E9 F8 _$ ~- U( f' K& a //CRH- G( N b+ g( ` Y. u, J# t
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 ; //右方碰触开关
( n$ m3 B+ o: G GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉引脚,检测障碍物
3 y+ m, P! f B) j h GPIO_Init(GPIOD, &GPIO_InitStructure);- u" f0 F0 U- Y( @; i
GPIO_SetBits(GPIOD,GPIO_Pin_13);
8 a7 S0 e( c' R# q% F- e; j1 a& x( I' v" r" ^
//U81,U87,U78,U714 L-H# R/ s4 D) P2 x* Q0 F4 t2 P
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7| GPIO_Pin_8|GPIO_Pin_10| GPIO_Pin_12 ; //防跌落
# `. @' ^1 w2 O" G9 m G GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//下拉引脚,检测障碍物
9 ~# W+ ]- R' M% V' B GPIO_Init(GPIOC, &GPIO_InitStructure) ;
4 a" J4 o0 |+ L S; I7 b
6 x: V) \" S& ]5 g+ P7 I1 U GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 ; //悬空碰触开关
# R* B- G( c0 l GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉引脚,检测障碍物//
/ h# v7 N7 h; z8 T GPIO_Init(GPIOD, &GPIO_InitStructure);
/ f7 {1 R* ]9 Y- z, o8 r6 D //J162(H_PW)4 }% i G4 h( ]6 ?4 i9 r1 e2 z
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 ; //红外接收; | g4 J' c0 y0 v
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//由高到脉冲! A8 \3 q1 @$ m# C' z2 m
GPIO_Init(GPIOD, &GPIO_InitStructure); ! ?4 t6 ^8 [& n# Y8 J* N6 m
//J34(H_PW); G+ t( ~# v& D& R- G
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 ; //左侧光电编码( n- y/ |" T# n" K3 j; N2 K! h
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//由高到脉冲0 c; |; P' k9 j0 S6 U' [; ]8 c
GPIO_Init(GPIOE, &GPIO_InitStructure); 2 y8 S+ c; U. x) C
//J64(H_PW)
" c/ X# s9 x7 C( F* k$ s" w GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ; //右侧光电编码5 r6 x" L' ~: t* P% F/ ?/ L+ W" R: ]
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//由高到脉冲" a( ]2 s9 Q1 O: p
GPIO_Init(GPIOA, &GPIO_InitStructure); ) F" i+ T! g- u% O) u/ s
}$ N: K% \: t1 \
中断配置5 t6 h* u! U" H- `" k) J( M4 }
void NVIC_Configuration(void)
, G0 V) ?6 m8 Z7 s{
5 a- {2 H) a! `, j NVIC_InitTypeDef NVIC_InitStructure;
2 k! s. Z' l* i# D$ Q EXTI_InitTypeDef EXTI_InitStructure;
: p' } G5 r0 ~: f5 J$ [8 C /* Configure one bit for preemption priority */
9 C$ i, O0 Q6 {0 e/ J, p /* 优先级组 说明了抢占优先级所用的位数,和子优先级所用的位数 在这里是1, 7 */ r; {8 |; o" _5 I1 `
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);- F$ G) i/ G7 y* S8 s, G
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //使能复用功能时钟, a Y3 W. E6 x. }8 v
3 ?" q/ a D' X5 p+ `' Z; |1 ` NVIC_InitStructure.NVIC_IRQChannel =EXTI9_5_IRQn; //外部中断9-5
. Q6 Z8 _* }2 z/ { NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //抢占优先级 1
4 M1 O1 g0 `) D" Y3 K \ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //子优先级1
; X) S4 \( |; u NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能- X3 R$ h7 a2 J7 ~6 r! s7 U, w( e* `. |
NVIC_Init(&NVIC_InitStructure);
/ `7 Y* R6 t& |8 w8 {
- X, c2 L( i$ m" u& f; L ~ NVIC_InitStructure.NVIC_IRQChannel =EXTI15_10_IRQn ; //外部中断15-10( j; l8 Q( f* x( c I: Q
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //抢占优先级 1% B/ r8 D! z% m! c9 Y
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //子优先级2
) c+ Q8 h8 o5 l& K, ?' U NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能
- U1 m% x' }4 G5 ` NVIC_Init(&NVIC_InitStructure);) P; k, ?7 S# @ a) i) ^! H6 G5 A
/ K$ K7 J% b* R
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource7); //障碍物中断
- c& h* C6 T; ~$ ~ GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource8);
7 ]8 O5 s( B' m1 b GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource9);
' B( ?9 i# ^3 _) s; ]1 B GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource10);9 n+ l5 Q) }& C$ j, T
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource11);9 f+ D' |9 D; t _' m6 o
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource12);4 S) d5 H, ^0 M
GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource13); 5 ?# W5 c" C5 t. @" ~/ b' D* n
* \+ q0 G+ {( d- f# t5 r
EXTI_InitStructure.EXTI_Line = EXTI_Line7; //PC7 跌落
$ q$ J. V3 I) v4 N EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式
& X. o5 s% N6 f2 V EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Rising; //升沿触发! a$ N7 s) q' K6 y
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
& n! D9 }8 s' j0 H& e/ ]( q) z: p EXTI_Init(&EXTI_InitStructure);
9 Y$ d; x6 R& y4 K
- u6 x# K1 {' Q EXTI_InitStructure.EXTI_Line = EXTI_Line8; //PC9跌落% d! q! k( u+ v" K+ K7 G
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式4 x; A3 [* `! ]! M; R+ M) i7 Y4 w
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //升沿触发
$ s( ~: k x. B8 [ EXTI_InitStructure.EXTI_LineCmd = ENABLE;3 s0 ~8 |! r, m, t: W
EXTI_Init(&EXTI_InitStructure);
5 o6 c# e% ?( |! e
: L5 A* G* h. L9 L! w6 Q7 _ EXTI_InitStructure.EXTI_Line = EXTI_Line9; //PC9 左碰触3 b! G0 b3 k7 ?5 f! w' G
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式
' F4 W. I1 l m: q. Z0 Y) {3 p EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
0 N. m7 g; X' s8 K+ f EXTI_InitStructure.EXTI_LineCmd = ENABLE;
& q' J# W2 V! P& Z, n EXTI_Init(&EXTI_InitStructure);
9 {' b4 @# r( x5 o* I9 t. |
$ L1 T- G& `. |$ D EXTI_InitStructure.EXTI_Line = EXTI_Line10; //pc10 跌落5 t6 b% ^* ~& y2 Y
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式2 O' b0 I# \. p% t' j8 ~
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿触发7 T2 F4 N3 i! d. v% G$ l' L
EXTI_InitStructure.EXTI_LineCmd = ENABLE;: r T1 E4 A9 W
EXTI_Init(&EXTI_InitStructure); a2 K& u. p1 U
" t' v* w4 g- q. Z
EXTI_InitStructure.EXTI_Line = EXTI_Line11; //U101 FRONT检测状态& ?* R4 S, Q( v6 A, }
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式5 {' |( V+ V* D# V$ O+ D/ Y
EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Rising; //上升沿触发) ~9 D7 M7 I8 N" M- s
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
% @ O4 }" k C" i EXTI_Init(&EXTI_InitStructure);
n8 f& G- e) e! W
, r0 M# F( Q+ n( q EXTI_InitStructure.EXTI_Line = EXTI_Line12; // PC12 跌落
& t5 ^. E0 ^+ S) S EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式3 U8 C" l* O1 N9 T
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿触发
% n$ }0 e4 w7 Y# f1 Q: g7 V$ A EXTI_InitStructure.EXTI_LineCmd = ENABLE;6 U. \) a7 A6 c0 g# M! j, \
EXTI_Init(&EXTI_InitStructure);
$ B8 f7 z% B+ _2 ], ^8 p7 t+ F4 c: }" Q8 f( Y7 O
EXTI_InitStructure.EXTI_Line = EXTI_Line13; //右触
2 `1 n: ^0 t3 M3 S! i2 L6 O EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式
H% U5 U, f. \7 w: V EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //上升沿触发& \/ l {4 i0 F# q- L, Z
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
+ P) M3 H% N1 w8 L% M EXTI_Init(&EXTI_InitStructure); //配置结束后引起了中断
9 \$ g5 U, q' E1 E现在测试时没有加底板。直接使用杜邦线将CR/CL接5v,然后接地,制造下降沿进入中断,正常进入中断函数;问题是拔掉地线,插向5v脚时又中断一次。 |
|