找回密码
 注册
关于网站域名变更的通知
查看: 2213|回复: 15
打印 上一主题 下一主题

stm32 电平转换电路问题 请教

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2014-4-25 20:02 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 fangxiaoyan 于 2014-4-25 20:09 编辑 7 u; y/ L$ y$ g( {% ]% \4 r

9 w! Z4 B: G; ?" A) E硬件连接:底板-连接器J6-75lvc4245-stm32.如图所示
8 C' o* |+ f' r  b$ S& h: d软件配置:JCR/JCL配置为上拉,下降沿触发中断. G4 A; O1 a# ]) ?+ h
实现功能:JCR/JCL检测到下降沿时执行中断函数
: f% c$ J! h- x4 j& R; a实际问题:1.不连底板,75lvc4245悬空,JCR/JCl均为低电平并不为默认的上拉
' @% @# y/ z* v                2. 将JCR接到5v,测得JCR电压4.93,  cR电压1.33,接地时对应 0、0
2 s! z( ~. E5 P$ Z0 j                  将JCL接到5v,  测得JCL电压5.00,   cL电压 3.27,接地时对应 0、0
. Z$ ?6 M" C& s9 i5 U3 S( ?                            JCR转换异常,无法中断;虽然JCL制造出下降沿,仍然不能进入中断。。                       

2474lvc.jpg (71.14 KB, 下载次数: 2)

2474lvc.jpg

25STM32.jpg (148.91 KB, 下载次数: 1)

25STM32.jpg

该用户从未签到

2#
发表于 2014-4-25 21:33 | 只看该作者
将输出也断开不连,是否跟负载电流有些关系

该用户从未签到

3#
 楼主| 发表于 2014-4-26 14:43 | 只看该作者
yujingfa 发表于 2014-4-25 21:33
! \  g- `9 M; r* r* T将输出也断开不连,是否跟负载电流有些关系
# q" N# h; J) d- r& \# w: d
输入是底板,输出到stm32,输出咋断开?

该用户从未签到

4#
发表于 2014-4-27 15:00 | 只看该作者
STM32支持兼容5V的电平的
; o+ B- D* G/ E2 o% X# V  Z8 {- j8 X+ k( Y
Up to 112 fast I/O ports
' i9 A+ K  o" {. ^# M9 {" U- 51/80/112 I/Os,all mappable on 16 external interrupt vectors and almost all 5V-tolerant

该用户从未签到

5#
发表于 2014-4-28 08:55 | 只看该作者
可能是STM32的IO口配置有问题。

该用户从未签到

6#
发表于 2014-5-4 17:34 | 只看该作者
感觉是楼主STM32没配置对
; Y5 t, g" i" n; G. V; o而且STM32的数字管脚能扛5V的

该用户从未签到

7#
 楼主| 发表于 2014-5-5 14:43 | 只看该作者
seawolf1939 发表于 2014-5-4 17:34
4 j0 B6 T5 U0 H7 J感觉是楼主STM32没配置对
4 L1 L) F, ]/ G, t% P0 V而且STM32的数字管脚能扛5V的

) v# J% |1 l$ w( K) o怎么叫没配置对?下面是我的io端口配置。。STM32大部分管脚兼容5v,第一次做板,出于谨慎和方便才用的电路转换电路。。+ {4 Q. q( k' P4 }/ b; S
void SENSOR_GPIO_Config()) z- }5 D# f/ d" T$ `% l: b2 y
{; N8 V( {+ M5 h4 [+ F" H7 _( C
        GPIO_InitTypeDef GPIO_InitStructure;9 `9 O$ q! m0 W* j2 j/ N# w0 U" g
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);0 z' ^$ [6 C9 y1 ]& J! h& {
        //U101, L-H
! ^3 a6 h) V7 r# L% v; s9 b2 ^, `6 v% M
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_11 ;  //前方障碍物' y8 K! v$ ~5 n% _: Q
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//下拉引脚,检测障碍物
" G* z: L7 l6 p% N) n    GPIO_Init(GPIOC, &GPIO_InitStructure) ;
! v5 X" Y. Q; m        //CLH
4 l$ c# @1 I8 g6 X- r5 M/ V1 L+ H( X- n0 q( ]
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_9 ;  //左方碰触开关0 a, b' _' A8 i# b
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉引脚,检测障碍物) d2 [# A( D* {9 |! Y. @- R0 d
    GPIO_Init(GPIOC, &GPIO_InitStructure) ;' e0 b2 o% O2 S0 ^

/ ~1 S  F( l! @( K# k        //CRH
2 q( c! g4 ^8 }+ q4 b9 b$ N. @5 [        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_13 ;  //右方碰触开关5 a2 B, R0 q4 j: Q0 o" ^3 s" i
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉引脚,检测障碍物& S/ O1 T! Q1 ]. f9 _/ i
    GPIO_Init(GPIOD, &GPIO_InitStructure);$ e$ w/ [+ p. |# L
          GPIO_SetBits(GPIOD,GPIO_Pin_13);7 H2 v; ^0 o. q9 l% p1 }" r0 E$ C
' C$ R% _  i! S, \; ^# ~1 v
        //U81,U87,U78,U714 L-H* G8 h5 A( j: ~9 p
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7| GPIO_Pin_8|GPIO_Pin_10| GPIO_Pin_12  ;  //防跌落
; _0 n8 `/ M" y% a9 C! r    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//下拉引脚,检测障碍物5 v; e6 d# o1 x. P, S
    GPIO_Init(GPIOC, &GPIO_InitStructure) ;& d+ \3 }$ E3 I) c" _/ ^
( j, m  S( G8 T0 h) x; @
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_12 ;   //悬空碰触开关3 ^' o- p$ D7 I0 m/ N" W
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  //上拉引脚,检测障碍物//
  t$ g: d1 O& a" n7 O6 X    GPIO_Init(GPIOD, &GPIO_InitStructure);' U% H- ~2 T$ i
        //J162(H_PW)
2 E- e. W; T- ^1 G2 J        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_14 ;  //红外接收  R( ]; m% l, R; [
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//由高到脉冲
/ M4 {  \$ Q! D% k. q    GPIO_Init(GPIOD, &GPIO_InitStructure);        - z- K4 q' M: G( U. h) c7 W3 K$ r
//        //J64(H_PW). t' _9 r7 ]6 i, p: n5 w" Y5 ]
//        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_2 ;  //右侧光电编码
- j0 b( ~  o  u( E//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//由高到脉冲" A' i. U7 U* v$ N" t
//  GPIO_Init(GPIOD, &GPIO_InitStructure);6 r8 S% r1 ^7 h0 o5 O
        //J34(H_PW)1 z# i( b5 `0 C% h5 g
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7 ;  //左侧光电编码8 @, _7 X3 N/ p* Z, J
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//由高到脉冲2 j! [4 d. e9 z* D- K
    GPIO_Init(GPIOE, &GPIO_InitStructure);        / n' V8 i& D' `2 G0 D6 I7 b% T
        //J64(H_PW)
1 E6 H! }# H$ q        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0 ;  //右侧光电编码/ m2 N- l) i1 t0 N7 G
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//由高到脉冲
0 h! Q7 g$ q# ]& P1 z# B# e8 m    GPIO_Init(GPIOA, &GPIO_InitStructure);                                                                                                                 
  W+ G9 A( X* P1 G* l/ q}

该用户从未签到

8#
 楼主| 发表于 2014-5-5 14:45 | 只看该作者
天才小痴 发表于 2014-4-27 15:002 g0 u+ O2 s3 K* g; w3 A
STM32支持兼容5V的电平的; A5 V& w3 ?0 |* A
0 B) h9 ]$ D! n
Up to 112 fast I/O ports

% d$ A9 t$ _: n2 t5 I1 ]是的,第一次做电路板,出于谨慎才用电路转换芯片

该用户从未签到

9#
 楼主| 发表于 2014-5-5 14:58 | 只看该作者
ArthurGXH 发表于 2014-4-28 08:559 Q7 Q) h" D& m5 f8 [0 R
可能是STM32的IO口配置有问题。
/ K! y- Y' l3 @
现在测试时没有加底板。直接使用杜邦线将CR/CL接5v,然后接地,制造下降沿进入中断,正常进入中断函数;问题是拔掉地线,插向5v脚时又中断一次。貌似拔插过程中出现不确的电平。。我的IO配置如下+ r( y: ?9 E6 p5 o/ n) W( ?& C
void SENSOR_GPIO_Config()0 Z( m- s) s% U# l* `8 m/ k: M
{
) L# c' A& g0 H/ h        GPIO_InitTypeDef GPIO_InitStructure;
) C4 G: }0 ?# w( t/ P  y: `. V" |; C* `    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
; R# B' Q4 y3 k        //U101, L-H
9 u5 Y$ e. T- w& g
) `" p; l3 S( Z0 S/ P8 C- r8 j        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_11 ;  //前方障碍物" U. S) H( B& Y3 j' h" W' I, |, t
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//下拉引脚,检测障碍物
# y% M* ~* r9 L# f# `0 M    GPIO_Init(GPIOC, &GPIO_InitStructure) ;
( H8 y+ s' |5 _0 S: J9 X        //CLH/ Q. e& C+ ^' E) O/ n8 L' H6 Y
' |4 p7 ^9 v5 }, n$ y
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_9 ;  //左方碰触开关
! M) u# O$ D; D& }' H    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉引脚,检测障碍物7 g2 ^$ [% _& U: C' C
    GPIO_Init(GPIOC, &GPIO_InitStructure) ;3 i+ |1 F+ r* C9 K, ^6 y

$ w0 X2 i, i7 S/ p        //CRH
# V3 O: A) L) e7 A  A        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_13 ;  //右方碰触开关
6 n: \: H: U3 i% W! S8 e0 m7 A7 D& p    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉引脚,检测障碍物
5 m, X. N( G0 o5 ]    GPIO_Init(GPIOD, &GPIO_InitStructure);
; _2 v/ u  x/ ?  m6 w% L6 ~          GPIO_SetBits(GPIOD,GPIO_Pin_13);
7 q- D. ^8 }  F. @* d+ B5 B! l( ~* v
2 D4 _& A+ [5 z+ V( O1 v& z        //U81,U87,U78,U714 L-H
% F5 J3 h/ O( F& u6 Z, z        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7| GPIO_Pin_8|GPIO_Pin_10| GPIO_Pin_12  ;  //防跌落
2 y4 l" i, r% S    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//下拉引脚,检测障碍物" X8 c0 M4 `  F- \! q
    GPIO_Init(GPIOC, &GPIO_InitStructure) ;. u9 |& Z2 H6 V
% B: G8 o  b: F  z! u
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_12 ;   //悬空碰触开关
7 u! v6 A* b$ m    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  //上拉引脚,检测障碍物//
. J" E, p$ D" Q) F    GPIO_Init(GPIOD, &GPIO_InitStructure);
. B' d! e0 _$ [/ @3 L* _/ ^        //J162(H_PW)
' t  {0 G( t3 O; h# L# x' m; C        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_14 ;  //红外接收
7 B1 T- A8 e2 R+ c    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//由高到脉冲
* Z" ?5 E' m8 j% B$ i8 D1 i    GPIO_Init(GPIOD, &GPIO_InitStructure);        ) B9 C9 I0 n/ M" g! m2 @
        //J34(H_PW)# a& l) h- O+ i2 F" k
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7 ;  //左侧光电编码
, u+ W) T5 U# g3 a    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//由高到脉冲
" v8 b4 T" K) Q1 [- T1 D) O& I# v    GPIO_Init(GPIOE, &GPIO_InitStructure);        8 r0 E; T6 ]! ^) ?' {* R' u1 {) A
        //J64(H_PW)
2 j  M4 N0 q8 C        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0 ;  //右侧光电编码) b) |% `! V7 e* o& U6 V$ `: O
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//由高到脉冲
( I6 N, S! n3 O1 m' J; f- E    GPIO_Init(GPIOA, &GPIO_InitStructure);                                                                                                                 
6 \) M' r  y% ]}
+ q$ g$ |. z2 O, r中断配置4 B: M2 O/ t  r5 d; l! k! q0 [
void NVIC_Configuration(void)3 k/ P, w4 O* U' r' \
{# U% ~& q; k' [% k4 x/ z4 B- u# z
  NVIC_InitTypeDef NVIC_InitStructure;
3 W% P5 w2 s/ M  ~0 ]$ o/ e  EXTI_InitTypeDef EXTI_InitStructure;9 c( N- T3 E& l4 x
/* Configure one bit for preemption priority */% J& K: e8 C3 a* ?/ U# r
/* 优先级组 说明了抢占优先级所用的位数,和子优先级所用的位数   在这里是1, 7 */   
  F. [; S- b$ c3 h" v+ S; ^  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);& S) A% j; E$ }8 H
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);             //使能复用功能时钟0 [; \3 J/ w1 m; N& k, r
  
! X" x3 x$ y3 g7 v3 V( A9 e2 R# _  NVIC_InitStructure.NVIC_IRQChannel =EXTI9_5_IRQn;                                 //外部中断9-5
1 @& R- I2 w3 G# C4 i" {$ s7 @) M  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;             //抢占优先级 1* h0 }4 E% J% l8 X3 T* L
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;                         //子优先级1  
' m" ]1 T% M3 Q+ h+ o- w  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                 //使能
# ^% N  n( ~0 ?6 X1 q1 E9 r  NVIC_Init(&NVIC_InitStructure);1 I6 p" N3 K7 W
0 @+ }8 X* |8 o# @3 p9 K  N
  NVIC_InitStructure.NVIC_IRQChannel =EXTI15_10_IRQn ;                         //外部中断15-10/ X6 N1 ~' |7 h" a" F" i
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;             //抢占优先级 1' V) p( M& V  {8 d
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;                         //子优先级2  ( \9 H% G* }5 ~" j
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                 //使能: B' F" [  P" i) L' }5 W
  NVIC_Init(&NVIC_InitStructure);* O  i2 P( a! F' u, q+ S

0 ]3 j5 G  k* V' I& P# W' r' m- E  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource7);         //障碍物中断
4 n0 b: ^2 x' |0 y# c/ e8 H  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource8);/ z7 F& b% H5 C+ x6 X, M. I6 Z
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource9);" J2 y( D% ]& o6 T* P& [
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource10);5 [& B- m; [$ y
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource11);
5 b! a4 I& Q+ N( E8 r  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource12);
5 X8 A1 c! ]# g! ~& p  u; k2 k% f  GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource13); - J( b0 k# X2 Y# W% V' f
8 r/ h( p  C4 ]6 H4 Z$ s
  EXTI_InitStructure.EXTI_Line = EXTI_Line7;                                                //PC7 跌落7 q% [' c3 M* V* y6 g1 @6 `- H, Z1 w
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                            //中断模式
8 ]2 g3 S) z! U# g* ^$ z  EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Rising;                             //升沿触发
; K$ R" J# h' W7 j5 ^4 W" Y) m# P/ ^  EXTI_InitStructure.EXTI_LineCmd = ENABLE;" E+ c; E9 I  |6 A/ ~
  EXTI_Init(&EXTI_InitStructure);
, T$ Z4 @- U7 ~/ Y7 C( z        ; z3 s6 d6 m) `+ ~# K
  EXTI_InitStructure.EXTI_Line = EXTI_Line8;                                                //PC9跌落* Q0 ^2 z2 [9 }" _- k* [! o* W
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                            //中断模式
9 T" x* Y; Y6 ]" p  M0 p' |  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;                    //升沿触发9 ]0 z; I; M1 O0 Y
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;6 L+ t- D5 s! d1 x; l; x
  EXTI_Init(&EXTI_InitStructure);
1 q& y1 t( k8 S7 [0 ~' V
4 m" T$ `, H  |  EXTI_InitStructure.EXTI_Line = EXTI_Line9;                                                //PC9 左碰触% L) |9 Z3 T: ?8 T
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                            //中断模式
% L' d! z/ L9 [/ |- K  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;                    //下降沿触发
) e$ ^4 n9 h1 s9 L+ w. w  EXTI_InitStructure.EXTI_LineCmd = ENABLE;& ?, J, x" C5 k4 S) ^+ E
  EXTI_Init(&EXTI_InitStructure); $ S( j  n9 ~' ?* U

1 Q8 k1 [! w) x- @) V9 e  EXTI_InitStructure.EXTI_Line = EXTI_Line10;                                                //pc10 跌落
# E  H6 T; C6 G# V0 w  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                            //中断模式: _9 K/ T+ M% Q# l1 n1 g1 {/ ?
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;            //上升沿触发
$ O) l. S/ \6 L, }# f5 |3 G# D  EXTI_InitStructure.EXTI_LineCmd = ENABLE;5 @, ]4 M7 ]* c8 g
  EXTI_Init(&EXTI_InitStructure);
+ b/ r. ]% l  o. n+ D$ B9 D6 Y  m9 S
  EXTI_InitStructure.EXTI_Line = EXTI_Line11;                                                //U101 FRONT检测状态
