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

stm32 电平转换电路问题 请教

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 fangxiaoyan 于 2014-4-25 20:09 编辑
4 z! F( j4 y) A6 i0 D! \
' t; {1 ^: @) F& Z- {$ [' `7 J硬件连接:底板-连接器J6-75lvc4245-stm32.如图所示
! U9 C, o  R6 T- X( D( }- ]软件配置:JCR/JCL配置为上拉,下降沿触发中断
' n1 g0 W4 X6 G+ ^8 L9 B0 e实现功能:JCR/JCL检测到下降沿时执行中断函数+ X8 l* t; `7 B
实际问题:1.不连底板,75lvc4245悬空,JCR/JCl均为低电平并不为默认的上拉
+ _' h! j- Z6 \! x2 f                2. 将JCR接到5v,测得JCR电压4.93,  cR电压1.33,接地时对应 0、0" N, y, i3 F# T* @, C# A; T& g; @
                  将JCL接到5v,  测得JCL电压5.00,   cL电压 3.27,接地时对应 0、0- w0 S7 W3 g) J. n) I- e* P
                            JCR转换异常,无法中断;虽然JCL制造出下降沿,仍然不能进入中断。。                       

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

2474lvc.jpg

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

25STM32.jpg

该用户从未签到

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

该用户从未签到

3#
 楼主| 发表于 2014-4-26 14:43 | 只看该作者
