本帖最后由 zhdzhd-174422 于 2018-7-31 21:41 编辑 ; U |3 t" c, ~ `/ ^& }
`1 J5 D, }5 k. p) j8 P所有的GPIO都在pyb.Pin.board.Name中预先定义了:; ~: _/ ?5 I4 e4 i
! U9 {8 s7 ?! _5 n
x1_pin = pyb.Pin.board.X1
9 z4 U$ S; P! T5 [g = pyb.Pin(pyb.Pin.board.X1, pyb.Pin.IN)* b" |" J+ h# k/ w
& d8 @" ~0 S9 a- ~也可以这样使用
* }* w. L2 a; b9 o4 h+ ~ sg = pyb.Pin('X1', pyb.Pin.OUT_PP)) Z% Q P( v* d1 j/ M
, C9 e- ~/ T9 G: c& k$ L3 R0 A
也可以自己定义GPIO名称
7 D Q/ O$ r. }4 Y4 x" mMyMapperDict = { 'LeftMotorDir' : pyb.Pin.cpu.C12 }
% |1 Z ?5 O# R2 B0 O. Wpyb.Pin.dict(MyMapperDict) p+ f# E. @% G/ J5 m7 \8 ]. a- j
g = pyb.Pin("LeftMotorDir", pyb.Pin.OUT_OD)
. {& Q2 R4 b, D- Y: a0 j
6 z1 i9 Y* L `; t5 H可以映射GPIO
8 Y7 O0 z, m2 J e5 l( b. Fpin = pyb.Pin("LeftMotorDir")
( d3 S# V( H2 M9 k, x
+ q- W! o, ~1 \- w; }甚至可以通过函数进行映射
$ f" K/ R( i7 l" Mdef MyMapper(pin_name):
$ c: X S% T* g% }0 u if pin_name == "LeftMotorDir":
+ N: [$ b! \: R! z( `2 v# e return pyb.Pin.cpu.A03 t7 ~& n( P) @& @* \: N. T& Z( n" j
i( }, @6 P* @ a4 c6 A% ^; q5 Dpyb.Pin.mapper(MyMapper)
5 G$ I" F1 e6 k+ S
9 e% t; Z( l! @2 Q( n% Y! s- P$ O. Z, ]8 _* v/ y
基本用法" S+ ` l! {* k: _" z! Q, L
# H; @5 G- Y, \: _- 定义GPIO: pyb.Pin(id)
" g1 I4 _. F+ nLED1=Pin(Pin.cpu.A13, Pin.OUT_PP)
, ^$ C2 i# ^3 M! U9 Psw = Pin("X17")
; z' o* o6 l6 H+ r P7 isw = Pin('X17', Pin.IN, Pin.PULL_UP)
9 A z+ z3 C. K+ ?' Q, O8 Z/ Qsw = Pin(Pin(Pin.cpu.B3, Pin.IN, Pin.PULL_UP): }" g1 @5 f, N
2 b5 f1 p- T+ k; P- 返回GPIO的第二功能列表
in.af_list()
6 Y$ U; t4 M6 e s5 sPin.af_list(pyb.Pin.board.X1)
( s% A! X8 ]& v6 ^4 WPin.af_list(LED) ^6 o7 H4 O( o* w# Z9 T6 H. s
7 ^! e8 B/ j8 G$ ^' W6 a; z# m
- 获取/设置debug状态:Pin.debug(state)8 P$ s' i3 v" m1 P" N$ u6 D3 O9 E8 h, n
Pin.debug(True)' U, m# P' B) E- G ?
, e% I9 V) b' u" V" t( L
- 获取/设置GPIO映射字典:Pin.dict(dict)' q; C4 M; u' d& ^6 }
MyMapperDict = { 'LeftMotorDir' : pyb.Pin.cpu.C12 }
4 D b% J" G1 tpyb.Pin.dict(MyMapperDict)
0 m; q6 T$ a$ W% {- U
" { {/ U3 }! ]6 A# f( l7 _1 E- T- 获取/设置Pin映射
in.mapper(func)% ` [( K/ w! l2 T" Q0 r% A9 }4 @
6 x6 U4 b2 j j5 R4 ]
- 初始化: Pin.init(mode, pull=Pin.PULL_NONE, af=-1)$ H- a C$ f3 f* Q
- mode:) p1 X# L2 L* ?1 N
- Pin.IN - 输入
- Pin.OUT_PP - 推挽输出(push-pull)
- Pin.OUT_OD - 开漏输出(open-drain)
- Pin.AF_PP - 第二功能,推挽模式
- Pin.AF_OD - 第二功能,开漏模式
- Pin.ANALOG - 模拟功能
9 y' J: h+ V; r
- pull
: b; K% t0 v" g$ R, a% c; g' f- Pin.PULL_NONE - 无上拉下拉
- Pin.PULL_UP - 上拉
- Pin.PULL_DOWN - 下拉! Q8 `. a* g1 K, v5 _( B
- af,当mode是Pin.AF_PP或Pin.AF_OD时,选择第二功能索引或名称
X1 w& V+ h" J w" M( U
# |* s" i8 ^' k, q+ o4 k
q' ~1 `5 I6 y9 K) X5 G- ?- 获取/设置GPIO逻辑电平
D8 M0 {: c0 EPin.value(sw) # sw and LED has predefine
1 [1 \, Q5 I/ z7 w$ o" z4 o, cPin.value(LED, 1)
. N7 j1 j" O( D( L1 EPin.value(LED, 0)" N7 k( `/ z* C& P9 ^
LED.value(1)4 `, t0 x: b) R ^: U
LED.value(0)5 X1 j+ L/ e j& m" k
& E q6 H' m7 Z2 `- 当前GPIO第二功能索引:pin.af()
- 当前GPIO关联基本地址:pin.gpio()
- GPIO的模式:pin.mode()
- GPIO的名称:pin.name()
- GPIO和预定义的名称:pin.names()
- 引脚序号:pin.pin()
- 端口序号:pin.port()
- 上拉状态:pin.pull()
: @# G* v: t' I, X. e: `! l9 |+ h
+ I }- v. |0 ?
0 ~0 J/ Q1 ]( D! t+ D: D( M1 @例程- r; y# w" S5 S( b+ n# |
- from pyb import Pin
- p_out = Pin('X1', Pin.OUT_PP)
- p_out.high()
- p_out.low()
- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
- p_in.value() # get value, 0 or 1
- LED = Pin(Pin.cpu.A14, Pin.OUT_PP)
- LED.value(not LED.value())
- , Y+ s5 c" H! j) [9 @- m
0 J9 t8 E' @/ P- k
-----转自:电子工程世界 |