GPIO #

Piny púzdra mikrokontroléra sú štandardne pripojené k paralelnému rozhrania procesora označované ako GPIO (General Purpose Input Output). Piny sú sdržené do skupín označených ako porty, v STM32 port pozostáva zo 16 pinov. Podľa veľkost púzdra môže mať mikrokontrolér niekoľko portov, pričom na púzdro nemusia byť vyvedené celé porty. Okrem štandardnej funkcie pinu ako GPIO portu majú piny púzdra aj možnosť alternatívnych funkcií, kedy sú pripojené na interné periférie mikrokontroléra, napr. časovače, sériové rozhrania a pod. Pri návrhu komplikovanejších zariadení s mikrokontrolérom vyžaduje pridelenie pinov portom a perifériam dobré premyslenie návrhu.

Časť pinov GPIO je výrobcom označená ako FT, umožňuje ich použitie pre periférie napájané napätím 5V, aj keď mikrokontrolér je napájaný zo zdroja s napätím 3.3V . Toto značne zjednodušuje pripájanie digitálnych periférii pracujúcich s napätím 5V bez inak potrebného prevodníka úrovní.

Základná štruktúra interného zapojenia GPIO pri procesoroch STM32 je na obrázku, podrobný popis je v dokumentácii výrobcu AN4899.

_images/gp_003.png

Obr. 2 Interné zapojenie pinu mikrokontroléru.#

Zapojenie každého pinu portu GPIO obsahuje

  • ochranné diódy voči krátkodobému prepätiu a ESD

  • rezistory pre prevádzku portu v režime pull-up, pull-down

  • digitálne výstupné obvody s výkonovým budičom

  • digitálne vstupné obvody s komparátorom s hysterézou

  • pre vybrané piny portov multiplexer pre pripojenie analogových periférií

Knižnica pyb.Pin #

MicroPython obsahuje knižnicu pyb s modulom Pin. Riadenie pinov je prostredníctvom ich mena, z dôvodu kompatibility sú piny na kitoch Nucleo označované podľa modulov Arduina ako aj podľa ich pripojenia k vývodom mikrokontroléra. Na obrázku je zapojenie kitu s procesorom STM32L476, zapojenie kitov s iným mikrokontrolérom môže byť odlišné, podrobnosti sú v dokumentácii.

Červeno sú označené piny (dutinky) na konektor Morpheo podľa Arduino, modro sú označené piny podľa ich pripojenie k mikrokontroléru. Konverzná tabulka medzi oboma konektormi pre procesor STM32L476 je v súbore pins_L476.

_images/nucleo-l476.png

Obr. 3 Označenie pinov modulu Nucleo-64 s procesorom STM32L476.#

Poznámka

V Arduine môže mať jeden pin niekoľko onačení, napríklad pin v Nucleo-64 označený ako PA5 má v Arduine označenie D13, PA5, LED_GREEN, LED_ORANGE, LED_RED.

Trieda Pin #

Inicializácia

Pin.init(mode, pull=Pin.PULL_NONE, *, value=None, alt=-1)

Konštanty pre nastavenie funkcie pinu

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.ALT    - configure the pin for alternate function, input or output;
Pin.AF_PP  - configure the pin for alternate function, push-pull;
Pin.AF_OD  - configure the pin for alternate function, open-drain;
Pin.ANALOG - configure the pin for analog.

Konštanty pre nastavenie typu výstupu

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.

Funkcie pre riadenie portu

Pin.value([value])  Get or set the digital logic level of the pin:
Pin.__str__()       Return a string describing the pin object.
Pin.af()            Returns the currently configured alternate-function of the pin
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.
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

Príklady #

Preddefinované periférie na doske NUCLEO64 s procesorom STM32L476RG

_images/gp_004.png

Obr. 4 Zapojenie tlačítka a LED diódy na kite Nucleo-64#

PC13 - Button           nemapuje sa do Arduina
PA5  - Green LED        (STM32) PA5 -> D13 (ARD)

Tlačítko

Nestlačené tlačítko má hodnotu 1, stlačené 0.

from pyb import Pin
p = Pin('PC13', Pin.IN)

# tlac hodnoty tlacitka 0/1
print(p.value())  

# definovanie prerusenia a callback funkcie
p.irq(lambda p:print(p.value()))

Green LED

from pyb import Pin
p = Pin('D13', Pin.OUT)
p.value(True)
p.value(False) 

Úlohy #