yujingfa 发表于 2014-4-25 21:33, X( q% V/ z' Z0 t9 [
将输出也断开不连,是否跟负载电流有些关系
% g  Z, C2 A$ o* y" w  f. V
输入是底板,输出到stm32,输出咋断开?

该用户从未签到

4#
发表于 2014-4-27 15:00 | 只看该作者
STM32支持兼容5V的电平的
' l9 y. D: O4 G2 `2 c8 c/ u- z& d" _6 V$ e  W2 K5 s0 g1 l) C$ Z
Up to 112 fast I/O ports
( r+ s, Z. ~! A1 K% ^- 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没配置对  D+ ], Z' N4 S" e' C
而且STM32的数字管脚能扛5V的

该用户从未签到

7#
 楼主| 发表于 2014-5-5 14:43 | 只看该作者
seawolf1939 发表于 2014-5-4 17:349 U1 E/ L+ c5 {( _2 ?2 e
感觉是楼主STM32没配置对! Y; D0 r% L' r' K, O
而且STM32的数字管脚能扛5V的

, ?+ }' ]' @/ Z0 L怎么叫没配置对?下面是我的io端口配置。。STM32大部分管脚兼容5v,第一次做板,出于谨慎和方便才用的电路转换电路。。6 L/ j+ {( V/ L$ t: k7 @, w
void SENSOR_GPIO_Config()
: [3 M% c1 K% O) `1 o# p{# O6 W% k6 X9 e1 e
        GPIO_InitTypeDef GPIO_InitStructure;
2 F9 j- E  y$ R% N. `2 c    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
3 }6 Q( ~. E* S        //U101, L-H
. c, S% W6 C* B6 W- W; m& @2 ^* i+ F4 q- t/ M: p
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_11 ;  //前方障碍物4 a9 I& |8 ^" v6 D4 h
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//下拉引脚,检测障碍物; m# F8 @4 |$ r$ {) j8 N* a, Y/ c6 b
    GPIO_Init(GPIOC, &GPIO_InitStructure) ;
* W1 a& B* J7 u7 O        //CLH
3 H0 h! C  X1 |$ f% E, `
1 e6 l# t# @" u( ~  U& \4 w        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_9 ;  //左方碰触开关
3 H( p+ S" A9 L3 P    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉引脚,检测障碍物+ S$ e$ F0 j. Y! T5 f9 z2 y
    GPIO_Init(GPIOC, &GPIO_InitStructure) ;9 R0 D% l$ r' |( g7 X

% E0 `# t4 y4 C: f4 y. I        //CRH
; b, s% A) E) R        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_13 ;  //右方碰触开关
$ I$ l5 D$ h- u( z6 W; b& f    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉引脚,检测障碍物
+ Q" E1 ?+ w1 w' F* C    GPIO_Init(GPIOD, &GPIO_InitStructure);
& V* C: b1 f9 [8 y9 y5 S3 x3 c          GPIO_SetBits(GPIOD,GPIO_Pin_13);8 ]3 _1 d8 O6 Y: B; @: v2 S
/ ]& ]- T$ `/ Z7 h; e
        //U81,U87,U78,U714 L-H$ ~. }- W1 `. k/ i5 F$ o# e
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7| GPIO_Pin_8|GPIO_Pin_10| GPIO_Pin_12  ;  //防跌落
4 U( y0 O2 v8 [3 B    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//下拉引脚,检测障碍物$ u# @' D* D1 {# j" O
    GPIO_Init(GPIOC, &GPIO_InitStructure) ;+ S1 K' U7 y( ~, L

' ]; S1 b( n, B2 G' M, N        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_12 ;   //悬空碰触开关4 c+ r3 h* R8 B, _8 M/ ~
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  //上拉引脚,检测障碍物//* K3 w' r$ e* }8 U9 X  o
    GPIO_Init(GPIOD, &GPIO_InitStructure);
7 X" t2 |9 b9 F        //J162(H_PW)" {- y0 B. T' t$ X& E8 Z
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_14 ;  //红外接收8 j! b# y5 E( O$ O: V3 O, V
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//由高到脉冲
# g# F/ {5 W! m" `    GPIO_Init(GPIOD, &GPIO_InitStructure);        + V% r9 f2 D: ~/ c# r4 p. q/ t9 C
//        //J64(H_PW)# s& ^% u. c: _0 i) D& u) y3 P
//        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_2 ;  //右侧光电编码
% ^* I% s$ ]7 `! R. ?; M//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//由高到脉冲
1 ?. M. g, b* n4 a//  GPIO_Init(GPIOD, &GPIO_InitStructure);
6 i) N" f4 }! B: c+ m        //J34(H_PW)
" G1 c- D3 S7 d1 W9 o9 g$ n        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7 ;  //左侧光电编码
2 l4 M9 j/ J. m& x5 X8 r    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//由高到脉冲
- I  b6 p1 @/ `) U# B) \' V+ U+ ~    GPIO_Init(GPIOE, &GPIO_InitStructure);       
2 G- d1 |( f( L) m5 w        //J64(H_PW)1 }/ b7 C! Q' W8 `& F% s
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0 ;  //右侧光电编码
6 P, `1 X7 E. n    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//由高到脉冲  Y$ ~6 ~0 z# I1 T; d9 E
    GPIO_Init(GPIOA, &GPIO_InitStructure);                                                                                                                  4 S3 Y/ h9 [! f6 T" x
}

该用户从未签到

8#
 楼主| 发表于 2014-5-5 14:45 | 只看该作者
天才小痴 发表于 2014-4-27 15:00" [- q, `5 R% z! _
STM32支持兼容5V的电平的* U1 h- Y8 x* l/ [

& L! F1 |1 V! }6 M& Z* ?Up to 112 fast I/O ports

2 J9 E# [5 ^* Z, v是的,第一次做电路板,出于谨慎才用电路转换芯片

该用户从未签到

9#
 楼主| 发表于 2014-5-5 14:58 | 只看该作者
ArthurGXH 发表于 2014-4-28 08:55) a" y1 i: I$ [3 X" c' \
可能是STM32的IO口配置有问题。

8 |9 U2 I% Q( M. X; V现在测试时没有加底板。直接使用杜邦线将CR/CL接5v,然后接地,制造下降沿进入中断,正常进入中断函数;问题是拔掉地线,插向5v脚时又中断一次。貌似拔插过程中出现不确的电平。。我的IO配置如下
4 `/ L1 b# S5 f7 \5 k9 tvoid SENSOR_GPIO_Config()2 \/ |* M* Q9 a5 |& n& a3 j* v
{& z" b" X; y9 m; d3 p" ?& u
        GPIO_InitTypeDef GPIO_InitStructure;
& G6 Y8 d  a2 z* x- E    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);1 A  r) ]' r) t6 A/ _/ W3 ]
        //U101, L-H( p: M. e5 W4 T

& i* w3 e, v# ?7 g# }) S* l: d        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_11 ;  //前方障碍物
1 h' @/ h+ p* Q: y6 ]  U    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//下拉引脚,检测障碍物
6 T7 A" A% H" Q+ i8 y9 X- v6 |: w9 u    GPIO_Init(GPIOC, &GPIO_InitStructure) ;5 l( ?2 T0 K% j9 W2 [6 V
        //CLH
6 F4 ~" t6 e8 v. G8 h3 J  D
/ P& M0 J% g3 l& \& T# o0 {        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_9 ;  //左方碰触开关
2 F% _- G* U4 H0 p' A1 D5 G5 Z    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉引脚,检测障碍物
9 u- b. r: r* T( w    GPIO_Init(GPIOC, &GPIO_InitStructure) ;' k4 j7 V" ^" y. b; D* W

9 T4 {1 a6 q- a, [8 T        //CRH
3 y8 e* X& }' R/ h0 {; `        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_13 ;  //右方碰触开关. Z8 y/ U) h0 N9 b; H8 z- n
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉引脚,检测障碍物
) Z" m+ y7 x0 I- G7 Z% [    GPIO_Init(GPIOD, &GPIO_InitStructure);
' \! P' ?* {& W  i- s& B5 b2 J          GPIO_SetBits(GPIOD,GPIO_Pin_13);
5 v! Y' S- Z4 K! I( Y
3 v+ B! r( f; C( j  J9 ^& O1 }        //U81,U87,U78,U714 L-H
9 l/ i: o! c, |  I7 F# k        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7| GPIO_Pin_8|GPIO_Pin_10| GPIO_Pin_12  ;  //防跌落
" [! l# y" L! b& B    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//下拉引脚,检测障碍物
" d; \( u# W7 c3 Y; P    GPIO_Init(GPIOC, &GPIO_InitStructure) ;$ e: K/ I3 ]2 e8 {1 h

$ A6 p/ ?' ~4 U0 ]# c- z* O        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_12 ;   //悬空碰触开关
) {3 f9 e) c6 _. G9 }9 `  b    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  //上拉引脚,检测障碍物//) ?8 Y4 c/ G+ o
    GPIO_Init(GPIOD, &GPIO_InitStructure);
0 G9 t; ^" `3 S+ q# c4 M) _8 i: l        //J162(H_PW)% x7 L( u2 f* r' K: c( v& N
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_14 ;  //红外接收
# F5 N& m9 u2 A5 U    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//由高到脉冲
7 y+ C& i$ z# r    GPIO_Init(GPIOD, &GPIO_InitStructure);        & U8 e5 W& C/ f; ?
        //J34(H_PW)6 y$ e# G4 k. _
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7 ;  //左侧光电编码
. U3 W& ]- J8 J1 o    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//由高到脉冲/ ~# K  N8 I5 x8 r, D
    GPIO_Init(GPIOE, &GPIO_InitStructure);       
) k0 B6 [' @+ ~' ]! Y! K        //J64(H_PW)
% ^% t) Y" D# r3 g# i, U. c        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0 ;  //右侧光电编码
& d1 \, `# `8 B! `% ]    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//由高到脉冲
  E" h7 e5 S$ M+ V! V+ r    GPIO_Init(GPIOA, &GPIO_InitStructure);                                                                                                                 
3 s5 M9 n" P# e" {}
& Z9 i. o9 ^/ o4 T' ?8 k中断配置
) p, e7 z$ y, @0 e/ vvoid NVIC_Configuration(void)1 `- K7 Y0 P' E& m% U3 f; d
{) M5 }  \3 c- }* N' ^$ T
  NVIC_InitTypeDef NVIC_InitStructure;: `, n0 t5 `6 B
  EXTI_InitTypeDef EXTI_InitStructure;# x9 V4 i" D3 G) F, l
