ARM Embedded Tutorial - Simple GPIO on and off output/ru

From Free Pascal wiki
Jump to navigationJump to search

Deutsch (de) English (en)

Простой ввод и вывод GPIO

Порт состоит из «16 контактов», поэтому в большинстве регистров используются младшие «16 бит».

Исключение: «CRx» и «BSRR», с «BSRR» вы можете использовать старшие 16 бит для установки контактов.

Регистры доступа к порту

Для доступа к GPIO доступны следующие регистры:

  • CRL — низкий регистр конфигурации
  • CRH — высокий регистр конфигурации
  • IDR - регистр входных данных
  • ODR - регистр выходных данных
  • BSRR — регистр сброса набора битов.
  • BRR - регистр сброса битов
  • LCKR - Регистр блокировки конфигурации порта

Во всех регистрах, кроме CRL и CRH, каждый бит соответствует выводу микроконтроллера.

Включить GPIO

Прежде чем вы сможете получить доступ к GPIO, вам необходимо включить его. Без этого доступ невозможен! Для PortA – PortC это делается следующим образом.

  RCC.APB2ENR := RCC.APB2ENR or (% 111 shl 2);

Прямое манипулирование портом

Прежде чем вы сможете переключить вывод GPIO на ВЫСОКИЙ уровень, вам необходимо настроить его как выход. Это делается через регистры CRL и CRH.

Для этих мини-примеров я обычно выбираю «Контакт 13 порта C», потому что к этому выводу подключен светодиод STM32F103C.

Внимание: Светодиод загорается при подключении анода к источнику питания.

CRx - Установить функцию контакта

Для настройки функции доступен один полубайт (4 бита). Контакт 13 порта C на выходе. Поскольку 13 больше, чем 7, для этого используется ВЫСОКИЙ регистр CRH. 13 - 8 = 5; Это пятый полубайт в CHR. Pin0–Pin7 будет настроен с использованием CHL.

  PortC.CRH := $00300000;

IDR - считать весь порт

  // На контакте 13 ВЫСОКИЙ уровень?
  Result := PortC.ODR and (1 shl 13) > 0;

ODR - Записать весь порт

С помощью этой функции записывается весь порт сразу.

  // Только контакт 13 установлен на ВЫСОКИЙ уровень.
  PortC.ODR := 1 shl 13; 

  // Все контакты в НИЗКОМ уровне.
  PortC.ODR := 0;

BSRR - Один контакт на НИЗКИЙ уровень

С помощью этой функции вы можете установить отдельные контакты на «НИЗКИЙ».

   // Устанавливаем только вывод 13 на НИЗКИЙ уровень, остальные остаются неизменными.
   PortC.BSRR := 1 shl 13;

BSRR - Изменить весь порт, используя битовую маску

С помощью этой функции вы можете установить отдельные контакты на «НИЗКИЙ».

   // Установите только PIN13 на НИЗКИЙ, PIN12 на ВЫСОКИЙ, остальные остаются неизменными.
   PortC.BSRR := (1 shl 13) + ((1 shl 12) shl 16);

BRR - Один контакт на ВЫСОКИЙ

С помощью этой функции отдельные контакты могут быть установлены на «ВЫСОКИЙ».

   // Устанавливаем только контакт 13 на ВЫСОКИЙ уровень, остальные остаются неизменными.
   PortC.BSRR := 1 shl 13;

Старшие 16 бит BSRR соответствуют 16 битам BRR.

См. также