& c8 \( r/ h7 m0 D$ ]" X/ D( U, ~6 ]  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                            //中断模式, v3 w( \& h( y; L
  EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Rising;                  //上升沿触发2 e8 e! x( g5 M( @
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;( V7 Y  c$ u% L( O/ Y% p1 r% T8 Q: \
  EXTI_Init(&EXTI_InitStructure);
4 x  S% c% V: T; `) u
' q1 q: d) X+ t  EXTI_InitStructure.EXTI_Line = EXTI_Line12;                                                // PC12 跌落. ~# K' g, N- J/ ?" h" e8 U
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                            //中断模式
* N6 p4 c/ X/ F& c# [6 v2 J  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;                //上升沿触发
) w0 H1 y3 ?3 Q+ }  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
" o% ~" s, O' B- K6 @  EXTI_Init(&EXTI_InitStructure);
' |; t# z5 g% b: a3 o
; _1 V$ F1 C) V: d" O8 U  EXTI_InitStructure.EXTI_Line = EXTI_Line13;                                                //右触
8 o1 h" g( ]; Z$ ?- E9 J- t  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                            //中断模式
, f0 N- g8 `4 V  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;                //上升沿触发, w7 ~% H9 z/ j& u- o) Z" x
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;! b4 i# _5 C: c# ?7 I% I5 H7 r
  EXTI_Init(&EXTI_InitStructure);         //配置结束后引起了中断' Q2 U. I# m, o+ Q
现在测试时没有加底板。直接使用杜邦线将CR/CL接5v,然后接地,制造下降沿进入中断,正常进入中断函数;问题是拔掉地线,插向5v脚时又中断一次。

该用户从未签到

10#
 楼主| 发表于 2014-5-5 14:59 | 只看该作者
seawolf1939 发表于 2014-5-4 17:348 ~1 L, r3 p5 M6 O+ ]/ Z$ T
感觉是楼主STM32没配置对
7 ^0 i1 [1 z5 }5 |7 {" B$ p而且STM32的数字管脚能扛5V的
$ 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脚时又中断一次。

该用户从未签到

11#
发表于 2014-5-8 03:16 | 只看该作者
没有去抖电路,插拔出现中断触发一点都不奇怪
3 @- b, }) p! O. Y$ q8 r建议加上拉,最好能加上简单rc电路