/* Configure one bit for preemption priority */9 T9 Y/ l1 G( N
/* 优先级组 说明了抢占优先级所用的位数,和子优先级所用的位数   在这里是1, 7 */   
& \" F- Z3 b- e+ T8 y7 V0 V  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
1 h! c2 G' ~8 {! G  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);             //使能复用功能时钟
1 h) T& y" G. n! c  5 @' U. k6 Q7 r' @/ h
  NVIC_InitStructure.NVIC_IRQChannel =EXTI9_5_IRQn;                                 //外部中断9-5/ q) j' F1 K' z% d
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;             //抢占优先级 1
5 g. T3 O7 s' I8 ~5 d! A' B  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;                         //子优先级1  
7 j$ `0 W) `/ d, ^1 G  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                 //使能
( K7 U& p" T3 P' @! }8 Y0 l  NVIC_Init(&NVIC_InitStructure);+ j; P( d# n4 Y* f5 y1 s

9 P" [, b/ ]9 P) H* O( t  NVIC_InitStructure.NVIC_IRQChannel =EXTI15_10_IRQn ;                         //外部中断15-103 f; v8 S$ I4 v& I! ^2 E
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;             //抢占优先级 1# A5 K' L) c' |' \# v! V8 n
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;                         //子优先级2  . r- [# Y$ P2 k: b0 S4 U; A
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                 //使能
/ M% Z* X" O- w' [# {  NVIC_Init(&NVIC_InitStructure);# {  n$ }5 u  X3 i

0 @$ `; ~/ ?0 J( ~6 I" @  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource7);         //障碍物中断* e' }% k* U( z# J# q0 Z
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource8);( W" O& i, _3 c5 N
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource9);7 B' y' F0 L  ?( |5 q
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource10);
& H" K0 F- Q3 I% @+ ?5 w. C9 E  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource11);- M) u+ o6 E4 A9 q; s; e
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource12);% Q8 p! D/ C5 z' N  p/ K% S
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource13); / {& L; T5 T* {. a% A  T8 Z3 `& \
5 M8 w5 I3 W! P, @  s% ~! l% J
  EXTI_InitStructure.EXTI_Line = EXTI_Line7;                                                //PC7 跌落% M" ]. K/ l, e3 Q: o2 D& j9 _
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                            //中断模式
2 Q* ~/ M# A8 Q, E) c  EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Rising;                             //升沿触发5 b3 `5 Q; w/ E- I# F' r
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;( e5 {, X2 ~+ Q& Q: u! K  F
  EXTI_Init(&EXTI_InitStructure);5 F/ R; C2 t( L$ b; `: d/ c
       
6 F; d( x. n5 L$ u+ @5 W* ?  EXTI_InitStructure.EXTI_Line = EXTI_Line8;                                                //PC9跌落) y! I2 Q+ C# d' m& ]1 B9 H( x
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                            //中断模式2 D/ x# U9 I! m  l
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;                    //升沿触发/ ^5 |; w+ j7 h
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;, m0 S, }# @* w& x) j8 A
  EXTI_Init(&EXTI_InitStructure);
" ]) n, [6 P' A$ T; m+ h& L7 X5 j  t1 `
  EXTI_InitStructure.EXTI_Line = EXTI_Line9;                                                //PC9 左碰触9 O+ T) W/ |. p7 t; a
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                            //中断模式
7 d7 I. N1 @% ~) Q; c" [2 ]% ?3 }  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;                    //下降沿触发
5 ^/ R4 ?: g: O& o7 D! H, A  EXTI_InitStructure.EXTI_LineCmd = ENABLE;; ?2 M! M. K% B9 R' v
  EXTI_Init(&EXTI_InitStructure);
6 k  v- s  Y$ l9 [  Q
, s6 q- c6 i3 ?% v  EXTI_InitStructure.EXTI_Line = EXTI_Line10;                                                //pc10 跌落' [) F2 j8 `1 `6 y9 ^+ G: n+ A
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                            //中断模式
' @4 i  U! m2 ~6 g; O0 G2 W  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;            //上升沿触发# O: S5 T6 b9 P& X
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
/ `; Q4 }' K$ O" z  EXTI_Init(&EXTI_InitStructure); + n8 V) x% w) C: [" G

2 I& ~0 \6 M% w) V1 R. D  EXTI_InitStructure.EXTI_Line = EXTI_Line11;                                                //U101 FRONT检测状态# E$ e: X% Q0 j& k, q
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                            //中断模式/ l! O& T" b2 q! z5 p
  EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Rising;                  //上升沿触发2 U( o4 ?) \( T$ A7 {0 n6 W; l
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
: ^8 ]9 E9 E4 A) ~  [7 \8 U" e" H  EXTI_Init(&EXTI_InitStructure);' b& |3 `( }" E; z+ n& t1 c2 f

3 r8 c( h# B" e3 u6 p  EXTI_InitStructure.EXTI_Line = EXTI_Line12;                                                // PC12 跌落
4 M+ V3 e) l$ q) [. C  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                            //中断模式
& S8 k+ c' n9 s2 A  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;                //上升沿触发
5 _! G- A# S, k% Z+ \$ e* R  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  I. P" r( [& X" q; {6 |  EXTI_Init(&EXTI_InitStructure);
! t1 S& |) {) K7 w& [, D! ]) |& h) ?8 w8 i% m3 ]3 J. ~& F& X/ ^
  EXTI_InitStructure.EXTI_Line = EXTI_Line13;                                                //右触
