你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【MicroPython学习】GPIO控制

[复制链接]
zhdzhd 发布时间:2018-7-31 21:34
本帖最后由 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
-----转自:电子工程世界
赞 收藏 评论0 发布时间:2018-7-31 21:34

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版