该用户从未签到

12#
 楼主| 发表于 2014-5-8 08:47 | 只看该作者
ccmc 发表于 2014-5-8 03:16
$ ]: n4 p/ N" c* R; W没有去抖电路,插拔出现中断触发一点都不奇怪
  G2 ^( F. ~) y  g0 @" g3 ?建议加上拉,最好能加上简单rc电路

: G, H- S+ j; V2 R恩,明白了。。回去实验。。

该用户从未签到

13#
发表于 2014-5-9 17:59 | 只看该作者
楼主在做什么项目,我现在也在做STM32的小项目,能不能交流下

该用户从未签到

14#
 楼主| 发表于 2014-5-11 19:17 | 只看该作者
tgwfcc 发表于 2014-5-9 17:59
: e  O; a/ m! \. F4 _# }楼主在做什么项目,我现在也在做STM32的小项目,能不能交流下

% v- n1 V6 W0 X: @. _! i9 @智能小车。。

该用户从未签到

15#
发表于 2014-5-12 21:52 | 只看该作者
fangxiaoyan 发表于 2014-5-11 19:176 X# o) i6 ?2 t# O9 @& L
智能小车。。
! H- d' u3 |+ o% \9 V' `/ _" F
好吧,我做的比较简单,就接了一个传感器
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-2 07:34 , Processed in 0.156250 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表