2 X5 K& U. m+ Z+ o8 i' |  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                            //中断模式# W2 Z3 c8 p& M; C" m' q
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;                //上升沿触发) S* d3 c2 _2 A3 J
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;4 I+ W4 s) u" T: w
  EXTI_Init(&EXTI_InitStructure);         //配置结束后引起了中断
  h$ ]0 x5 e: I% q现在测试时没有加底板。直接使用杜邦线将CR/CL接5v,然后接地,制造下降沿进入中断,正常进入中断函数;问题是拔掉地线,插向5v脚时又中断一次。

该用户从未签到

10#
 楼主| 发表于 2014-5-5 14:59 | 只看该作者
seawolf1939 发表于 2014-5-4 17:340 {5 x" \1 B" A4 w: {
感觉是楼主STM32没配置对
3 d  f7 |% g( \0 I9 p而且STM32的数字管脚能扛5V的

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脚时又中断一次。

该用户从未签到

11#
发表于 2014-5-8 03:16 | 只看该作者
没有去抖电路,插拔出现中断触发一点都不奇怪
1 H8 u' U$ Z) s% y0 D建议加上拉,最好能加上简单rc电路

该用户从未签到

12#
 楼主| 发表于 2014-5-8 08:47 | 只看该作者
ccmc 发表于 2014-5-8 03:16+ L1 J' t. w1 p. [' s* E4 V
没有去抖电路,插拔出现中断触发一点都不奇怪
$ ^; \3 @: g" F# M& l建议加上拉,最好能加上简单rc电路

# ~! G, p- _; A5 f. v5 {. i7 Q恩,明白了。。回去实验。。

该用户从未签到

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

该用户从未签到

14#
 楼主| 发表于 2014-5-11 19:17 | 只看该作者
tgwfcc 发表于 2014-5-9 17:592 q2 `" Q: U* x3 P9 V: s, K( T
楼主在做什么项目,我现在也在做STM32的小项目,能不能交流下

- \& P# a& f8 s8 J2 I智能小车。。

该用户从未签到

15#
发表于 2014-5-12 21:52 | 只看该作者
fangxiaoyan 发表于 2014-5-11 19:17; f3 i( M) U5 C
智能小车。。

+ }: k* k4 K. x: g! h5 l) y. R好吧,我做的比较简单,就接了一个传感器
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-21 14:09 , Processed in 0.125000 second(s), 27 queries , Gzip On.

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

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

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