STM32.GPIO Введение

Порты ввода/вывода — это неотьемлемая часть любого микроконтроллера, независимо от его архитектуры.

Действительно, зачем нужен контроллер с ядром сумасшедшей производительности, но не могущий общаться с внешним миром.  Эдакая вещь в себе.

Порты ввода/вывода являются своеобразным мостом между процессором и внешним миром.

Нужно научиться пользоваться этим мостом.

 

В микроконтроллерах STM32 порты 16-разрядные, и в зависимости от модели их может быть до 7.

Именуются они буквами A…G : PORTA  PORTB  PORTC  PORTD  PORTE  PORTF  PORTG

Порты могут быть сконфигурированы как

  • вход;
  • выход

Если порт настроен на ввод данных, возможны следующие режимы:

  • аналоговый вход;
  • цифровой вход.

Также предусмотренна возможность  подключения подтягивающего резистора.

В отличии от микроконтроллеров AVR подтянуть  можно как к плюсу питания, так и к земле.

Если порт настроен на вывод данных, то необходимо задать:

  • максимальное быстродействие;
  • режим выхода

Максимальное быстродействие  может иметь следующие значения: 2, 10, 50 MHz. 

Режим выхода может быть следующим:

  •  двухтактный выход общего назначения;
  •  выход с открытым стоком общего назначения;
  •  двухтактный выход с альтернативной функцией;
  •  выход с альтернативной функцией с открытым стоком

Два последных режима используются, когда вывод используется каким-то переферийным устройством (например, выход USARTа).

Чем отличается выход общего назначения от выхода с открытым стоком?

Выход общего назначения симетричен.

Логическая единица и ноль на выходе могут дать примерно одинаковый ток.

А выход с открытым стоком предполагает, что на нем может появиться только «земля», когда

транзистор выходного каскада вывода будет открыт. А чтобы на выходе была единица, необходим подтягивающий резистор.

Благодаря этому можно обьединять несколько выходов в одну точку.

 

Приведенная ниже схема показывает структуру портов ввода/вывода и помогает понять выше сказанное.

Если вывод порта сконфигурирован как выход общего назначения, используются транзисторы P-MOS и N-MOS. Если на выходе нужна единица — открывается транзистор   P-MOS, если нужен ноль -  N-MOS.

А если порт сконфигурирован как выход с открытым стоком, верхний транзистор не используется.

На схеме показаны резисторы, позволяющие подтянуть вывод, сконфигурированный как вход, к плюсу питания или земле.

Важный элемент — защитные диоды. Они защищают контроллер от перенапряжений на входе. Этот узел является обычным для микроконтроллеров, но для микроконтроллеров данной серии есть

одна особенность. Дело в том, что для них напряжение питания составляет 3.3 вольта. Но очень мног устройств питаются от 5 вольт. Если соединить выход такого устройства со входом контроллера (скрестить ежа и ужа), будет проблема — 5 вольт с выхода устройства через защитный диод попадут на питание контроллера. Последствия могут быть плачевны. Чтобы исключить такую проблему у данных контроллеров предусмотрены выводы двух типов: обычные, на которые можно подавать уровень не более напряжения питания контроллера, и выводы толерантные (терпимые) к 5 вольтам. В документации эти выводы обозначены буквами FT.

 

В портах контроллеров  STM32 предусмотрена интересная возможность — блокировка настройки порта. 

Если выполнить блокировку, дальнейшее изменение конфигурации порта невозможно (только после рестарта)

Иногда это может быть необходимо.

Например, вы сконфигурировали вывод для работы на ввод, а для работы на выход его конфигурировать нельзя ( вдруг это приведет к выходу из строя какого-то устройства? бывают такие схемы)

Настроили, все работает нормально, и вдруг — сбой от помехи, в результате которого процессор начнет изменять конфигурацию вывода. Может случиться так, что устройство подключенное к этому выводу выйдет из строя(контроллер переконфигурировал вывод, сделал его выходом и подал на него единицу, а устройство, подключенное к этому выводу подало ноль)

А если выполнить блокировку, этого можно избежать.

О первоисточнике можете узнать тут