class Pin – control I/O pins ¶
A pin is the basic object to control I/O pins. It has methods to set the mode of the pin (input, output, etc) and methods to get and set the digital logic level. For analog control of a pin, see the ADC class.
Usage Model:
All Board Pins are predefined as pyb.Pin.board.Name:
x1_pin = pyb.Pin.board.X1
g = pyb.Pin(pyb.Pin.board.X1, pyb.Pin.IN)
CPU pins which correspond to the board pins are available as
pyb.Pin.cpu.Name
. For the CPU pins, the names are the port letter followed by the pin number. On the PYBv1.0,
pyb.Pin.board.X1
and
pyb.Pin.cpu.A0
are the same pin.
You can also use strings:
g = pyb.Pin('X1', pyb.Pin.OUT_PP)
Users can add their own names:
MyMapperDict = { 'LeftMotorDir' : pyb.Pin.cpu.C12 }
pyb.Pin.dict(MyMapperDict)
g = pyb.Pin("LeftMotorDir", pyb.Pin.OUT_OD)
and can query mappings:
pin = pyb.Pin("LeftMotorDir")
Users can also add their own mapping function:
def MyMapper(pin_name):
if pin_name == "LeftMotorDir":
return pyb.Pin.cpu.A0
pyb.Pin.mapper(MyMapper)
So, if you were to call:
pyb.Pin("LeftMotorDir", pyb.Pin.OUT_PP)
then
"LeftMotorDir"
is passed directly to the mapper function.
To summarise, the following order determines how things get mapped into an ordinal pin number:
-
Directly specify a pin object
-
User supplied mapping function
-
User supplied mapping (object must be usable as a dictionary key)
-
Supply a string which matches a board pin
-
Supply a string which matches a CPU port/pin
You can set
pyb.Pin.debug(True)
to get some debug information about how a particular object gets mapped to a pin.
When a pin has the
Pin.PULL_UP
or
Pin.PULL_DOWN
pull-mode enabled, that pin has an effective 40k Ohm resistor pulling it to 3V3 or GND respectively (except pin Y5 which has 11k Ohm resistors).
Now every time a falling edge is seen on the gpio pin, the callback will be executed. Caution: mechanical push buttons have “bounce” and pushing or releasing a switch will often generate multiple edges. See: http://www.eng.utah.edu/~cs5780/debouncing.pdf for a detailed explanation, along with various techniques for debouncing.
All pin objects go through the pin mapper to come up with one of the gpio pins.
构造函数 ¶
-
class
pyb.
Pin
( id , ... ) ¶ -
Create a new Pin object associated with the id. If additional arguments are given, they are used to initialise the pin. See
pin.init()
.
Class methods ¶
-
classmethod
Pin.
debug
( [ state ] ) ¶ -
Get or set the debugging state (
True
orFalse
for on or off).
-
classmethod
Pin.
dict
( [ dict ] ) ¶ -
Get or set the pin mapper dictionary.
-
classmethod
Pin.
mapper
( [ fun ] ) ¶ -
Get or set the pin mapper function.
方法 ¶
-
Pin.
init
( mode , pull=Pin.PULL_NONE , \* , value=None , alt=-1 ) ¶ -
Initialise the pin:
-
mode can be one of:
-
Pin.IN
- configure the pin for input; -
Pin.OUT_PP
- configure the pin for output, with push-pull control; -
Pin.OUT_OD
- configure the pin for output, with open-drain control; -
Pin.AF_PP
- configure the pin for alternate function, pull-pull; -
Pin.AF_OD
- configure the pin for alternate function, open-drain; -
Pin.ANALOG
- configure the pin for analog.
-
-
pull can be one of:
-
Pin.PULL_NONE
- no pull up or down resistors; -
Pin.PULL_UP
- enable the pull-up resistor; -
Pin.PULL_DOWN
- enable the pull-down resistor.
-
-
value if not None will set the port output value before enabling the pin.
-
alt can be used when mode is
Pin.AF_PP
orPin.AF_OD
to set the index or name of one of the alternate functions associated with a pin. This arg was previously called af which can still be used if needed.
返回:
None
. -
-
Pin.
value
( [ value ] ) ¶ -
Get or set the digital logic level of the pin:
-
With no argument, return 0 or 1 depending on the logic level of the pin.
-
With
value
given, set the logic level of the pin.value
can be anything that converts to a boolean. If it converts toTrue
, the pin is set high, otherwise it is set low.
-
-
Pin.
__str__
( ) ¶ -
Return a string describing the pin object.
-
Pin.
af
( ) ¶ -
Returns the currently configured alternate-function of the pin. The integer returned will match one of the allowed constants for the af argument to the init function.
-
Pin.
af_list
( ) ¶ -
Returns an array of alternate functions available for this pin.
-
Pin.
gpio
( ) ¶ -
Returns the base address of the GPIO block associated with this pin.
-
Pin.
mode
( ) ¶ -
Returns the currently configured mode of the pin. The integer returned will match one of the allowed constants for the mode argument to the init function.
-
Pin.
name
( ) ¶ -
Get the pin name.
-
Pin.
names
( ) ¶ -
Returns the cpu and board names for this pin.
-
Pin.
pin
( ) ¶ -
Get the pin number.
-
Pin.
port
( ) ¶ -
Get the pin port.
-
Pin.
pull
( ) ¶ -
Returns the currently configured pull of the pin. The integer returned will match one of the allowed constants for the pull argument to the init function.
常量 ¶
-
Pin.
AF_OD
¶ -
initialise the pin to alternate-function mode with an open-drain drive
-
Pin.
AF_PP
¶ -
initialise the pin to alternate-function mode with a push-pull drive
-
Pin.
ANALOG
¶ -
initialise the pin to analog mode
-
Pin.
IN
¶ -
initialise the pin to input mode
-
Pin.
OUT_OD
¶ -
initialise the pin to output mode with an open-drain drive
-
Pin.
OUT_PP
¶ -
initialise the pin to output mode with a push-pull drive
-
Pin.
PULL_DOWN
¶ -
enable the pull-down resistor on the pin
-
Pin.
PULL_NONE
¶ -
don’t enable any pull up or down resistors on the pin
-
Pin.
PULL_UP
¶ -
enable the pull-up resistor on the pin
class PinAF – Pin Alternate Functions ¶
A Pin represents a physical pin on the microprocessor. Each pin can have a variety of functions (GPIO, I2C SDA, etc). Each PinAF object represents a particular function for a pin.
Usage Model:
x3 = pyb.Pin.board.X3
x3_af = x3.af_list()
x3_af will now contain an array of PinAF objects which are available on pin X3.
- For the pyboard, x3_af would contain:
-
[Pin.AF1_TIM2, Pin.AF2_TIM5, Pin.AF3_TIM9, Pin.AF7_USART2]
Normally, each peripheral would configure the af automatically, but sometimes the same function is available on multiple pins, and having more control is desired.
To configure X3 to expose TIM2_CH3, you could use:
pin = pyb.Pin(pyb.Pin.board.X3, mode=pyb.Pin.AF_PP, af=pyb.Pin.AF1_TIM2)
或:
pin = pyb.Pin(pyb.Pin.board.X3, mode=pyb.Pin.AF_PP, af=1)
方法 ¶
-
pinaf.
__str__
( ) ¶ -
Return a string describing the alternate function.
-
pinaf.
index
( ) ¶ -
Return the alternate function index.
-
pinaf.
name
( ) ¶ -
Return the name of the alternate function.
-
pinaf.
reg
( ) ¶ -
Return the base register associated with the peripheral assigned to this alternate function. For example, if the alternate function were TIM2_CH3 this would return stm.TIM2