|
$ n; \% m! A: I7 r# O
现在测试时没有加底板。直接使用杜邦线将CR/CL接5v,然后接地,制造下降沿进入中断,正常进入中断函数;问题是拔掉地线,插向5v脚时又中断一次。貌似拔插过程中出现不确的电平。。我的IO配置如下- k7 K' v: b0 I3 V9 L5 D
void SENSOR_GPIO_Config()
3 z, i' U2 R. n, C+ o{
' q2 m3 J; V0 y- Y% B& Y GPIO_InitTypeDef GPIO_InitStructure;
7 @( o" ]$ H# G! T( | RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);" L3 t- b' H3 b' W) _) [/ K5 w) l
//U101, L-H" e( i1 j7 G, L
# V" ]7 U ]. Y# j( L# r$ }7 `
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 ; //前方障碍物 c. @/ `4 T- M: C& ?
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//下拉引脚,检测障碍物
' z: d0 `- g8 s7 C$ f GPIO_Init(GPIOC, &GPIO_InitStructure) ;: q3 W2 H, d& M- G' d
//CLH) J: y& W$ C/ h3 B$ d% g& W6 k
- f) }9 F6 o9 F7 j) T
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 ; //左方碰触开关7 A1 b- V' [$ L6 P" `! o
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉引脚,检测障碍物' p: L9 [" a" i9 c3 ~# S2 G
GPIO_Init(GPIOC, &GPIO_InitStructure) ;
. F" Y( X& N3 X3 }4 [
6 R3 x, w- i9 K1 o9 a* c( C //CRH' I7 J* V. p. h s2 Q) a3 M
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 ; //右方碰触开关
9 }9 p: L% S% U a. q) | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉引脚,检测障碍物
7 U6 o: J; q7 n9 b; g GPIO_Init(GPIOD, &GPIO_InitStructure);
# F& O$ X3 h& C/ x; i GPIO_SetBits(GPIOD,GPIO_Pin_13);" F- F, T( `5 {2 Y n8 t
$ d6 ^; Y# E% }/ U9 o
//U81,U87,U78,U714 L-H- m M3 L. o+ E, g
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7| GPIO_Pin_8|GPIO_Pin_10| GPIO_Pin_12 ; //防跌落
$ f8 J$ a( C& G. t0 P, B GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//下拉引脚,检测障碍物
0 W( X: _2 U7 k% j# l* _ GPIO_Init(GPIOC, &GPIO_InitStructure) ;2 a, f& s( S" t. v
) v$ H" ]& f. D9 D GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 ; //悬空碰触开关, S* M M7 P) X4 y/ {+ C
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉引脚,检测障碍物//
) H& A* M7 U5 D7 J GPIO_Init(GPIOD, &GPIO_InitStructure);
|, u6 g- m, T+ \$ M //J162(H_PW)
. ~! L I" P6 @' }. B8 P GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 ; //红外接收
9 [2 v( I" l) ~3 A B& { GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//由高到脉冲
4 V" I/ |& p0 ]! ~# |" ] GPIO_Init(GPIOD, &GPIO_InitStructure);
# [9 U8 P# T1 k3 ?+ M- V: n! l: c //J34(H_PW)9 [: Z0 r3 Y( N# l% B4 r
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 ; //左侧光电编码
5 w, B) {- }1 v) `' S8 [ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//由高到脉冲+ L7 y$ o( z. ?/ k$ I( V
GPIO_Init(GPIOE, &GPIO_InitStructure); 5 x1 J4 T4 _% s* R+ H1 I. e
//J64(H_PW)
" ?0 k: V% h# [: j* r# g, e3 h GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ; //右侧光电编码# `2 F( G! S7 V+ M
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//由高到脉冲
: Y0 C% v& P* v; O$ k' @ GPIO_Init(GPIOA, &GPIO_InitStructure); # M; v v* h, E. {
}
5 n: L+ e/ M, Y3 f中断配置
. d2 m* k6 C& W: `) X B1 O! ivoid NVIC_Configuration(void)
. s5 J+ v1 o, G. A6 r9 {9 ~+ h F{; U I8 R3 C) n* }7 w8 W+ i: d
NVIC_InitTypeDef NVIC_InitStructure;5 V1 y2 k) p2 J( n
EXTI_InitTypeDef EXTI_InitStructure;
( D) M1 c" L5 B. T2 F, h /* Configure one bit for preemption priority */4 i2 U/ Y7 U0 j( G- H
/* 优先级组 说明了抢占优先级所用的位数,和子优先级所用的位数 在这里是1, 7 */ 8 M9 E! v! i; ]4 R6 u
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
4 X1 C. k& g, ^2 K/ i. P RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //使能复用功能时钟
/ }/ X8 F, ]2 w9 I3 p
$ e: e# c" d! S- b NVIC_InitStructure.NVIC_IRQChannel =EXTI9_5_IRQn; //外部中断9-5$ _: I6 W6 \5 c4 E6 l6 w2 d3 ~( }
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //抢占优先级 1, {0 ?( \0 a( a7 P6 g
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //子优先级1 1 ^! V p8 u' K, u A1 H" e. u
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能. s0 Q: t9 }8 e1 g; X
NVIC_Init(&NVIC_InitStructure);
5 K5 y: {6 J- j5 d0 k9 U! Z, G$ P! K! }! E
NVIC_InitStructure.NVIC_IRQChannel =EXTI15_10_IRQn ; //外部中断15-10; [2 H& y* @0 p3 a/ ?
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //抢占优先级 1; G1 b- b, a5 T: V
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //子优先级2 $ ^* w3 [" _9 l) G6 [
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能
4 F1 j8 ?" v, S2 K. ] NVIC_Init(&NVIC_InitStructure);
. A. S8 I& P3 l5 E
0 H; A4 h: y- M' c' u" N8 b GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource7); //障碍物中断
8 Z9 z+ z! [) T) \( e$ M GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource8);+ K) W* Q2 o" S2 H3 T1 j& j
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource9);
% e& M* f a$ `1 G/ W& P GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource10);
% z4 @! \0 w9 \3 h GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource11);3 e: v9 v* ?5 e3 {
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource12);- G: W: m& w6 j0 c! c
GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource13);
( M6 l: G% s5 }: O
1 `6 X2 |2 |5 \* i( H3 |& e& N! J EXTI_InitStructure.EXTI_Line = EXTI_Line7; //PC7 跌落
& Y( v" S& w& a. M: m EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式* H# H6 }2 }( p8 r2 Z# u+ h2 n
EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Rising; //升沿触发6 {% E2 P' j5 n) h5 t9 R
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
/ u# X/ v1 C' a EXTI_Init(&EXTI_InitStructure);' h3 A, W. z4 o
3 n4 q, O% X' F" n" R& h$ y. M EXTI_InitStructure.EXTI_Line = EXTI_Line8; //PC9跌落
" L) |( K' r8 u% h {8 b EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式
' c0 Y" G" e) `9 E* U7 K: ]) N$ D EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //升沿触发" o: P$ I9 e: S, f: ~1 D/ s
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
( d- ~ @0 H1 K6 w3 i EXTI_Init(&EXTI_InitStructure);
+ ]' x2 k/ \3 T# p7 [# e9 i1 Y" ?8 _, @# D1 I6 `, O6 z
EXTI_InitStructure.EXTI_Line = EXTI_Line9; //PC9 左碰触, R* M1 `$ O- w! ^
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式
_/ |7 J6 |. G& _ EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
1 X9 T; ?9 q) M# q EXTI_InitStructure.EXTI_LineCmd = ENABLE;
$ M( N# @" n6 h8 A4 A6 s& k9 h# F( r EXTI_Init(&EXTI_InitStructure);
) ~$ x" T/ f# ^+ V- |7 V$ e
+ j; j/ u6 M5 t4 d4 n- a EXTI_InitStructure.EXTI_Line = EXTI_Line10; //pc10 跌落
$ W- ~# L- f5 h6 }1 s0 L EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式8 \% D* _: n/ F" ^
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿触发
1 T8 V" ^, y" s' a: S8 E EXTI_InitStructure.EXTI_LineCmd = ENABLE;8 w% E2 f: c: {. v
EXTI_Init(&EXTI_InitStructure); 0 L. u* s3 ~0 w% R" `: O- D9 r
8 h" q" f# M. s1 }# ] EXTI_InitStructure.EXTI_Line = EXTI_Line11; //U101 FRONT检测状态
+ g {% V$ s; |" P5 ~ EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式
0 N9 h7 L6 ^1 B4 Z; A% I; j8 X! q EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Rising; //上升沿触发& k5 S, Y. @1 Y# b+ n. l3 P
EXTI_InitStructure.EXTI_LineCmd = ENABLE;" a6 q% N" H7 ?- N8 w
EXTI_Init(&EXTI_InitStructure);
8 h& L+ h/ U! w }# }( q+ G' Q+ N+ L4 ~3 @7 O" n8 v) ~3 n
EXTI_InitStructure.EXTI_Line = EXTI_Line12; // PC12 跌落
6 ^$ t6 [( F* g# u0 F$ d7 g EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式! Y6 c" t, [2 `, ]0 l
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿触发% m2 D: K5 W) T( ?$ G4 A: ~
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
: G* W2 Q* b; o6 B+ f- [ EXTI_Init(&EXTI_InitStructure);
2 p: i5 {1 P, i" [, n0 X3 _
7 W, m, p1 \1 k1 r. _1 v EXTI_InitStructure.EXTI_Line = EXTI_Line13; //右触
; k+ W; e5 C3 G4 C EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式
8 a' e- x6 |0 B; J EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //上升沿触发" d1 w. {$ C. r( h
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
9 w" f. L, W/ D EXTI_Init(&EXTI_InitStructure); //配置结束后引起了中断 g2 v f' G7 b) U3 y& _, S
现在测试时没有加底板。直接使用杜邦线将CR/CL接5v,然后接地,制造下降沿进入中断,正常进入中断函数;问题是拔掉地线,插向5v脚时又中断一次。 |
|