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.
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.
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
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)